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.