Остановить Excel от автоматического преобразования определенных текстовых значений в даты - PullRequest
476 голосов
/ 03 октября 2008

Кто-нибудь знает, есть ли токен, который я могу добавить в свой csv для определенного поля, чтобы Excel не пытался преобразовать его в дату?

Я пытаюсь записать файл .csv из моего приложения, и одно из значений выглядит достаточно похоже на дату, когда Excel автоматически преобразует его из текста в дату. Я попытался поместить все свои текстовые поля (включая поле, похожее на дату) в двойные кавычки, но это не имеет никакого эффекта.

Ответы [ 34 ]

336 голосов
/ 03 октября 2008

Я обнаружил, что, поставив '=' перед двойными кавычками, вы достигнете желаемого. Это заставляет данные быть текстовыми.

например. = "2008-10-03", = "больше текста"

РЕДАКТИРОВАТЬ (согласно другим сообщениям) : из-за ошибки Excel 2007, отмеченной Джеффькинсом , следует использовать решение , предложенное Эндрю : "=""2008-10-03"""

134 голосов
/ 27 февраля 2013

Я знаю, что это старый вопрос, но проблема не исчезнет в ближайшее время. CSV-файлы легко генерируются из большинства языков программирования, довольно маленькие, легко читаемые человеком с помощью простого текстового редактора и вездесущие.

Проблема не только с date в текстовых полях, но что-либо числовое также преобразуется из текста в числа. Несколько примеров, где это проблематично:

  • Почтовый индекс
  • номера телефонов
  • правительственные идентификационные номера

, который иногда может начинаться с одного или нескольких нулей (0), которые выбрасываются при преобразовании в числовое значение. Или значение содержит символы, которые можно спутать с математическими операторами (как в датах: /, -).

Два случая, о которых я могу подумать, что решение «prepending =», как упоминалось ранее, может быть не идеальным равно

  • , где файл может быть импортирован в программу, отличную от MS Excel (на ум приходит функция слияния MS Word),
  • где читабельность может быть важна.

Мой хак, чтобы обойти это

Если к значению до / добавляется нецифровый и / или не датированный символ, значение будет распознано как текст и не будет преобразовано. Непечатный символ будет хорош, поскольку он не изменит отображаемое значение. Однако обычный старый пробел (\ s, ASCII 32) не работает для этого, так как он отсекается в Excel, а затем значение все равно преобразуется. Но есть различные другие символы печати и непечатные символы, которые будут хорошо работать. Самым простым является добавление (добавление после) простого символа табуляции (\ t, ASCII 9).

Преимущества этого подхода:

  • Доступно с клавиатуры или с легко запоминающимся кодом ASCII (9),
  • Ввоз не беспокоит,
  • Обычно не беспокоит результаты слияния (в зависимости от макета шаблона - но обычно он просто добавляет широкий пробел в конце строки). (Если это, однако, проблема, посмотрите на другие символы, например пробел нулевой ширины (ZWSP, Unicode U + 200B)
  • не является большой помехой при просмотре CSV в Блокноте (и т. Д.),
  • и может быть удален путем поиска / замены в Excel (или в Блокноте и т. Д.).
  • Вам не нужно импортировать CSV, но можно просто дважды щелкнуть, чтобы открыть CSV в Excel.

Если есть причина, по которой вы не хотите использовать вкладку, найдите в таблице Unicode что-то еще подходящее.

Другой вариант

может быть для генерации файлов XML, для которых определенный формат также принимается для импорта более новыми версиями MS Excel, и который допускает намного больше опций, похожих на формат .XLS, но у меня нет опыта в этом.

Так что есть разные варианты. В зависимости от ваших требований / приложения одно может быть лучше другого.


Добавление

Нужно сказать, что в более новых версиях (2013+) MS Excel больше не открывается CSV в формате электронных таблиц - еще один быстрый удар в рабочем процессе делает Excel менее полезным ... По крайней мере, существуют инструкции для получения вокруг него. Смотрите, например это Stackoverflow: Как правильно отображать CSV-файлы в Excel 2013? .

98 голосов
/ 17 мая 2011

Отрабатывая решение Джарода и проблему, поднятую Джеффкинсом, вы можете изменить

"May 16, 2011"

до

"=""May 16, 2011"""
59 голосов
/ 21 февраля 2013

У меня была похожая проблема, и это обходной путь, который помог мне без необходимости редактировать содержимое файла csv:

Если у вас есть возможность присвоить файлу имя, отличное от «.csv», вы можете назвать его с расширением «.txt», например «Myfile.txt» или «Myfile.csv.txt». Затем, когда вы откроете его в Excel (не перетаскивая, а используя File-> Open или список наиболее часто используемых файлов), Excel предоставит вам «Мастер импорта текста».

На первой странице мастера выберите «С разделителями» для типа файла.

На второй странице мастера выберите «,» в качестве разделителя, а также выберите текстовый квалификатор, если вы заключили значения в кавычки

На третьей странице выберите каждый столбец отдельно и назначьте каждому тип "Текст" вместо "Общие", чтобы Excel не связывался с вашими данными.

Надеюсь, это поможет вам или кому-то с подобной проблемой!

27 голосов
/ 10 декабря 2010

ПРЕДУПРЕЖДЕНИЕ. В Excel '07 (по крайней мере) есть (еще одна) ошибка: если в содержимом поля есть запятая, он неправильно анализирует = "field, contents", а скорее помещает все после запятая в следующем поле, независимо от кавычек.

Единственный найденный мной обходной путь - исключить =, когда содержимое поля содержит запятую.

Это может означать, что есть некоторые поля, которые невозможно представить точно "правильно" в Excel, но сейчас я надеюсь, что никто не слишком удивлен.

19 голосов
/ 21 апреля 2014

При создании строки для записи в мой CSV-файл на C # мне пришлось отформатировать ее следующим образом:

"=\"" + myVariable + "\""
15 голосов
/ 07 февраля 2014

В Excel 2010 откройте новый лист. На ленте данных нажмите «Получить внешние данные из текста». Выберите файл CSV и нажмите «Открыть». Нажмите кнопку "Далее". Снимите флажок «Tab», поставьте галочку рядом с «Comma», затем нажмите «Next». Нажмите в любом месте первого столбца. Удерживая клавишу Shift, перетащите ползунок до тех пор, пока вы не нажмете последний столбец, затем отпустите клавишу Shift. Нажмите переключатель «Текст», затем нажмите «Готово»

Все столбцы будут импортированы как текст, как они были в файле CSV.

12 голосов
/ 30 ноября 2015

Все еще проблема в выпуске Microsoft Office 2016, довольно тревожная для тех из нас, кто работает с именами генов, такими как MARC1, MARCH1, SEPT1 и т. Д. Решение, которое я нашел наиболее практичным после генерации файла ".csv" в R, который затем будет открыт / доступен пользователям Excel:

  1. Открыть файл CSV как текст (блокнот)
  2. Скопируйте его (ctrl + a, ctrl + c).
  3. Вставьте его в новый лист Excel - он будет вставлен в один столбец как длинные текстовые строки.
  4. Выберите / выберите этот столбец.
  5. Зайдите в Данные- «Текст в столбцы ...», в открывшемся окне выберите «Разграничить» (далее). Убедитесь, что «запятая» помечена (пометка, что она уже показывает разделение данных на столбцы ниже) (далее), в этом окне вы можете выбрать нужный столбец и пометить его как текст (вместо общего) (Готово).

НТН

9 голосов
/ 28 января 2013

Вот простой метод, который мы используем при работе при создании файла csv, он немного изменяет значения, поэтому он не подходит для всех приложений:

Добавить пробел ко всем значениям в csv

Это пространство будет удалено Excel из чисел, таких как "1", "2.3" и "-2.9e4", но останется в датах, таких как "01/10/1993" и логических значениях, таких как "TRUE", останавливая их преобразуется во внутренние типы данных Excel.

Он также предотвращает защелкивание двойных кавычек при чтении, поэтому надежный способ сделать текст в CSV-файле остается неизменным с помощью Excel. ДАЖЕ, если какой-то текст наподобие «3.1415», заключает его в двойные кавычки И предваряет всю строку пробел, т. е. (используя одинарные кавычки, чтобы показать, что вы вводите) '"3.1415". Тогда в Excel у вас всегда есть исходная строка, за исключением того, что она заключена в двойные кавычки и начинается с пробела, поэтому вам нужно учитывать их в любых формулах и т. Д.

8 голосов
/ 03 октября 2008

(при условии, что Excel 2003 ...)

При использовании мастера преобразования текста в столбцы на шаге 3 вы можете указать тип данных для каждого из столбцов. Нажмите на столбец в окне предварительного просмотра и измените неправильный столбец с «Общие» на «Текст».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...