CSV для Excel, включая ведущие нули и запятые - PullRequest
27 голосов
/ 21 ноября 2008

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

Если я хочу экранировать запятую в значениях, я могу написать ее как «640,480».

Если я хочу сохранить начальные нули, я могу использовать = "001234".

Но если я хочу оставить запятые и начальные нули в значении, запись как = "001,002" будет разделена на два столбца. Кажется, нет никакого решения, чтобы выразить правильные данные.

Есть ли способ выразить 001, 002 в CSV для Excel?

Ответы [ 12 ]

33 голосов
/ 02 мая 2009

Ответ Кента Фредрика содержит решение:

  "=""001,002"""

(Я пытаюсь опубликовать это как отдельный ответ, потому что из ответа Кента не ясно, является ли это правильным решением Excel.)

5 голосов
/ 21 ноября 2008

Поставьте префикс String для ваших данных:

 "N001,002","N002,003" 

(пока этот префикс не является E)

Эта нотация (по крайней мере, в OpenOffice) разбирается как 2 столбца с правильно сохраненными байтами N001,002.

Спецификация CSV гласит, что допускается внутри строк в кавычках.

Кроме того, предупреждение из опыта: убедитесь, что вы делаете это с номерами телефонов тоже. В противном случае Excel будет интерпретировать телефонные номера как числа с плавающей запятой и сохранять их в научной записи: /, а 1.800E10 не очень хороший номер телефона.

В OpenOffice этот блок RawCSV также декодируется, как и ожидалось:

  "=""001,002""","=""002,004"""

то есть:

   $rawdata = '001,002'; 
   $equation = "=\"$rawdata\"";
   $escaped = str_replace('"','""',$equation); 
   $csv_chunk = "\"$escaped\"" ; 
4 голосов
/ 21 ноября 2008

Do

"""001,002"""

Я узнал это, набрав «001,002», а затем выполнил сохранение в формате CSV в Excel. Если это не совсем то, что вы хотите (вам не нужны кавычки), это может быть хорошим способом найти то, что вы хотите.

Другим вариантом может быть использование текста с разделителями табуляцией, если это вариант для вас.

2 голосов
/ 24 ноября 2008

Читатель моего блога нашел решение, = "001" & CHAR (44) & "002", на моем компьютере это работает!

1 голос
/ 08 марта 2018

Поскольку никто уже не упомянул об этом, решил, что стоит упомянуть об этом в этом старом посте.

Если вы добавите символ горизонтальной табуляции \t перед числом, то MS Excel также покажет начальные нули. И символ табуляции не отображается в листе Excel. Даже если он окружен двойными кавычками. (F.e. \"\t001,002\")

Это также выглядит лучше в Notepad ++, по сравнению с \0 иначе NULL перед таким числом.

1 голос
/ 28 июля 2017

Довольно старая тема, но почему бы вам просто не добавить пробел после значения? Затем он будет считаться строкой, и начальные нули не будут удалены.

"001,002". ""

0 голосов
/ 06 апреля 2018

Это просто, если использовать функцию Power Query в Excel, которая позволяет выполнять пошаговые преобразования.

Оригинальный файл:

enter image description here

Добавить пользовательский столбец:

enter image description here

0 голосов
/ 04 января 2018

Excel использует форматирование по умолчанию для столбцов CSV в зависимости от содержимого. Так что если у вас есть 001 в CSV, Excel автоматически превратит его в 1.

Единственный способ сохранить ведущие нули в Excel из файла CSV - это изменить расширение файла CSV на .txt, а затем просто открыть Excel, нажать кнопку «Открыть», выбрать файл TXT, и вы увидите Мастер импорта текста. Выберите формат CSV (разделенный запятыми), а затем просто убедитесь, что вы выбрали «Текст» в качестве формата.

И все, теперь вы можете экспортировать эти предыдущие данные в формате csv в любые другие, сохраняя ведущие нули.

0 голосов
/ 19 сентября 2016

Все предложенные ответы мне не подходят ("=" "blahblah" "" и другие) во всех текущих версиях Excel или приложении Numbers в OS X.

Единственное решение, которое я нашел для работы - это добавить экранированный нулевой символ в начале строки (который равен \ 0 в языках на основе PHP или Си). Все заканчивается обработанным как есть без вычисления или обработки программным обеспечением при открытии таблицы калькуляции.

echo "\0" . $data;
0 голосов
/ 15 октября 2014

Если вы используете «Content-Disposition» и экспортируете из asp, чтобы преуспеть, используя HTML-теги, тогда вы должны добавить «style = 'mso-number-format: \ @;'» к этому тегу и заставить его принимать будут исключены только текстовые значения, тем самым пропуски ведущих нулей. Если прямая косая черта "\" принята, используйте двойную прямую косую черту "\"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...