Excel экспорт в csv с кавычками

‎Mar 28 2020

10:50 AM

— edited

‎Mar 28 2020

10:56 AM

I totally agree. My customers need to work with CSV’s on a regular base. Excel lacks in saving to .CSV’s big time on the following points:

1. Since we use the “;” as a separator in our local settings so Excel exports with this separator.
Most software in expect a comma “,”. So it’s often a struggle to get it right or many bad imports are the result.

2. An export option to double quote all entities would be very helpfull for data that includes “,” / comma’s, like names and so on. E.g. “Skywalker, Luke”

I also suggest Ron’s editor to my customers in the Netherlands to handle the .CSV’s and I’m using Easy CSV myself since I’m a MacOS user ( ps. I bought the whole pack from this dev. With a json and plist editor in it too)

So Microsoft please listen to your customers and add some CSV functionality to Excel.

 

MariaVS

Пользователь

Сообщений: 6
Регистрация: 04.11.2014

Добрый день!
Давно читаю форум, из разряда самоучек )) много полезного почерпнула, но столкнулась с вопросом, решить который не могу. Набралась смелости, решила совета попросить?
Мучаю файл: нужно из текстового файла выбрать определенные столбцы с данными и записать их в другой текстовый файл плюс добавить шапку, в которой посчитаны количество строк исходного файла, сумма одного столбца, максимум/минимум даты в третьем столбце. Конечный результат должен быть в DOS-кодировке, разделитель — точка с запятой. xlText сохранял с разделителем «запятая», пришла к xlCSV.
Столкнулась с проблемой: все работает нормально, НО если в исходной строке есть запятая, то вся строка заключается в двойные кавычки. Как-то это можно обойти? Подскажите, пожалуйста?.. Во вложении пример исходного файла и макрос.

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

MariaVS

Пользователь

Сообщений: 6
Регистрация: 04.11.2014

JayBhagavan

, спасибо за вариант! В нем добавляются кавычки. Если мне пойти от обратного и сохраненный файл перезаписать, заменив кавычки на что? на пустоту можно заменить? Потому что другой символ тоже не подойдет.
У меня же не всегда строки заключаются в кавычки, а только тогда, в значении которых есть запятая. Если запятой нет, то строка записывается нормально.
Сохранять не xlCSV, а xlText — тогда ухожу от этой проблемы, но приобретаю новую — разделитель — не точка-с-запятой… Прописать принудительно разделитель при сохранении не могу, мозгов не хватает )))))
В общем, мучаюсь и спотыкаюсь )))) наверное, решение какое-то простое, а я его просто не вижу…

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Ну а просто конкатенацию использовать вручную?

There is no knowledge that is not power

 

MariaVS

Пользователь

Сообщений: 6
Регистрация: 04.11.2014

#5

01.12.2015 10:58:50

Johny

, да, таким образом строку и записываю в новый файл.

Код
i = 1
      For i = 1 To N_Saldo
        Reestr.Sheets(1).Range("A" + Trim(Str(i))).Value = Saldo.Sheets(1).Range(FIO_Col_Saldo + Trim(Str(i))).Value & Chr(59) & Saldo.Sheets(1).Range(DS_Col_Saldo + Trim(Str(i))).Value & Chr(59) & Saldo.Sheets(1).Range(Sum_Col_Saldo + Trim(Str(i))).Value & ".00" & Chr(59) & Replace(Format(Saldo.Sheets(1).Range(Date_Col_Saldo + Trim(Str(i))).Value, ddmmyy), ".", "/")
      Next i

и в атрибуте «DS_Col_Saldo»  в исходнике бывают значения типа школа, 25и тогда строчка — в двойные кавычки. Это, как я почитала, особенность сохранения в текстовые файлы, вот как ее обойти?

Изменено: MariaVS01.12.2015 13:20:21

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#6

01.12.2015 12:02:12

Вот пример:

Код
Sub FFF()

    Dim r
    Dim fso As Object
    Dim txt As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.CreateTextFile("C:Temp1.csv", Overwrite:=True)
    
    For r = 1 To 10
        txt.WriteLine "Школа, 25;Школа 39;Школа, 50;"
    Next

    txt.Close
    
End Sub

Путь к файлу только поменяйте. В итоге получаем CSV файл, который нормально открывается экселем — с разбивкой.

There is no knowledge that is not power

 

MariaVS

Пользователь

Сообщений: 6
Регистрация: 04.11.2014

Johny

, вся беда в том, что конечные *.txt открываться будут не всеядным экселем, а 1С, заточенной под загрузку файла с определенной структурой.. ((( И если я уберу запятые в наименовании школа, 25 и получу на выходе школа 25, то конечный файл не загрузится. Надо на выходе получить текстовую строку (кодировка ms-dos) без пробелов с разделителем «;». Строку получаю, но в кавычках… Либо без кавычек, но с пробелами между «;» (пробовала не конкатенацией строку записывать, а столбцами, между столбцами с данными в пустой столбец сохраняла точку с запятой и потом сохраняла в текст. Тогда появлялись пробелы в строке между сохраненными столбцами, которые Trim_ом не убирались %-/)  В общем, измудрялась как могла, и не могла, и вас всех зря мучаю…

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Тогда вам нужно приложение на C# написать — там можно кодировки какие угодно указывать. :)

There is no knowledge that is not power

 

MariaVS

Пользователь

Сообщений: 6
Регистрация: 04.11.2014

Johny

, а так хотелось обойтись всемогущим vba ))))))  эх… «орешек знаний тверд…»  (с)

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

#10

01.12.2015 15:58:55

Добрый день. Наверное многое зависит от машины и ПО, у меня Ваш вариант и код

Johny

выдают результаты без кавычек.
попробуйте следующий вариант, может поможет:

Код
Dim r
Dim record As String
Open "C:UsersSPDesktop1.csv" For Output As #1 
    For r = 13 To 23 
        record = "" & Range("B" & r & "") & ";" & Range("C" & r & "") & "" 
        Print #1, record
    Next
 Close #1
 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

MariaVS,

кодировка

— поиск по форуму.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

MariaVS

Пользователь

Сообщений: 6
Регистрация: 04.11.2014

#12

07.12.2015 18:02:06

JayBhagavan

,

Johny

,

egonomist

, спасибо вам, коллеги!  Да, все получилось по коду Jonny (:  Спасибо большое! Первое мое обращение, я верила, что мне помогут, ура!!!! Спасибо!!!

Время на прочтение
11 мин

Количество просмотров 366K

CSV является стандартом де-факто для связи между собой разнородных систем, для передачи и обработки объемных данных с «жесткой», табличной структурой. Во многих скриптовых языках программирования есть встроенные средства разбора и генерации, он хорошо понятен как программистам, так и рядовым пользователям, а проблемы с самими данными в нем хорошо обнаруживаются, как говорится, на глаз.

История этого формата насчитывает не менее 30 лет. Но даже сейчас, в эпоху повального использования XML, для выгрузки и загрузки больших объемов данных по-прежнему используют CSV. И, несмотря на то, что сам формат довольно неплохо описан в RFC, каждый его понимает по-своему.

В этой статье я попробую обобщить существующие знания об этом формате, указать на типичные ошибки, а также проиллюстрировать описанные проблемы на примере кривой реализации импорта-экспорта в Microsoft Office 2007. Также покажу, как обходить эти проблемы (в т.ч. автоматическое преобразование типов Excel-ом в DATETIME и NUMBER) при открытии .csv.

Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться.

Как иллюстрацию возьмем казалось бы тривиальную задачу: импортировать в Microsoft Outlook данные из таблицы в Microsoft Excel.

В Microsoft Excel есть средства экспорта в CSV, а в Microsoft Outlook — соответствующие средства импорта. Что могло быть проще — сделал файлик, «скормил» почтовой программе и — дело сделано? Как бы не так.

Создадим в Excel тестовую табличку:

Текстовая табличка

… и попробуем экспортировать ее в три текстовых формата:

«Текст Unicode» Кодировка — UTF-16, разделители — табуляция, переводы строк — 0×0D, 0×0A, объем файла — 222 байт
«CSV (разделители — запятые)» Кодировка — Windows-1251, разделители — точка с запятой (не запятая!), во второй строке значение телефонов не взято в кавычки, несмотря на запятую, зато взято в кавычки значение «01;02», что правильно. Переводы строк — 0×0D, 0×0A. Объем файла — 110 байт
«Текстовые файлы (с разделителями табуляции)» Кодировка — Windows-1251, разделители — табуляция, переводы строк — 0×0D, 0×0A. Значение «01;02» помещено в кавычки (без особой нужды). Объем файла — 110 байт

Какой вывод мы делаем из этого?.. То, что здесь Microsoft называет «CSV (разделители — запятые)», на самом деле является форматом с разделителями «точка с запятой». Формат у Microsoft — строго Windows-1251. Поэтому, если у вас в Excel есть Unicode-символы, они на выходе в CSV отобразятся в вопросительные знаки. Также то, что переводами строк является всегда пара символов, то, что Microsoft тупо берет в кавычки все, где видит точку с запятой. Также то, что если у вас нет Unicode-символов вообще, то можно сэкономить на объеме файла. Также то, что Unicode поддерживается только UTF-16, а не UTF-8, что было бы сильно логичнее.

Теперь посмотрим, как на это смотрит Outlook. Попробуем импортировать эти файлы из него, указав такие же источники данных. Outlook 2007: Файл -> Импорт и экспорт… -> Импорт из другой программы или файла. Далее выбираем формат данных: «Значения, разделенные запятыми (Windows)» и «Значения, разделенные табуляцией (Windows)».

«Значения, разделенные табуляцией(Windows)» Скармливаем аутлуку файл tsv, с разделенными табуляцией значениями и!.. — чтобы вы думали?.. Outlook склеивает поля и табуляцию не замечает. Заменяем в файле табуляцию на запятые и, как видим, поля уже разбирает, молодец.
«Значения, разделенные запятыми (Windows)» А вот аутлук как раз понимает все верно. Comma — это запятая. Поэтому ожидает в качестве разделителя запятую. А у нас после экселя — точка с запятой. В итоге аутлук распознает все неверно.

Два майкрософтовских продукта не понимают друг друга, у них напрочь отсутствует возможность передать через текстовый файл структурированные данные. Для того, чтобы все заработало, требуются «пляски с бубном» программиста.

Мы помним, что Microsoft Excel умеет работать с текстовыми файлами, импортировать данные из CSV, но в версии 2007 он делает это очень странно. Например, если просто открыть файл через меню, то он откроется без какого-либо распознавания формата, просто как текстовый файл, целиком помещенный в первую колонку. В случае, если сделать дабл-клик на CSV, Excel получает другую команду и импортирует CSV как надо, не задавая лишних вопросов. Третий вариант — вставка файла на текущий лист. В этом интерфейсе можно настраивать разделители, сразу же смотреть, что получилось. Но одно но: работает это плохо. Например, Excel при этом не понимает закавыченных переводов строк внутри полей.

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

Стандарта CSV как такового, к сожалению, нет, но, между тем, существует т.н. memo. Это RFC 4180

2005-го

года, в котором описано все довольно толково. За неимением ничего большего, правильно придерживаться хотя бы RFC. Но для совместимости с Excel следует учесть его собенности.

Вот краткая выжимка рекомендаций RFC 4180 и мои комментарии в квадратных скобках:

  • между строками — перевод строки CRLF [на мой взгляд, им не стоило ограничивать двумя байтами, т.е. как CRLF (0×0D, 0×0A), так и CR 0×0D]
  • разделители — запятые, в конце строки не должно быть запятой,
  • в последней строке CRLF не обязателен,
  • первая строка может быть строкой заголовка (никак не помечается при этом)
  • пробелы, окружающие запятую-разделитель, игнорируются.
  • если значение содержит в себе CRLF, CR, LF (символы-разделители строк), двойную кавычку или запятую (символ-разделитель полей), то заключение значения в кавычки обязательно. В противном случае — допустимо.
  • т.е. допустимы переводы строк внутри поля. Но такие значения полей должны быть обязательно закавычены,
  • если внутри закавыченной части встречаются двойные кавычки, то используется специфический квотинг кавычек в CSV — их дублирование.

Вот в нотации ABNF описание формата:

 file = [header CRLF] record *(CRLF record) [CRLF]
   header = name *(COMMA name)
   record = field *(COMMA field)
   name = field
   field = (escaped / non-escaped)
   escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
   non-escaped = *TEXTDATA
   COMMA = %x2C
   DQUOTE =  %x22
   LF = %x0A
   CRLF = CR LF
   TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E
 

Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:

  • строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
  • количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
  • Квотить кавычки через «слэш» не по стандарту, делать так не надо.
  • Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
  • Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
  • Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
  • У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.

Пример валидного CSV, который можно использовать для тестов:

Фамилия, Имя, Адрес, Город/штат, индекс, просто строка
Иванов,Иван, Ленина 20, Москва, 08075, "1/3"
Tyler, John,110 terrace, PA,20121, "1.24"
"Петров 
""Кул""", Петя,120 Hambling St., NJ,08075, "1,24"
Смирнов,Вася,"7452 Street ""Near the Square"" road", York, 91234, "3-01"
,Миша,,Ленинград, 00123, "03-01"
"Джон ""Черная голова"", Клод",Рок,"", Маями бич,00111, "0000"
Сергей,,

точно такой же SCSV:

Фамилия; Имя; Адрес;  Город/штат; индекс; просто строка
Иванов;Иван; Ленина 20; Москва; 08075;"1/3"
Tyler; John;110 terrace; PA; 20121;"1.24"
"Петров 
""Кул"""; Петя;120 Hambling St.; NJ;08075;"1,24"
Смирнов;Вася;"7452 Street ""Near the Square"" road"; York; 91234;"3-01"
;Миша;;Ленинград; 00123;"03-01"
"Джон ""Черная голова""; Клод";Рок;""; Маями бич;00111; "0000"
Сергей;;

Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в .csv, Excel-ом не воспринимается вообще.

Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:

Ошибки Excel-я при импорте:

  1. Учлись пробелы, окружающие разделители
  2. Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
  3. В поле индекс Excel «опустил» ведущие нули.
  4. в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол

Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:

С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.

Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.

Фамилия;Имя;Адрес;Город/штат;индекс;просто строка
Иванов;Иван;Ленина 20;Москва;="08075";="1/3"
Tyler; John;110 terrace;PA;="20121";="1.24"
"Петров 
""Кул""";Петя;120 Hambling St.;NJ;="08075";="1,24"
Смирнов;Вася;"7452 Street ""Near the Square"" road";York;="91234";="3-01"
;Миша;;Ленинград;="00123";="03-01"
"Джон ""Черная голова"";Клод";Рок;"";Маями бич;="00111";="0000"
Сергей;;

И вот что случаеся, если мы открываем этот файлик в экселе:

Резюмирую.

Чтобы сгенерировать такой CSV, которым можно было бы пользоваться, пользователю нужно дать возможность сделать следующие настройки перед экспортом:

  1. выбрать кодировку. Как правило, важно UTF-8, UTF-16, Windows-1251, KOI8-R. Чаще всего, других вариантов нет. Одна из них должна идти по умолчанию. В случае, если данные содержат символы, не имеющие аналогов в целевой кодировке, нужно предупреждать пользователя, что данные будут битые;
  2. выбрать разделитель между полями. Варианты — табуляция, запятая, точка с запятой. По умолчанию — точка с запятой. Не забыть, что если разделитель вводится в тексте, то будет очень непросто ввести туда табуляцию, это еще и непечатный символ;
  3. выбрать разделитель между строками (CRLF 0×0D 0×0A или CR 0×0D);
  4. выбрать разделитель целой и дробной части для числовых данных (точка или запятая).
  5. выбрать, выводить ли строку заголовка;
  6. выбрать, каким образом осуществлять квотинг спецсимволов (особенно переводов строк и кавычек). В принципе, можно отступиться от стандарта и квотировать их как n и «, но нужно в этом случае не забыть квотировать сами n, если они встретятся и не забыть сделать это опцией при экспорте-импорте. Но совместимость пойдет лесом, потому что любой RFC-стандартный парсер конструкцию …,»abc«»,… посчитает за ошибку;
  7. совсем в идеале — поставить галочку «для Excel» и учитывать там те нестандартности, которые внесла Майкрософт. К примеру, заменять значения числовых полей, «похожих на дату», на конструкцию =»<значение поля>«.
  8. определиться, нужно ли оставлять «хвост» из пустых разделителей, если он образуется. Например, из 20 полей только первое содержит данные, а остальные пустые. В итоге, в строке можно либо ставить после первого 19 разделителей, либо не ставить. Для больших объемов данных это может спасти миллисекунды обработки и уменьшить размер файла.

Чтобы построить хороший и удобный импортер CSV, необходимо помнить о следующем:

  1. разбор файла нужно делать по лексемам в соответствии с грамматикой выше или пользоваться хорошо зарекомендовавшими себя готовыми библиотеками (Excel работает иначе, потому с импортом проблема);
  2. предоставлять пользователю возможность выбрать кодировку (топ 4 достаточно);
  3. предоставлять пользователю возможность выбрать разделитель между полями (запятая, табуляция, точка с запятой достаточно);
  4. предоставлять пользователю возможность выбрать разделитель между строками, но кроме вариантов CR и CRLF нужно предусмотреть «CR или CRLF». Это связано с тем, что, например, Excel при экспорте таблицы с переводами строк внутри ячеек экспортирует эти переводы строк как CR, а остальные строки разделяет CRLF. При этом при импорте файла ему все равно, CR там или CRLF;
  5. предоставлять пользователю возможность выбрать разделитель между целой и дробной частей (запятая или точка);
  6. определиться с методом разбора — сначала читаем все в память, потом обрабатываем или обрабатываем строку за строкой. В первом случае может понадобиться больше памяти, во втором случае — ошибка в середине вызовет только частичный импорт, что может вызвать проблемы. Предпочительнее первый вариант.

Рауф Алиев,
заместитель технического директора Mail.Ru Group

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

Сохраните данные рабочего листа как файл csv с двойными кавычками

Сохраняйте данные рабочего листа как файл csv без двойных кавычек


стрелка синий правый пузырь Сохраните данные рабочего листа как файл csv с двойными кавычками

Чтобы сохранить обычные данные в виде файла csv с двойными кавычками, вам может помочь следующий код VBA, пожалуйста, сделайте следующее:

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: сохранить данные рабочего листа как файл csv с двойными кавычками:

Sub CSVFile()
'updateby Extendoffice
    Dim xRg As Range
    Dim xRow As Range
    Dim xCell As Range
    Dim xStr As String
    Dim xSep As String
    Dim xTxt As String
    Dim xName As Variant
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
    Set xRg = Application.InputBox("Please select the data range:", "Kutools for Excel", xTxt, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    xName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
    xSep = Application.International(xlListSeparator)
    Open xName For Output As #1
    For Each xRow In xRg.Rows
        xStr = ""
        For Each xCell In xRow.Cells
            xStr = xStr & """" & xCell.Value & """" & xSep
        Next
        While Right(xStr, 1) = xSep
            xStr = Left(xStr, Len(xStr) - 1)
        Wend
        Print #1, xStr
    Next
    Close #1
    If Err = 0 Then MsgBox "The file has saved to: " & xName, vbInformation, "Kutools for Excel"
End Sub

3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится диалоговое окно, напоминающее вам о выборе диапазона данных, который вы хотите сохранить как файл csv с двойными кавычками, см. снимок экрана:

док сохранить csv с кавычками 1

4. Затем нажмите OK и Сохранить как появится окно, укажите имя и расположение файла, а затем нажмите Сохраните кнопку, см. снимок экрана:

док сохранить csv с кавычками 2

5, И Kutools for ExcelПоявится окно подсказки, чтобы напомнить вам, что новый файл CSV был сохранен в указанном месте, см. снимок экрана:

док сохранить csv с кавычками 3

6. Нажмите OK чтобы закрыть диалоговое окно, и теперь, когда вы открываете новый файл csv, все данные заключаются в двойные кавычки, как показано на следующем снимке экрана:

док сохранить csv с кавычками 4


стрелка синий правый пузырь Сохраняйте данные рабочего листа как файл csv без двойных кавычек

Если ваши данные разделены запятой, разрыв строки в ячейке, когда вы сохраняете данные как файл csv, данные будут заключены в двойные кавычки, как показано ниже:

док сохранить csv с кавычками 5

Чтобы сохранить данные в виде CSV-файла без двойных кавычек, примените следующий код VBA.

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: сохранить данные рабочего листа как файл csv без двойных кавычек:

Sub Export()
'updateby Extendoffice
    Dim xRg As Range
    Dim xRow As Range
    Dim xCell As Range
    Dim xStr As String
    Dim xTxt As String
    Dim xName As Variant
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
    Set xRg = Application.InputBox("Please select data range:", "Kutools for Excel", xTxt, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    xName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
    Open xName For Output As #1
    For Each xRow In xRg.Rows
        xStr = ""
        For Each xCell In xRow.Cells
            xStr = xStr & xCell.Value & Chr(9)
        Next
        While Right(xStr, 1) = Chr(9)
            xStr = Left(xStr, Len(xStr) - 1)
        Wend
        Print #1, xStr
    Next
    Close #1
    If Err = 0 Then MsgBox "The file has saved to: " & xName, vbInformation, "Kutools for Excel"
End Sub

3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится диалоговое окно, напоминающее вам о выборе диапазона данных, который вы хотите сохранить как CSV без двойных кавычек, см. снимок экрана:

док сохранить csv с кавычками 6

4. Нажмите OK и Сохранить как отображается окно, укажите имя файла и расположение для нового файла CSV, см. снимок экрана:

док сохранить csv с кавычками 7

5, Затем нажмите Сохраните кнопка, а Kutools for ExcelПоявится окно подсказки, чтобы сообщить вам, что новый файл CSV был сохранен в указанном месте, см. снимок экрана:

док сохранить csv с кавычками 8

6. Нажмите OK чтобы закрыть диалоговое окно, и, когда вы откроете новый файл csv, двойные кавычки, окруженные данными, будут удалены, как показано на следующем снимке экрана:

док сохранить csv с кавычками 9


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

I’ve recently created an application which adds items to a Database by CSV. After adding items I realized that lots of my values had extra quotes («) that weren’t needed and this was messing up my ordering.

The problem is that when exporting to a CSV from Excel, Excel adds extra quotes to all of my values that already have a quote in them. I’ve shown the difference below:

Original Item: Drill Electric Reversible 1/2″ 6.3A

Exported Item: «Drill Electric Reversible 1/2″» 6.3″

Note: the CSV export is adding three (3) extra quotes («). Two on the ends, and one after the original intended quote.

Is there a setting I can change, or a formatting property I can set on the Excel File/Column? Or do I have to live with it and remove these quotes in my back-end code before adding them to the Database?

asked Mar 4, 2011 at 22:38

Lando's user avatar

3

This is entirely normal. The outer quotes are added because this is a string. The inner quote is doubled to escape it. Same kind of thing you’d see in a SQL query for example. Use the TextFieldParser class to have tried and true framework code care of the parsing of this for you automatically.

answered Mar 4, 2011 at 22:43

Hans Passant's user avatar

Hans PassantHans Passant

916k145 gold badges1676 silver badges2517 bronze badges

That’s standard.

The values within a CSV file should have quotes around them (otherwise commas and linebreaks inside a field may be misinterpreted).

The way to escape a quote within a field is to double it, just as you are seeing.

I suggest you read about the basic rules of CSV:

CSV is a delimited data format that has fields/columns separated by the comma character and records/rows terminated by newlines. Fields that contain a special character (comma, newline, or double quote), must be enclosed in double quotes. If a line contains a single entry which is the empty string, it may be enclosed in double quotes. If a field’s value contains a double quote character it is escaped by placing another double quote character next to it. The CSV file format does not require a specific character encoding, byte order, or line terminator format.

(emphasis mine)

answered Mar 4, 2011 at 22:41

Oded's user avatar

OdedOded

487k99 gold badges880 silver badges1004 bronze badges

3

You could try exporting from Excel as TAB delimited files. I find it easier to parse.

answered Mar 5, 2011 at 1:18

bricklayer137's user avatar

Replace all characters Right Double Quotation Mark by characters Left Double Quotation Mark. They look similar, Excel will be confused and let the text unchanged.

answered Mar 21, 2013 at 14:23

Zdeno's user avatar

This solution will only help if your end output is HTML. This is the javascript solution so obviously you’ll need to redo this in C# or whichever language you’re working in:

base = base.replace(/""/gi, '&quot;');
base = base.replace(/'/gi, ''');

Apply this before you parse the CSV.

answered Jul 31, 2013 at 16:11

Soshmo's user avatar

SoshmoSoshmo

3082 silver badges7 bronze badges

Another approach would be to use the Unicode Character «DOUBLE PRIME»

http://www.fileformat.info/info/unicode/char/2033/index.htm

in your Excel data. To export from Excel into a UTF-8 or UTF-16 .csv you’ll have to provide a schema.ini with an appropriate CharacterSet property. Obviously, the tool you use to import the .csv into your database has to be Unicode aware too.

Depending on the DBMS a more direct way of data transfer (SELECT/INSERT … INTO … IN ) can be used, thereby eliminating the .csv entirely.

answered Mar 4, 2011 at 23:05

Ekkehard.Horner's user avatar

Ekkehard.HornerEkkehard.Horner

38.3k2 gold badges44 silver badges94 bronze badges

0

Понравилась статья? Поделить с друзьями:
  • Excel экспорт xml ненормированные данные
  • Excel экспорт csv надстройка
  • Excel экспоненциальный формат числа убрать
  • Excel экспонента в число
  • Excel экранирование кавычек в формуле