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 02/21/2013 00:00 Помилкові 0316295 +8316012,8315844 MALE (якщо ви можете прочитати , що ...?)
Обмовка за Фрейдом

Це питання схоже і пропонує хороші рішення: superuser.com/questions/234997/…
Brad Patton

@FreudianSlip Ні, ми не можемо використовувати якесь сторонне рішення. Користувачі натискають на кнопку "завантажити CSV" і файл відкривається в Excel. Це середовище, з яким ми маємо справу. Неможливо насправді ускладнити.
Майкл Оріль

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

тож ви принаймні контролюєте веб-додаток? як ви збираєтесь реалізувати рішення прозоро від користувачів? Я оновив свою відповідь, щоб вона правильно обробляла значення комами
Алекс П.

Відповіді:


10

Це має спрацювати

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

Ні, це змінює значення з двома числами в ньому. Ми отримуємо = "1234567 без завершальної цитати. Хоча це працює на більш прості номери.
Michael Oryl

1
якщо ви керуєте веб-додатком, ви можете здійснити експорт у формат SYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . він набагато краще контролює представлення даних. якщо ні - ви можете легко зробити сценарій перетворення
Алекс П.

2
оновив відповідь, щоб вона правильно обробляла значення комами
Алекс П.

Це правильно обробляло значення, розділені комами. Дякую.
Майкл Оріл

Дякую. Це рішення вирішило також проблему з імпортом шістнадцяткових чисел. Excel замінює 00E30 (0 * 10 ^ 3) і відображає його як наукову нотацію (0,00E + 00). Це насправді робить те ж саме, що і "00e3"без =. Але ="00e3"працює чудово. (відкриття CSV з Excel 2010)
mpag

12

Щоб зберегти провідні нулі, ви можете встановити формат цього конкретного стовпця "Текст" у майстрі імпорту тексту.

  1. Запустіть майстра імпорту тексту , перейшовши на вкладку " Дані" та натиснувши " Текст" .
  2. Виберіть файл CSV, який потрібно імпортувати.
  3. Виберіть Розмежування та натисніть Далі .
  4. Зніміть прапорець біля вкладки (за замовчуванням). Виберіть Кома . Переконайтесь, що для тексту Qualifier встановлено значення ". Натисніть Далі .
  5. Тут ви можете вказати формати . Клацніть на заголовку стовпця, провідний нуль якого потрібно зберегти. Виберіть Текст . (Дивіться зображення нижче)

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

  6. Натисніть кнопку Готово та виберіть відповідне місце для своїх даних. Зразок результату:

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

Правка : Є інший спосіб ; експорт веб-додатків до файлу .TXT, обмежений комами, а не .CSV (або просто змінити розширення експортованого файлу після його збереження). Це змушує Excel пройти майстра імпорту, коли вони відкриють файл. В якості додаткової переваги це зменшує ймовірність того, що користувачі модифікують або підробляють оригінальні вихідні дані.


1
Так, це, безумовно, так. Кінцевому користувачеві це не дуже зручно, коли, для порівняння, все, що їм потрібно зробити, це натиснути на посилання генератора CSV у нашому веб-додатку, і Excel завантажує його автоматично - хоча і з вищезазначеними проблемами. Файли CSV встановлюються відкритими в Excel, і Excel не пропонує жодних варіантів на той час. Це просто завантажує їх. Я вдячний, що ти вказуєш на це.
Майкл Оріл

1
Існує ще один спосіб, але я не знаю , якщо це можливо в вашому випадку: є експорт веб - додаток для розділених комою .TXTзамість .CSV(або просто змінити розширення файлу експортованого файлу). Цей тип "змушує" користувачів пройти майстра імпорту, коли вони відкриють файл.
Еллеса

Це дуже вдалий момент. Дякуємо, що вказали на це. Це може бути корисним у майбутньому.
Майкл Оріл

4

Excel розглядає числові значення, починаючи з символу табуляції, як текст.

<tabchar>000000100000200000,ABC,DEF

З'явиться як:

000000100000200000|ABC|DEF

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


Видаліть пробіл перед напівкрапкою у шестигранному поданні. Я не знаю, як уникнути символу Hex Tab у відповіді, тому я навмисно ввів її неправильно.
Мадейдекстер

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.