Я создаю отчет в виде файла CSV. Когда я пытаюсь открыть файл в Excel, он делает предположение о типе данных на основе содержимого ячейки и соответствующим образом переформатирует его.
Например, если CSV-файл содержит
...,005,...
Затем Excel показывает это как 5. Есть ли способ изменить это и отобразить 005?
Я бы предпочел сделать что-нибудь с самим файлом, чтобы пользователь мог просто дважды щелкнуть файл CSV, чтобы открыть его.
Я использую Excel 2003.
excel
csv
formatting
number-formatting
Сергей Стадник
источник
источник
Ответы:
Не существует простого способа управления форматированием, применяемым Excel при открытии файла .csv. Однако ниже перечислены три подхода, которые могут помочь.
Я предпочитаю первый вариант.
Вариант 1 - изменить данные в файле
Вы можете изменить данные в файле .csv следующим образом ..., = ”005” , ... Это будет отображаться в Excel как ..., 005 , ...
Excel сохранит данные в виде формулы, но копирование столбца и использование специальных значений избавит от формулы, но сохранит форматирование.
Вариант 2 - Отформатируйте данные
Если это просто проблема с форматом, и все ваши данные в этом столбце имеют трехзначную длину. Затем откройте данные в Excel и отформатируйте столбец, содержащий данные, в этом настраиваемом формате 000
Вариант 3. Измените расширение файла на .dif (формат обмена данными)
Измените расширение файла и используйте мастер импорта файлов для управления форматами. Файлы с расширением .dif автоматически открываются Excel при двойном щелчке по ним.
Шаг за шагом:
источник
Не используйте CSV, используйте SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
Это дает гораздо больший контроль над форматированием, и Excel не будет пытаться угадать тип поля, изучая его содержимое. Это выглядит немного сложным, но вы можете обойтись очень маленьким подмножеством.
источник
Это работает для Microsoft Office 2010, Excel версии 14.
Я неправильно понял предпочтение OP «сделать что-то с самим файлом». Я все еще сохраняю это для тех, кому нужно решение для прямого форматирования импорта
источник
Вы можете просто отформатировать свой диапазон как текст.
Также вот хорошая статья о числовых форматах и о том, как их программировать.
источник
На самом деле я обнаружил, что, по крайней мере, начиная с 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 и принудительно преобразовать все предполагаемые типы данных в строку
Я задал тот же вопрос, а затем ответил на него кодом.
в основном, когда файл csv загружен, драйвер oledb делает предположения, вы можете указать ему, какие предположения делать.
Мой код заставляет все типы данных быть строковыми ... схему очень легко изменить. для моих целей я использовал xslt, чтобы получить то, что я хотел, но я разбираю самые разные файлы.
источник
Я знаю, что это старый вопрос, но у меня есть решение, которого здесь нет.
Когда вы создаете csv, добавьте пробел после запятой, но перед вашим значением, например
, 005,
.В любом случае это сработало, чтобы предотвратить автоматическое форматирование даты в Excel 2007.
источник
Метод мастера импорта текста НЕ работает, если в импортируемом CSV-файле есть разрывы строк внутри ячейки. Этот метод обрабатывает этот сценарий (по крайней мере, с данными, разделенными табуляцией):
источник
Просто добавьте 'перед числом в CSV-документе.
источник
Это сводило меня с ума весь день (поскольку вы действительно не можете контролировать типы столбцов 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 будет рассматривать его как текст, даже если он выглядит как число.
РЕДАКТИРОВАТЬ: это неправильно. Уловка с апострофом работает только при вводе данных непосредственно в Excel. Когда вы используете его в файле CSV, в поле появляется апостроф, который вам не нужен.
http://support.microsoft.com/kb/214233
источник