Excel CSV-формат числовых ячеек



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



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



...,005,...


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



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



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

926   16  

16 ответов:

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

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

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

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

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

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

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

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

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

шаг за шагом:

  • изменить расширение файла с .csv до .диф
  • дважды щелкните файл, чтобы открыть его в 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. откройте мастер импорта (данные - > из текста)
  3. выберите свой .csv файл и импорт
  4. в в диалоговом окне выберите "разделители" и нажмите кнопку Далее.
  5. выберите разделители (снимите все, кроме "запятых"), выберите квалификаторы текста (вероятно, {None}), нажмите кнопку Далее
  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. в поле со списком числовой формат выберите текст
  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.

Comments

    Ничего не найдено.