Excel CSV - формат числовой ячейки
-
02-07-2019 - |
Вопрос
Я создаю отчет в виде 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 "сделать что-то с самим файлом". Я все еще сохраняю это для тех, кому нужно решение для прямого форматирования импорта
- Откройте пустой (новый) файл (Файл -> Создать из рабочей книги).
- Откройте мастер импорта (Данные -> Из текста).
- Выберите нужный CSV-файл и импортируйте
- В диалоговом окне выберите "С разделителями" и нажмите "Далее".
- Выберите разделители (снимите все флажки, кроме 'запятой'), выберите определители текста (вероятно, {Нет}), нажмите Далее
- В Предварительный просмотр данных поле выберите столбец, который вы хотите сделать текстовым.Это следует выделить.
- В Формат данных столбца в поле выберите "Текст".
- Нажмите готово.
Вы можете просто отформатировать свой диапазон в виде текста.
Также здесь это хорошая статья о числовых форматах и о том, как вы можете их запрограммировать.
На самом деле я обнаружил, что, по крайней мере, начиная с 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-файл имеет разрывы строк внутри ячейки.Этот метод обрабатывает этот сценарий (по крайней мере, с данными, разделенными табуляцией).:
- Создайте новый файл Excel
- Ctrl + A для выделения всех ячеек
- В выпадающем списке Формат чисел выберите Текст
- Откройте файл с разделителями табуляции в текстовом редакторе
- Выберите все, скопируйте и вставьте в 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-файле, в поле появляется апостроф, который вам не нужен.
Просто добавьте ' перед номером в CSV-документе.