Excel CSV-формат ячейки номера

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

например, если файл CSV содержит

...,005,...

затем Excel показывает его как 5. Есть ли способ переопределить это и отобразить 005?

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

Я использую Excel 2003.

16 ответов


существует не простой способ управления форматированием Excel применяется при открытии .CSV-файл. Однако ниже перечислены три подхода, которые могут помочь.

Я предпочитаю первый вариант.

Вариант 1-Изменить данные в файле

вы можете изменить данные .CSV-файл следующим образом ...,="005",... Это будет отображаться в Excel как ...,005,...

Excel сохранит данные как формула, но копирование столбца и использование специальных значений вставки избавит от формулы, но сохранит форматирование

2 – формат данных

Если это просто проблема формата, и все ваши данные в этом столбце имеют трехзначную длину. Затем откройте данные в Excel, а затем отформатируйте столбец, содержащий данные в этом пользовательском формате 000

3 – измените расширение файла на .ОФП (данные формат обмена)

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

шаг за шагом:

  • изменить расширение файла с .csv to .dif
  • дважды щелкните файл, чтобы открыть его в Excel.
  • "мастер импорта файлов" будет запускаемый.
  • Установите "тип файла" на "с разделителями" и нажмите кнопку "Далее".
  • под разделителями отметьте "запятая" и нажмите кнопку "Далее".
  • нажмите на каждый столбец ваших данных, который отображается и выберите "формат данных столбца". Столбец со значением " 005 "должен быть отформатирован как "текст".
  • нажмите на кнопку Готово, файл будет открыт Excel с форматами, которые вы указали.

Не используйте CSV, используйте SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_ (SYLK)

Это дает гораздо больше контроля над форматированием, и Excel не будет пытаться угадать тип поля, изучая содержимое. Это выглядит немного сложнее, но вы можете уйти с использованием очень небольшого подмножества.


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

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

  1. открыть пустой (новый) файл (File -> New from workbook)
  2. откройте мастер импорта (Data - > From Text)
  3. выберите свой .csv файл и импорт
  4. в диалоговое окно, выберите "разделители" и нажмите кнопку Далее.
  5. выберите разделители (снимите все, кроме запятой), выберите квалификаторы текста (вероятно, {нет}), нажмите кнопку Далее
  6. на предварительный просмотр данных поле выберите столбец, который вы хотите быть текст. Это должно подчеркнуть.
  7. на формат данных столбца

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

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


на самом деле я обнаружил, что, по крайней мере, начиная с Office 2003, вы можете сохранить таблицу Excel в XML-файл. Таким образом, я могу создать XML-файл, и когда я дважды щелкните по нему, он будет открыт в Excel. Он обеспечивает тот же уровень управления, что и SYLK, но синтаксис XML более интуитивно понятен.


добавить неразрывный пробел в ячейке может помочь. Например: "firstvalue";"secondvalue";"005 ";"othervalue"

Это заставляет Excel рассматривать его как текст, и пространство не видно. В Windows вы можете добавить неразрывное пространство, нажав alt+0160. См. здесь для получения дополнительной информации:http://en.wikipedia.org/wiki/Non-breaking_space

пробовал в Excel 2010. Надеюсь, это поможет людям, которые все еще ищут вполне правильное решение этой проблемы.


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

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


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


загрузите csv в oleDB и заставьте все выведенные типы данных string

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

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

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


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

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

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


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

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

это сводило меня с ума весь день (так как вы действительно не можете контролировать типы столбцов 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

при открытии CSV вы получаете мастер импорта текста. На последнем шаге мастера вы сможете импортировать определенный столбец в виде текста, сохранив тем самым префикс "00". После этого вы можете отформатировать ячейку любым способом, который вы хотите.

Я пробовал с Excel 2007, и он, казалось, работал.


ну, excel никогда не всплывает мастер для CSV-файлов. Если вы переименуете его .txt, вы увидите мастер, когда вы делаете Файл>Открыть в Excel в следующий раз.


поместите одну кавычку перед полем. Excel будет рассматривать его как текст, даже если он выглядит как число.

...,`005,...

EDIT: Это неправильно. Апостроф трюк работает только при вводе данных непосредственно в Excel. Когда вы используете его в CSV-файле, Апостроф появляется в поле, которое вы не хотите.

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


просто добавьте ' перед номером в CSV doc.