Excel CSV - Формат комірки номера


86

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

Наприклад, якщо файл CSV містить

...,005,...

Тоді Excel показує це як 5. Чи є спосіб замінити це і відобразити 005?

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

Я використовую Excel 2003.


Див. Це запитання щодо макросурішення цієї проблеми.
Адам Дженсен,

На сьогоднішній день існує багато бібліотек для написання Excel. Створювати файли .xlsx мовою на ваш вибір має бути досить просто. Якщо ваші користувачі все ще використовують Excel 2003 з якихось причин (поширених, коли це питання спочатку задавали, але, сподіваємось, сьогодні це не дуже ймовірно), є також кілька варіантів, що створюють .xls. Для людей, які сьогодні натрапляють на це питання, дуже ймовірно, що вам не доведеться самостійно скачувати.
John Y,

Відповіді:


129

Існує не простий спосіб керувати форматуванням, яке застосовується Excel під час відкриття файлу .csv. Однак нижче перелічено три підходи, які можуть допомогти.

Моя перевага - це перший варіант.

Варіант 1 - Змініть дані у файлі

Ви можете змінити дані у файлі .csv наступним чином ..., = ”005” , ... Це буде відображатися в Excel як ..., 005 , ...

Excel зберігав дані як формулу, але копіювання стовпця та використання спеціальних значень вставки дозволить позбутися формули, але збереже форматування

Варіант 2 - форматування даних

Якщо це просто проблема формату, і всі ваші дані в цьому стовпці мають тризначну довжину. Потім відкрийте дані в Excel, а потім відформатуйте стовпець, що містить дані, у цьому спеціальному форматі 000

Варіант 3 - Змініть розширення файлу на .dif (формат обміну даними)

Змініть розширення файлу та використовуйте майстер імпорту файлів для управління форматами. Файли з розширенням .dif автоматично відкриваються Excel при подвійному клацанні.

Крок за кроком:

  • Змініть розширення файлу з .csv на .dif
  • Двічі клацніть файл, щоб відкрити його в Excel.
  • Буде запущено «Майстер імпорту файлів».
  • Встановіть для «Тип файлу» значення «Розділено» та натисніть кнопку «Далі».
  • У розділі Розділювачі поставте галочку «Кома» та натисніть кнопку «Далі».
  • Клацніть на кожен стовпець ваших даних, що відображається, і виберіть "Формат даних стовпця". Стовпець зі значенням '005' має бути відформатований як 'Текст'.
  • Клацніть на кнопку закінчити, файл буде відкритий Excel із зазначеними форматами.

8
.dif не працював на моїй машині; відкриття вручну з Excel 2007 не спрацювало (попередило мене, що тип файлу відрізняється від розширення), і схоже, що .DIF на багатьох комп’ютерах пов’язаний із Quicktime. Просто FYI :) В іншому випадку, чудові поради!
Микола

15
Я думаю, варіант 1 є найкращим, якщо ви хочете безпроблемний спосіб створення файлу, який "просто працює" - тобто він відкривається на комп'ютері користувача в Excel, не вимагаючи від них жодної додаткової роботи.
Кіп

У мене така сама проблема, і жодне з перерахованих вище не є належним вибаченням. Думаючи, що я можу експортувати як XML і використовувати XSLT для переходу до CSV. Мені потрібен файл CSV , щоб бути правильним , так що він може бути імпортований в інший додаток
Matt

1
Зверніть увагу, що варіант 1 не завжди хороший, якщо у вас є клітинка, де написано "1E02, будь-який текст", а потім ви ставите рівне попереду, тоді Excel уявить, що ви ввели формулу. По-перше, формула буде неправильною, а по-друге, і найголовніше вона розділить ваш текст на 2 клітинки.
ghiscoding

1
Дякуємо за варіант 1. Виправлено мою проблему наукових позначень без зайвої роботи.
NaN

28

Не використовуйте CSV, використовуйте SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

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


2
+1 Запис у SYLK простий у реалізації, я зробив це як новачок.
Matt H

1
Я не знав про цей формат. Це схоже на те, що я міг би використати. +1 за це!
Buggabill

+1 Мені знадобилося п’ять хвилин, щоб перейти з CSV на SYLK. Відтепер мій вихідний формат goto!
TheFish

@xamde, ти маєш рацію. Дивно, що вони ніколи не розширювали формат, щоб підтримувати його, як це робили з RTF.
Марк Ренсом

WTF, або що б хтось рекомендував, я цитую з Вікіпедії: "Microsoft не публікує специфікацію SYLK."
сорін

14

Це працює для Microsoft Office 2010, версія Excel 14

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

  1. Відкрийте порожній (новий) файл (Файл -> Новий із книги)
  2. Відкрийте майстер імпорту (Дані -> З тексту)
  3. Виберіть файл .csv та імпортуйте
  4. У діалоговому вікні виберіть "Розділено" та натисніть Далі.
  5. Виберіть свої роздільники (зніміть прапорець біля всього, крім "коми"), оберіть текстові кваліфікатори (ймовірно, {None}), натисніть Далі
  6. У полі Попередній перегляд даних виберіть стовпець, для якого ви хочете бути текстом. Слід виділити.
  7. У полі Формат даних стовпця виберіть "Текст".
  8. Клацніть готово.

пояснюється зображеннями: support.insight.ly/hc/en-us/articles/…
Йо Людке,

2

Ви можете просто відформатувати діапазон як Текст.

Також тут є приємна стаття про формати чисел та способи їх програмування.


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

2

Насправді я виявив, що, принаймні, починаючи з Office 2003, ви можете зберігати електронну таблицю Excel як файл XML. Таким чином, я можу створити XML-файл, і коли я двічі клацну на ньому, він відкриється в Excel. Він забезпечує той самий рівень управління, що і SYLK, але синтаксис XML є більш інтуїтивним.


2

Додавання нерозривного простору в комірці може допомогти. Наприклад: "firstvalue";"secondvalue";"005 ";"othervalue"

Це змушує Excel розглядати його як текст, і простір не видно. У Windows ви можете додати нерозривний простір, ввівши alt + 0160. Дивіться тут для отримання додаткової інформації: http://en.wikipedia.org/wiki/Non-breaking_space

Випробувано в Excel 2010. Сподіваюся, це може допомогти людям, які все ще шукають цілком правильне рішення цієї проблеми.


2

У мене виникла ця проблема під час експорту даних CSV із коду C #, і я вирішив це шляхом попереднього додавання початкових нульових даних символом табуляції \ t, тому в Excel дані трактувались як текст, а не числові (проте, на відміну від попередніх інших символів, це не могло б t бути поміченим).

Мені сподобався підхід = "001", але це не дозволить експортовані дані CSV повторно імпортувати в мою програму C # без видалення всього цього форматування з файлу CSV-імпорту (натомість я просто обріжу дані імпорту) .


1

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


1

Завантажте csv в oleDB і змусіть усі виведені типи даних до рядка

я запитав те саме питання, а потім відповів на нього кодом.

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

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


1

Я знаю, що це старе запитання, але я маю рішення, якого тут немає.

Коли ви створюєте csv, додайте пробіл після коми, але перед вашим значенням, наприклад , 005,.

Це працювало, щоб у будь-якому випадку запобігти автоматичному форматуванню дати в Excel 2007.


2
Щойно перевірено, схоже, не працює з Excel 2007 та числовим стовпцем. : - /
Norman H

1

Метод майстра імпорту тексту НЕ працює, коли імпортований файл CSV має розриви рядків усередині комірки. Цей метод обробляє такий сценарій (принаймні з даними, розділеними табуляцією):

  1. Створіть новий файл Excel
  2. Ctrl + A, щоб виділити всі комірки
  3. У списку Формат чисел виберіть Текст
  4. Відкрийте файл, розділений табуляцією, у текстовому редакторі
  5. Виділіть все, скопіюйте та вставте в Excel


1

Це зводило мене з розуму цілий день (оскільки справді ви не можете керувати типами стовпців Excel перед відкриттям файлу CSV), і це в мене спрацювало, використовуючи VB.NET та Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

0

Відкриваючи CSV, ви отримуєте майстер імпорту тексту. На останньому кроці майстра ви зможете імпортувати певний стовпець як текст, зберігаючи при цьому префікс '00'. Після цього ви зможете відформатувати комірку будь-яким способом, який хочете.

Я спробував з Excel 2007, і він, здається, працює.


1
Excel 2003 не вискакує майстра.
Сергій Стадник

0

Ну, Excel ніколи не вискакує майстер для файлів CSV. Якщо ви перейменуєте його на .txt, ви побачите майстра, коли наступного разу зробите Файл> Відкрити в Excel.


0

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

...,`005,...

EDIT: Це неправильно. Фокус апострофа працює лише при введенні даних безпосередньо в Excel. Коли ви використовуєте його у файлі CSV, у полі з’являється апостроф, якого ви не хочете.

http://support.microsoft.com/kb/214233


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