Зупиніть Excel від автоматичного перетворення певних текстових значень у дати


526

Хтось знає, чи є маркер, який я можу додати до свого csv для певного поля, щоб Excel не намагався перетворити його на дату?

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


120
Так, як, коли у файлу з 10000 іменами користувачів є таке, як "april25", яке перетворюється на дату і в кінцевому підсумку обробляється як "apr-25", що призводить до помилки "ім'я користувача не знайдено", тому що ви не очікуємо, що Excel перетворить одне значення на дату, 4000 записів у файл, залишаючи текст решти. Який кульгавий код для читання CSV; насправді, чи не слід гадати про тип, заснований на перших записах X, і дотримуватися його? Або залиште весь текст. Якщо я хочу, щоб він був відформатований як "загальний", я можу вибрати його пізніше. Припускаючи "загальне" з самого початку, він ризикує зіпсувати текстові дані.
Трайнко

У мене виникла проблема під час копіювання та вставки. Для всього пошуку рішення виберіть цільовий стовпець, встановіть його у формат рядка / тексту, потім скопіюйте джерело та зробіть спеціальну пасту (клацніть правою кнопкою миші) лише зі значеннями. Зберігає значення, без форматування дати.
Кай Ноак

84
Я просто хочу додати, що я вважаю таку поведінку Excel серйозною вадою. Що з усіма людьми, які не мають розкоші змінювати вміст файлу csv перед імпортом у Excel? А що з людьми, які не усвідомлюють цю проблему, поки не внесли багато інших змін у файл CSV? Робота з файлами CSV в Excel робить безлад.
розбійність

Ви використовуєте DatatableJS? Тому що я вже знаю, як це зробити за допомогою цього API. Якщо вам це потрібно ви можете його знайшли тут: stackoverflow.com/a/36142043/4241058
Річард Rebeco

11
Усі ці рішення використовувати Файл -> Відкрити -> Імпортувати нам добре, тому що ми знаємо, що робимо, але це марно для інших 99,5% країн світу, які не розуміють навігацію по файловій системі з / в / в застосування. Вони бачать файл, щоб використовувати його, вони двічі клацають по ньому. Я провів 25 років, навчаючи людей, як користуватися офісними програмами та писати код, який генерує дані для зазначених офісних додатків, а використовувати / додаток / шукати файл, який слід використовувати, майже не всі.
користувач2624417

Відповіді:


355

Я виявив, що ставлення знака "=" перед подвійними лапками виконає те, що ви хочете. Це змушує дані бути текстовими.

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

EDIT (за іншими повідомленнями) : через помилку в Excel 2007, яку зазначив Джеффікінс, слід використовувати рішення, запропоноване Ендрю :"=""2008-10-03"""


12
Я приймаю цю відповідь, тому що 1) мій файл csv буде використовуватися лише Excel, і 2) це для обліку і не може мати "на початку", і 3) я не хочу, щоб вони це робили імпорт. Я просто хочу, щоб вони відкрили csv.

5
Чудово! Але через 2007 помилки Excel використовувати рішення , запропоноване Ендрю : "=""2008-10-03""". Оновлено публікацію.
TMS

1
Це не працює для мене в Excel 2010, якщо текст занадто довгий :(
steve

7
Причина цього працює в тому, що коли Excel бачить символ "=", він вирішує оцінити вираз, що слідує за ним. У цьому випадку вираз є просто рядковим літералом, а значення рядкового літералу є вмістом рядка. Таким чином лапки магічно зникають. Ви можете поставити = 1 + 2 + 3 і отримати значення 6 після імпорту CSV. Сама формула не знищується в процесі імпорту.
lokori

4
У цьому підході є велика проблема - якщо ви відкриєте файл у програмі excel та відредагуєте, а потім збережіть і відкрийте знову всі ці "зникнуть
ACV

150

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

Проблема полягає не лише в датах у текстових полях, але й будь-що числове число перетворюється з тексту в цифри. Кілька прикладів, коли це проблематично:

  • Поштові індекси
  • номери телефонів
  • державні ідентифікаційні номери

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

Два випадки , які я можу думати про те, що рішення «випереджаючи =», як уже згадувалося раніше, не може бути ідеальним є

  • де файл може бути імпортований у програму, відмінну від 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, але я не маю цього досвіду.

Тож існують різні варіанти. Залежно від ваших вимог / заявки, це може бути краще, ніж інше.


Доповнення

Потрібно сказати, що новіші версії MS Excel (2013+) більше не відкривають CSV у форматі електронних таблиць - ще одна швидкість руху в робочому процесі, що робить Excel менш корисним ... Принаймні, існують інструкції щодо їх подолання. Дивіться, наприклад, цей Stackoverflow: Як правильно відображати .csv файли в Excel 2013? .


6
Я отримав правильні нульові нулі після того, як додав \tдо свого характеру розлуки ;... чорт забираєш, MS Office, чому для цього мені знадобилося більше двох хвилин?
Мортен Йенсен

2
Додавання \ t в кінці всіх значень дійсно є трюком. Це хитке вирішення, але на практиці це прекрасно працює. Я віддаю перевагу цьому формулі фокусу з рівним '=', тому що з першим може бути важко працювати в інших інструментах.
окрокет

3
Не вистачає подій, які можуть висловити мою вдячність за вас. Шукати та замінювати в блокноті ++ ',' to '\ t, \ t' (щоб вмістити і перший, і останній стовпці) працює як шарм. Дякую.
Асаф

1
У моєму запиті MySQL (для виведення CSV через PHP) я використав CONCAT ('\ t', column_name). Також зробив трюк. Дякую!
Just Plain High

1
Чудова ідея. На жаль, Numbers трохи "розумніший", ніж Excel, і не підпадає під фокус на вкладці. Найкраща альтернатива, яку я можу придумати, - це провідна ', оскільки це ніби добре зрозуміло і не надто відволікає ... але невидимим було б краще.
Хіт Рафті,

101

Опрацьовуючи рішення Ярода та питання, яке висунув Джеффікінс, ви можете змінити

"May 16, 2011"

до

"=""May 16, 2011"""

6
Не працює в Excel 2010, якщо текст довший певної довжини.
Стів

1
@Andrew, це "виправлення" спричинить проблеми, якщо вам потрібно мати "значення в будь-якому місці між датою.
Печер'є

8
FYI, якщо ви збережете файл Excel, файл = минає, і ви повернетесь до квадрата під час наступного відкриття.
d512

Мій досвід не відповідає ні steve, ні d512. Він працює для мене у вхідному .csv в Excel 2013, і після збереження у форматі .xlsx він не повертається. Досить просто, щоб кожен міг тестувати, використовуючи цей рядок даних: "806676", "Жоден", "41", "=" "16 травня 2011 р." "", "100.00", "Неправдивий"
tbc0

1
@ tbc0 Намагайтеся "806676","None","41","=""05-16-2011""","100.00","False"замість цього, і ви побачите збереження та перезавантаження втрачає текст з дефісом.
NetMage

65

У мене була подібна проблема, і це рішення, яке допомогло мені без редагування вмісту файлу CSV:

Якщо у вас є можливість назвати файл чимось іншим, ніж ".csv", ви можете назвати його розширенням ".txt", наприклад "Myfile.txt" або "Myfile.csv.txt". Потім, коли ви відкриєте його в Excel (не за допомогою перетягування, а за допомогою File-> Open або списку найпопулярніших файлів), Excel надасть вам "Майстер імпорту тексту".

На першій сторінці майстра виберіть "Розмежоване" для типу файлу.

На другій сторінці майстра виберіть "," як роздільник, а також виберіть текстовий класифікатор, якщо ви оточили свої значення лапками

На третій сторінці виберіть кожний стовпець окремо та призначте кожному тип «Текст» замість «Загальне», щоб запобігти возитися Excel з вашими даними.

Сподіваюся, це допоможе вам або комусь із подібною проблемою!


2
О, до речі, я не перший виявив це. зростанняline.com/use-excel-read-csv-without-reformatting.php На цій веб-сторінці також є корисна інструкція про те, що ви можете переключити клацання стовпців на третій сторінці майстра, щоб вибрати їх усі разом перед призначенням кожного типу "Текст".
дощовик

Це може працювати для значень дати, але, здається, це не працює, якщо речі відмінно інтерпретуються як числові. Якщо у вашому рядку є всі цифри і коми, формат "Текст" буде форматом наукових чисел.
Майкл - Де Clay Shirky

3
це прекрасно працювало для мене і не передбачало жодних змін у моєму файлі, крім того, щоб перейменувати його як .txt. Дякую тобі.
Кевін

1
На жаль, Excel дозволяє робити це лише протягом перших 6 стовпців. Якщо вам потрібно більше, кращий підхід - скопіювати вміст csv, створити та порожній файл excel, вибрати всі стовпці / рядки та встановити тип Text, а потім вставити вміст та використовувати Data | Текст до стовпців
nachocab

Це найкраще рішення, і його слід позначити як відповідь.
Роб

28

ПОПЕРЕДЖЕННЯ. У Excel '07 (принаймні) є помилка (nother): якщо в вмісті поля є кома, вона не розбирає правильно = "поле, вміст", а замість того, що все після коми ставиться у наступне поле, незалежно від лапок.

Єдине вирішення, яке я знайшов, що працює - це усунути =, коли вміст поля включає кому.

Це може означати, що є декілька полів, які неможливо точно представити "правильно" в Excel, але на даний момент я вірю, що ніхто не надто здивований.


Я просто перевірив це в excel 2007, і він працює правильно для мене. Однак якщо перед цитатами є провідний пробіл, він не розбирає кома правильно.
Sunny88

8
Згідно з RFC 4180, це, здається, не є помилкою. Правильним способом цитування поля є цитування всього поля, а потім подвійне цитування внутрішніх лапок. Так "=" "поле, вміст" "" tools.ietf.org/html/rfc4180
Пітер Стівенс

2
@PeterStephens, це не працює, якщо field, contentє "в ньому. Напр."=""field, co""ntent"""
Pacerier

1
@Pacerier Можливо, вбудована цитата повинна бути подвійною цитатою, перетворюючись на """".
ЕрікЕ

Я можу підтвердити, що пропозиція @ ErikE правильна. Для поля зі значенням 1"2, якщо ви вирішили використовувати цей трюк (на відміну від того, щоб просто залишити його так, як "1""2"у файлі - excel вже вважав би це текстом), остаточний правильний рядок у файлі CSV, орієнтований на Excel, закінчується буття "=""1""""2""".
Дао

22

Під час створення рядка, який потрібно записати у мій файл CSV у C #, я повинен був відформатувати його таким чином:

"=\"" + myVariable + "\""

2
це прокинулося і для мене в Рейки. Дякую
Vieenay Siingh

3
Так само працює на Java
Шойо

Працював для мене в JavaScript за допомогою Papa Parse.
wobsoriano

17

2018 рік

Єдине правильне рішення, яке працювало для мене (і також без зміни CSV ).

Excel 2010:

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

Excel office365: (версія клієнта)

  1. Створіть нову робочу книжку
  2. Дані> З тексту / CSV> Виберіть файл CSV
  3. Виявлення типу даних> не виявляють

Примітка: Excel office365 (веб-версія), коли я це пишу, ви цього не зможете зробити.


3
Це працює без попереднього зміни файлів CSV, тому я думаю, що це має бути правильна відповідь.
Джек

Це виглядає як правильна відповідь. Я покладав великі надії. Але в MacOS (office365) я не можу вибрати ВСІ стовпці: у вікні попереднього перегляду, показаному у майстрі імпорту тексту, немає горизонтальної прокрутки, так що я можу вибрати лише видимі стовпці. Я спробував скоротити скорочення (CMD + A чи інші речі), безрезультатно. Опція "не виявити" також не існує. Я спустошений.
Норманій

Excel office 365, виберіть Файл, Параметри, Дані. Існують прапорці, щоб показати необхідні майстри імпорту даних, якщо потрібно.
Курт Шульц

15

У Excel 2010 відкрийте новий аркуш. На стрічці даних натисніть «Отримати зовнішні дані з тексту». Виберіть файл CSV та натисніть «Відкрити». Натисніть «Далі». Зніміть прапорець "Вкладка", поставте галочку біля пункту "Кома" і натисніть "Далі". Клацніть в будь-якому місці першого стовпця. Утримуючи клавішу Shift, перетягуйте повзунок поперек, доки ви не зможете натиснути в останньому стовпці, а потім відпустіть клавішу shift. Клацніть перемикач "Текст", потім натисніть "Готово"

Усі стовпці будуть імпортовані у вигляді тексту, так само, як вони були у файлі CSV.


1
Я зіткнувся з тією ж проблемою, але уважно слідувати вказівкам @ Роба було б ідеально! Дякую
Мілакай

2
Асистент Data From Text, на жаль, не підтримує багаторядкові комірки. Якщо зустрічається такий багаторядковий текст, він запише всі рядки після першого в нові рядки, порушуючи весь імпорт. Він правильно інтерпретує розриви рядків, лише якщо ви відкриєте файл CSV подвійним клацанням. Чорт
забирає

1
На жаль, це не вирішує питання довільної форматування Excel "довідка" - текст DEC1 досі змінюється на дату Dec-01. Те саме, що текст YYYY-MM-DD перемикається на DD / MM / YYYY. :(
Баракус

12

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

  1. Відкрийте файл CSV у вигляді тексту (блокнот)
  2. Скопіюйте його (ctrl + a, ctrl + c).
  3. Вставте його в новий аркуш excel - він буде вставлений в один стовпець у вигляді довгих текстових рядків.
  4. Виберіть / виберіть цей стовпець.
  5. Перейдіть до Дані - "Текст до стовпців ...", у відкритому вікні виберіть "Розмежувати" (далі). Переконайтеся, що "кома" позначена (якщо позначити її вже буде показано розділення даних на стовпці нижче) (далі), у цьому вікні ви можете вибрати потрібний стовпець і позначити його як текст (замість загального) (Готово).

HTH


Ручні зусилля також були для мене непривабливими. Однак, вичерпавши всі можливі можливості, ця була найбільш надійною та надійною.
Ана Марія Мендес-Перейра

Тим не менш, пакетна обробка.
Ана Марія Мендес-Перейра

Тут насправді найкраща відповідь, яка вимагає найменшої роботи. Я хочу, щоб ви могли просто встановити якусь опцію, щоб змусити її не розбирати файл.
рулони

Ви також можете замінити всі коми на вкладки, тоді це буде автоматично розмежовано
згортається

10

Ось простий метод, який ми використовуємо тут на роботі, коли в першу чергу генерує файл CSV, він дещо змінює значення, тому він не підходить у всіх програмах:

Додайте пробіл до всіх значень у csv

Цей простір буде позбавлений excel з номерів, таких як "1", "2.3" і "-2.9e4", але залишиться на дати, наприклад "01/10/1993", і булеві на зразок "TRUE", зупиняючи їх перетворення в внутрішні типи даних excel.

Він також зупиняє, щоб подвійні лапки зачинялися при прочитанні, тому нерозумний спосіб введення тексту в csv залишається незмінним excel ВИКЛИЧНО ЯКЩО деякий текст на кшталт "3.1415" - це оточити його подвійними лапками і скласти весь рядок пробілом, тобто (використовуючи одинарні лапки, щоб показати, що б ви ввели) '"3.1415"'. Тоді у excel у вас завжди є оригінальний рядок, за винятком того, що він оточений подвійними лапками і має місце пробіл, тому вам потрібно враховувати ті, які є у будь-яких формулах тощо.


Це працювало для мене. У мене були такі значення, як 1-1-1, які автоматично перетворюються на дати. Як вже згадувалося, простір буде передаватися, тому значення буде змінено, але я роблю смужку на ньому при розборі, так що для мене це не велика справа.
jacklin

Пробіл більше не працює, щоб запобігти інтерпретації дат або позбавленню провідних нулів. Але "\xA0"замість цього ви можете використовувати пробіл, який не порушується - це спрацює.
Doin

8

(Припускаючи Excel 2003 ...)

Використовуючи майстер "Текст до стовпців", на кроці 3 ви можете продиктувати тип даних для кожного зі стовпців. Клацніть на стовпці в попередньому перегляді та змініть стовпчик, що не поводиться, із "Загальне" на "Текст".


8
Це відмінний вибір, якщо я можу змусити користувача використовувати процес імпорту.

Це насправді не допомагає проблемі, оскільки цифри у колонці ТЕКСТ будуть перетворені на НОМЕРИ при експорті до .csv у будь-якому випадку ...
Chonez

8

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

Змініть розширення файлу .csv на .txt; це зупинить Excel від автоматичного перетворення файлу при його відкритті. Ось як я це роблю: відкрийте Excel на чистому робочому аркуші, закрийте порожній аркуш, а потім Файл => Відкрити та виберіть файл із розширенням .txt. Це змушує Excel відкрити "Майстер імпорту тексту", де він задасть вам питання про те, як ви хочете інтерпретувати файл. Спочатку вибираєте свій роздільник (кома, вкладка тощо), потім (тут важлива частина) вибираєте набір стовпців стовпців і вибираєте форматування. Якщо ви хочете саме те, що є у файлі, виберіть "Текст", а Excel відобразить лише те, що знаходиться між роздільниками.


Для мене це добре працювало в 2015-03-03, працюючи з Excel для Mac 2011 (версія 14.4.8 150116), працюючи з даними в питанні SO awk- уникайте переформатування значень , схожих на дату , де проблема швидше з Excel ніж awk, незважаючи на назву питання.
Джонатан Леффлер

4

(EXCEL 2007 та новіших версій)

Як змусити excel не "виявляти" формати дат без редагування вихідного файлу

Або:

  • перейменуйте файл як .txt
  • Якщо ви не можете цього зробити, замість того, щоб відкривати файл CSV безпосередньо в excel, створіть нову робочу книгу, після чого перейдіть до
    Data > Get external data > From Text
    та виберіть свій CSV.

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


4

Що я зробив для цієї самої проблеми, це додати наступне перед кожним значенням csv: "=" "" та одну подвійну лапочку після кожного значення CSV, перед відкриттям файлу в Excel. Візьмемо, наприклад, такі значення:

012345,00198475

Вони повинні бути змінені перед відкриттям в Excel для:

"="""012345","="""00198475"

Після цього кожне значення комірки відображається як формула в Excel і тому не буде форматоване як число, дата тощо. Наприклад, значення 012345 відображається як:

="012345"

Інший підхід - це збереження числа в csv як 1234500198475E-8; таким чином, подальші розрахунки в excel все ще будуть можливі.
bert bruynooghe

4

Жодне із запропонованих тут рішень не є хорошим рішенням. Це може працювати в окремих випадках, але тільки якщо ви контролюєте остаточний показ. Візьміть мій приклад: моя робота створює перелік товарів, які вони продають в роздріб. Це у форматі CSV і містить часткові коди, деякі з них починаються з нуля, встановлені виробниками (не під нашим контролем). Відірвіть провідні нулі, і ви можете фактично відповідати іншому продукту. Роздрібні клієнти хочуть, щоб цей список був у форматі CSV через те, що резервні програми обробки, які також поза нашим контролем і різні на кожного клієнта, тому ми не можемо змінити формат файлів CSV. Ніяких префіксів '=', ні доданих вкладок. Дані в необроблених файлах CSV є правильними; коли клієнти відкривають ці файли в Excel, проблеми починаються. І багато клієнтів насправді не знають на комп’ютері. Вони можуть просто відкрити та зберегти вкладення електронної пошти. Ми думаємо надавати дані у двох дещо різних форматах: один як Excel Friendly (використовуючи запропоновані вище варіанти, додавши TAB, а інший як "головний". Але це може бути бажане задуматися, оскільки деякі клієнти не зрозуміють, чому нам потрібно це зробити. Тим часом ми продовжуємо пояснювати, чому вони іноді бачать "неправильні" дані у своїх електронних таблицях. Поки Microsoft не внесе належних змін, я не бачу відповідного вирішення цього питання, доки хто не має контролю над тим, як кінцеві користувачі використовувати файли. Але це може бути бажаним продумати, оскільки деякі клієнти не зрозуміють, для чого нам це потрібно робити. Тим часом ми продовжуємо пояснювати, чому вони іноді бачать "неправильні" дані у своїх електронних таблицях. Поки Microsoft не внесе належних змін, я не бачу відповідного вирішення цього питання, доки хто не має контролю над тим, як кінцеві користувачі використовують файли. Але це може бути бажаним продумати, оскільки деякі клієнти не зрозуміють, для чого нам це потрібно робити. Тим часом ми продовжуємо пояснювати, чому вони іноді бачать "неправильні" дані у своїх електронних таблицях. Поки Microsoft не внесе належних змін, я не бачу відповідного вирішення цього питання, доки хто не має контролю над тим, як кінцеві користувачі використовують файли.


Якщо додатковий простір зліва від ваших даних не має значення, ви можете виправити проблеми Excel, попередньо додавши "\xA0"до своїх даних (без пробілу).
Doin

3

У мене на цьому тижні jus натрапив на цю конвенцію, яка, здається, є відмінним підходом, але я не можу знайти ніде посилання. Хтось із ним знайомий? Чи можете ви навести джерело для цього? Я не дивився години і години, але сподіваюся, що хтось визнає такий підхід.

Приклад 1: = ("012345678905") відображається як 012345678905

Приклад 2: = ("1954-12-12") відображається як 1954-12-12 , а не 12/12/1954 .


2

Це не Excel. Windows визнає формулу, дані як дату та автокорекцію. Ви повинні змінити налаштування Windows.

"Панель управління" (-> "Перехід до класичного перегляду") -> "Регіональні та мовні параметри" -> вкладка "Регіональні параметри" -> "Налаштувати ..." -> вкладка "Числа" -> А потім змінити символи відповідно до того, що ти хочеш.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Він буде працювати на вашому комп’ютері, якщо ці параметри не змінено, наприклад на комп'ютері ваших клієнтів, вони побачать дати замість даних.


2

Привіт, у мене те саме питання,

Я пишу цей vbscipt, щоб створити ще один файл CSV. У новому файлі CSV буде розміщено пробіл у шрифті кожного поля, тому excel зрозуміє його як текст.

Отже, ви створюєте .vbs-файл із кодом нижче (наприклад, Modify_CSV.vbs), зберігаєте та закриваєте його. Перетягніть оригінальний файл у свій файл vbscript. Він створить новий файл із написом "SPACE_ADDED" для імені файлу в тому самому місці.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

Без зміни файлу csv ви можете:

  1. Змініть опцію Формат комірок Excel на "текст"
  2. Потім за допомогою "Майстра імпорту тексту" визначте клітинки csv.
  3. Після імпортування видаліть ці дані
  4. то просто вставити як звичайний текст

excel належним чином відформатує та відокремить ваші клітинки csv у форматі тексту, ігноруючи автоматичні формати дати.

Начебто нерозумна робота, але вона змінює зміни даних CSV перед імпортом. Енді Бейрд та Річард начебто ухилялися від цього методу, але пропустили пару важливих кроків.


1

Я знаю, що це стара нитка. Для таких, як я, у кого все ще виникає ця проблема, використовуючи Office 2013 за допомогою об'єкта powershell com, можна використовувати метод opentext . Проблема полягає в тому, що цей метод має багато аргументів, які іноді взаємно виключають. Щоб вирішити цю проблему, ви можете скористатися методом викликупараметри, введеним у цій публікації . Прикладом може бути

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

На жаль, я щойно виявив, що цей спосіб якимось чином порушує аналіз CSV, коли клітини містять рядкові перерви. Це підтримується у форматі csv, але, здається, впровадження мікрозйомки є помилковим. Крім того, він якось не виявив німецьких специфічних символів. Надання правильної культури не змінило цього поведінки. Усі файли (csv та скрипт) зберігаються за допомогою кодування utf8. Спочатку я написав наступний код, щоб вставити клітинку csv за коміркою.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Але це надзвичайно повільно, саме тому я шукав альтернативу. Exarently Excel дозволяє встановлювати значення діапазону комірок за допомогою матриці. Тож я використав алгоритм у цьому блозі для перетворення CSV у багатоярусний масив.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Ви можете використовувати вищевказаний код, оскільки він повинен перетворити будь-який csvs в excel. Просто змініть шлях до csv та символу розмежувача внизу.


занадто складний
котиться

1

У моєму випадку "Sept8" у файлі csv, згенерованому за допомогою R, було перетворено у Excel 2013. "8-Sept". Проблема була вирішена за допомогою функції write.xlsx2 () у пакеті xlsx для генерації вихідного файлу у форматі xlsx , яку Excel може завантажувати без небажаного перетворення. Отже, якщо вам надано файл csv, ви можете спробувати завантажити його в R і перетворити його в xlsx за допомогою функції write.xlsx2 ().


Я не знаю, чому ваша відповідь спростована. Це корисно людям, принаймні, які використовують Р. Ця відповідь мені допомогла. Дякую :)
sriharsha KB

1

Вирішення проблеми за допомогою Диска Google (або Чисел, якщо ви працюєте на Mac):

  1. Відкрийте дані в Excel
  2. Встановіть формат стовпця з невірними даними на Текст (Формат> Осередки> Число> Текст)
  3. Завантажте .csv на Диск Google і відкрийте його за допомогою Google Таблиць
  4. Скопіюйте стовпчик-образник
  5. Вставте стовпчик у Excel як текст (редагування> спеціальна вставка> текст)

Якщо ви перебуваєте на Mac для кроку 3, ви можете відкрити дані в Numbers.


Це розумне рішення, а не робота над ним годинами без будь-якої резолюції.
imsrgadich

1

(EXCEL 2016 та пізніших версій, насправді я не пробував у старих версіях)

  1. Відкрити нову порожню сторінку
  2. Перейдіть на вкладку "Дані"
  3. Клацніть «З тексту / CSV» та виберіть файл csv
  4. Перевірте в попередньому перегляді правильність ваших даних.
  5. У випадку, коли якийсь стовпець перетворений на дату, натисніть «редагувати», а потім виберіть «Текст», натиснувши на календар у верхній частині стовпця
  6. Натисніть "Закрити та завантажити"

0

Гаразд знайшов простий спосіб зробити це в Excel 2003 по 2007 рік. Відкрийте порожню робочу книгу xls. Потім перейдіть до меню Дані, імпортуйте зовнішні дані. Виберіть свій файл csv. Перейдіть через майстра, а потім у "форматі даних стовпців" виберіть будь-який стовпець, який потрібно змусити "текст". Це імпортуватиме весь цей стовпець у текстовому форматі, що запобігає спробі Excel розглянути будь-які конкретні комірки як дату.


0

Ця проблема все ще присутня в Mac Office 2011 та Office 2013, я не можу запобігти її виникненню. Здається, така основна річ.

У моєму випадку у мене були такі значення, як "1 - 2" та "7 - 12" в CSV, правильно вкладені в перевернуті коми, це автоматично перетворюється на дату в excel, якщо ви спробуєте згодом перетворити її в просто звичайний текст, який ви отримаєте представлення числа такої дати, як 43768. Крім того, воно переформатує велику кількість, знайдене в штрих-кодах та номерах EAN, на 123E + номери, які неможливо повернути назад.

Я виявив, що Google Sheets на Google Диску не перетворюють номери в дати. У штрих-кодах є коми через кожні 3 символи, але вони легко видаляються. Він дуже добре обробляє CSV, особливо якщо це стосується CSV-дисків MAC / Windows.

Може когось врятувати.


0

НАЙПОЛОЖНЕ РІШЕННЯ Я сьогодні це лише зрозумів.

  • Відкрити в Word
  • Замініть усі дефіси на тире
  • Зберегти та закрити
  • Відкрити в Excel

Після того, як ви закінчите редагування, ви завжди можете знову відкрити його в Word, щоб знову замінити тире дефісами.


0

Я роблю це для номерів кредитних карток, які постійно переходять на наукові позначення: я в кінці імпортую свій .csv в Google Таблиці. Параметри імпорту тепер дозволяють відключити автоматичне форматування числових значень. Я встановлюю будь-які чутливі стовпці на звичайний текст і завантажую як xlsx.

Це жахливий робочий процес, але принаймні мої цінності залишаються такими, якими вони повинні бути.


Якщо ви спромоглися прочитати деякі інші відповіді, ви побачите , що хтось - то вже запропонував це тут .
Лорел

Я набрид, дякую. Я натякаю, що вибір автоматичного форматування є новою частиною процесу імпорту. Моя відповідь забезпечує дуже специфічний робочий процес для тих, хто, як і я, був змушений використовувати Листи для вирішення цієї конкретної проблеми. На мій погляд, це заслуговувало окремої відповіді. Незначне коригування тону може насправді призвести до того, що ваш коментар буде інтерпретований як корисний, що полягає в цілому в цій сім'ї веб-сайтів.
Brendonwbrown

Але ви можете просто використовувати імпорт тексту в Excel, щоб імпортувати файл CSV, а не перейматися таблицями, як зазначено в інших відповідях.
NetMage

0

Я зробив цей макрос vba, який в основному форматує вихідний діапазон як текст перед вставкою чисел. Для мене ідеально підходить, коли я хочу вставити такі значення, як 8/11, 23/6, 1/3 тощо, без Excel, інтерпретуючи їх як дати.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Мені дуже цікаво дізнатися, чи працює це і для інших людей. Я деякий час шукав рішення цієї проблеми, але не бачив швидкого рішення VBA до цього, яке не включало б вставлення "перед вхідним текстом. Цей код зберігає дані у початковому вигляді.


-1

Якщо ви покладете перевернуту кому на початку поля, вона буде інтерпретуватися як текст.

Приклад: 25/12/2008стає'25/12/2008

Ви також можете вибрати тип поля під час імпорту.


9
Я не хочу "на початку своїх даних".

27
-1. "Працює лише тоді, коли вводиться безпосередньо у програмі excel, але це не працює у CSV - у вас буде додатковий символ у комірці excel після імпорту.
TMS

-1

Альтернативний метод:

Перетворіть формат стовпця, який ви хочете змінити, у "Текст". Виберіть усі комірки, які ви хочете зберегти, скопіюйте. Не знімаючи вибір цих стовпців, натисніть «Редагувати> Спеціальна вставка> Як значення»

Зберегти як CSV. Зауважте, що це має бути останнє, що ви робите з файлом, оскільки при повторному відкритті він форматуватиме себе як дати, оскільки формати комірок не можуть бути збережені у файлах CSV.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.