В Excel CSV импорт обрабатывает заключенные в кавычки строки чисел как числовые значения, а не строки


13

У меня есть веб-приложение, которое экспортирует свои данные в файл CSV. Вот один пример строки рассматриваемого файла CSV:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

Поскольку я не могу опубликовать изображение, мне придется объяснить результаты в Excel. Поле «0316295» превращается в число, а начальный 0 исчезает. «8316012,8315844» интерпретируется как одно единственное число: 83,160,128,315,844. Это, очевидно, не предполагаемый результат.

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

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

Одиночная кавычка всегда видна в ячейке в Excel, хотя, если я сам введу число с первой одинарной кавычкой, она показывает только предполагаемую строку, а не одинарную кавычку со строкой.

Кажется, импорт - это не то же самое, что печатать.

У кого-нибудь есть решение здесь?


Вы можете импортировать его, используя LibreOffice или что-то в этом роде? Я только что импортировал и получил: 28 65154 21.02.2013 00:00 false 0316295 8316012,8315844 МУЖЧИНА (если вы можете прочитать это ...?)
FreudianSlip

Этот вопрос похож и предлагает несколько хороших решений: superuser.com/questions/234997/…
Брэд Паттон

@FreudianSlip Нет, мы не можем использовать сторонние решения. Пользователи нажимают на кнопку «загрузить CSV» и файл открывается в Excel. Это среда, с которой мы имеем дело. Не могу усложнить это.
Майкл Орил

@Brad Я читал этот пост ранее в поисках решений. Вот откуда у меня появилась опция с одинарными кавычками, которая мне действительно не нравится, поскольку Excel показывает цитату в самой ячейке при импорте из CSV (даже если она не отображается, если вы печатаете ту же самую вещь в себе).
Майкл Орил

так вы хотя бы контролируете веб-приложение? как вы собираетесь внедрить решение прозрачно от пользователей? Я обновил свой ответ, чтобы он правильно обрабатывал значения запятыми
Alex P.

Ответы:


10

Это должно работать

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"

Нет, это искажает значение с двумя числами в нем. Мы получаем = "1234567 без закрывающей кавычки.
Работает

1
если вы управляете веб-приложением, вы можете реализовать экспорт в формат SYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . он намного лучше контролирует представление данных. если нет - вы могли бы легко сделать скрипт конвертера
Alex P.

2
обновил ответ, чтобы он правильно обрабатывал значения запятыми
Alex P.

Это обрабатывает значения через запятую правильно. Благодарю.
Майкл Орил

Благодарю. Это решение решило проблему с импортом шестнадцатеричных чисел. Excel заменяет 00E3на 0 (0 * 10 ^ 3) и отображает его в виде нотации (0,00E + 00). Это фактически делает то же самое для "00e3"без =. Но ="00e3"работает отлично. (открытие CSV с Excel 2010)
mpag

12

Чтобы оставить ведущие нули, вы можете установить формат этого конкретного столбца в текст в мастере импорта текста.

  1. Запустите мастер импорта текста , перейдя на вкладку « Данные » и нажав « Из текста» .
  2. Выберите файл CSV, который вы хотите импортировать.
  3. Выберите разделитель и нажмите Далее .
  4. Снимите флажок Tab (по умолчанию). Выберите Запятая . Убедитесь, что Text Qualifier установлен на ". Хит Next .
  5. Здесь вы можете указать форматы . Щелкните заголовок столбца, начальный ноль которого вы хотите сохранить. Выберите текст . (См. Изображение ниже)

    введите описание изображения здесь

  6. Нажмите Finish и затем выберите подходящее место для ваших данных. Пример результата:

    введите описание изображения здесь

Изменить : есть другой способ ; сделать экспорт веб-приложения в файл .TXT с разделителями-запятыми вместо .CSV (или просто изменить расширение экспортируемого файла после его сохранения). Это заставляет Excel пройти через мастер импорта, когда они открывают файл. В качестве дополнительного преимущества это уменьшает вероятность того, что пользователи изменят или вмешаются в исходные необработанные данные.


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

1
Есть и другой способ, но я не знаю, возможно ли это в вашем случае: сделать экспорт веб-приложения .TXTвместо запятой .CSV(или просто изменить расширение экспортируемого файла). Этот тип «заставляет» пользователей проходить через мастер импорта при открытии файла.
Ellesa

Это очень хороший момент. Спасибо что подметил это. Это может быть полезно в будущем.
Майкл Орил

4

Excel обрабатывает числовые значения, начинающиеся с символа табуляции, как текст.

<tabchar>000000100000200000,ABC,DEF

Будет выглядеть как:

000000100000200000|ABC|DEF

| является границей ячейки (для иллюстрации). Так, например, если ваша система генерирует CSV-файл с использованием кодировки utf-8, вы можете добавить &#x0009;(Tab Char in Hex) перед вашим числовым значением, чтобы Excel преобразил его как текст.


Удалите пробел перед точкой с запятой в шестнадцатеричном представлении. Я не знаю, как избежать символа Hex Tab в ответе, поэтому я специально набрал его неправильно.
Madeyedexter

1
Я сбежал. И я узнал что-то новое, спасибо. Я должен добавить это в мою любимую тему для работы :)
nixda

3

Excel автоматически определит формат поля CSV, если столбец CSV не находится в этом формате:

"=""Data Here"""

Это также работает для листов Google


0

Вам нужно использовать функцию «Данные -> Получить внешние данные -> Импортировать текст из файла» в Excel, чтобы отобразить ее в виде текста. Это упомянутый мастер импорта текста @Kaze.

Единственный способ заставить Excel отображать числа в виде текста из ввода без необходимости что-либо делать, - это вывести файл Excel и указать в нем «пользовательский формат чисел». Для этого я рекомендую использовать библиотеку экспорта XLS, поскольку это не так просто, как добавить строку текста конфигурации в файл CSV.


0

попробуйте очистить функцию для значений, которые запутались. Например, = clean ("12345678901234567890"). У меня это работает для чисел, дат, времени и т. Д. Я хотел бы предупредить, что, поскольку цель этой функции вовсе не в том, что она может перестать работать с новыми версиями и т. Д.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.