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 на многих компьютерах. Просто к вашему сведению :) В остальном отличные советы!
Николас
15
Я думаю, что вариант 1 является лучшим, если вам нужен беспроблемный способ сгенерировать файл, который «просто работает», то есть он открывается на компьютере пользователя в Excel, не требуя от него выполнения какой-либо дополнительной работы.
Кип,
У меня такая же проблема, и ничего из вышеперечисленного не подходит, извините. Думая, я мог бы экспортировать как XML и использовать XSLT для перехода в CSV. Мне нужно, чтобы файл CSV был правильным, чтобы его можно было импортировать в другое приложение
Мэтт,
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».
sorin
14

Это работает для Microsoft Office 2010, Excel версии 14.

Я неправильно понял предпочтение OP «сделать что-то с самим файлом». Я все еще сохраняю это для тех, кому нужно решение для прямого форматирования импорта

  1. Откройте пустой (новый) файл (Файл -> Создать из книги)
  2. Откройте Мастер импорта (Данные -> Из текста)
  3. Выберите файл .csv и импортируйте
  4. В диалоговом окне выберите «С разделителями» и нажмите «Далее».
  5. Выберите разделители (снимите все флажки, кроме "запятой"), выберите квалификаторы текста (вероятно, {Нет}), нажмите "Далее"
  6. В поле Предварительный просмотр данных выберите столбец, который будет текстовым. Следует выделить.
  7. В поле « Формат данных столбца» выберите «Текст».
  8. Нажмите "Готово".

источник
объяснено изображениями: support.insight.ly/hc/en-us/articles/…
Yo Ludke
2

Вы можете просто отформатировать свой диапазон как текст.

Также вот хорошая статья о числовых форматах и ​​о том, как их программировать.

Олафур Вааге
источник
Это повлияет только на то, как отображается значение. Вам нужно преобразовать его в текст либо с помощью формулы, либо во время импорта, с помощью одного из многих методов, описанных в этой теме
Лев
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. Надеюсь, это поможет людям, которые все еще ищут подходящее решение этой проблемы.

Kloe2378231
источник
2

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

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

Ричард Пурсхаус
источник
1

Я считаю, что при импорте файла вы можете выбрать тип столбца. Сделайте текст вместо числа. Однако сейчас у меня нет копии передо мной, чтобы проверить.

Харли Холкомб
источник
1

Загрузить csv в oleDB и принудительно преобразовать все предполагаемые типы данных в строку

Я задал тот же вопрос, а затем ответил на него кодом.

в основном, когда файл csv загружен, драйвер oledb делает предположения, вы можете указать ему, какие предположения делать.

Мой код заставляет все типы данных быть строковыми ... схему очень легко изменить. для моих целей я использовал xslt, чтобы получить то, что я хотел, но я разбираю самые разные файлы.

Джон Николас
источник
1

Я знаю, что это старый вопрос, но у меня есть решение, которого здесь нет.

Когда вы создаете csv, добавьте пробел после запятой, но перед вашим значением, например , 005,.

В любом случае это сработало, чтобы предотвратить автоматическое форматирование даты в Excel 2007.

plntxt
источник
2
Только что протестировал, похоже, не работает с Excel 2007 и числовым столбцом. : - /
Norman H
1

Метод мастера импорта текста НЕ работает, если в импортируемом CSV-файле есть разрывы строк внутри ячейки. Этот метод обрабатывает этот сценарий (по крайней мере, с данными, разделенными табуляцией):

  1. Создать новый файл Excel
  2. Ctrl + A, чтобы выделить все ячейки
  3. В поле со списком числового формата выберите текст
  4. Открыть файл с разделителями табуляции в текстовом редакторе
  5. Выбрать все, скопировать и вставить в Excel
Соленья
источник
1

Просто добавьте 'перед числом в CSV-документе.

MNassar
источник
Это не работало в Excel 2010 ('становится частью содержимого ячейки).
sancho.s ReinstateMonicaCellio
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,...

РЕДАКТИРОВАТЬ: это неправильно. Уловка с апострофом работает только при вводе данных непосредственно в Excel. Когда вы используете его в файле CSV, в поле появляется апостроф, который вам не нужен.

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

JW.
источник
4
Это то, что люди могут попробовать. Поэтому знание того, что это не сработает, полезно и экономит время.
AndyM 03