Excel CSV - числовой формат - PullRequest
       55

Excel CSV - числовой формат

81 голосов
/ 26 сентября 2008

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

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

...,005,...

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

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

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

Ответы [ 16 ]

115 голосов
/ 27 сентября 2008

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

Мои предпочтения - первый вариант.

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

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

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

Вариант 2 - Форматирование данных

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

Опция 3 - изменить расширение файла на .dif (формат обмена данными)

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

Шаг за шагом:

  • Измените расширение файла с .csv на .dif
  • Дважды щелкните файл, чтобы открыть его в Excel.
  • Будет запущен «Мастер импорта файлов».
  • Установите для параметра «Тип файла» значение «С разделителями» и нажмите кнопку «Далее».
  • В разделе «Разделители» отметьте «Запятая» и нажмите кнопку «Далее».
  • Щелкните по каждому столбцу ваших данных, который отображается, и выберите «Формат данных столбца». Столбец со значением «005» должен быть отформатирован как «Текст».
  • Нажмите кнопку Готово, файл откроется в Excel в указанных вами форматах.
27 голосов
/ 26 сентября 2008

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

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

14 голосов
/ 16 мая 2012

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

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

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

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

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

2 голосов
/ 09 октября 2013

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

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

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

2 голосов
/ 26 сентября 2008

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

2 голосов
/ 26 сентября 2008

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

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

1 голос
/ 15 мая 2014

Это сводило меня с ума весь день (поскольку на самом деле вы не можете контролировать типы столбцов 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
1 голос
/ 06 апреля 2011

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

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

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

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

Это работало для предотвращения автоматического форматирования даты в Excel 2007 в любом случае.

...