В 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.