Вопрос

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

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

...,005,...

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Вариант 3 – Измените расширение файла на .dif (формат обмена данными)

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

Шаг за шагом:

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

Другие советы

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

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

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

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

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

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

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

На самом деле я обнаружил, что, по крайней мере, начиная с 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 делает предположения, и вы можете указать ему, какие предположения следует сделать.

Однако мой код преобразует все типы данных в string ...изменить схему очень легко.для своих целей я использовал 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,...

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top