Формат csv файла


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

Недавно мы начали изучать особенности формата CSV (Comma-Separated Values – значения, разделённые запятой) и различные способы преобразования файла Excel в CSV. Сегодня мы займёмся обратным процессом – импортом CSV в Excel.

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

  • Как преобразовать CSV в Excel
  • Преобразование CSV в Excel: проблемы и решения

Как преобразовать CSV в Excel

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

Существует 3 способа преобразования CSV в Excel: Вы можете открыть файл с расширением .csv непосредственно в Excel, дважды кликнуть по файлу в Проводнике Windows либо импортировать CSV в Excel, как внешний источник данных. Далее я подробно расскажу об этих трёх способах и укажу преимущества и недостатки каждого из них.


  • Способ 1: Открываем файл CSV в Excel
  • Способ 2: Открываем файл CSV в Excel при помощи Проводника Windows
  • Способ 3: Импортируем CSV в Excel

Как открыть файл CSV в Excel

Даже если файл CSV создан в другой программе, Вы всегда можете открыть его как книгу Excel при помощи команды Open (Открыть).

Замечание: Открытие файла CSV в Excel не изменяет формат файла. Другими словами, файл CSV при этом не будет преобразован в файл Excel (формат .xls или .xlsx), он сохранит свой изначальный тип (.csv или .txt).

  1. Запустите Microsoft Excel, на вкладке Home (Главная) нажмите Open (Открыть).
  2. Появится диалоговое окно Open (Открытие документа), в выпадающем списке в нижнем правом углу выберите Text Files (Текстовые файлы).Экспортируем файл CSV в Excel
  3. Найдите в Проводнике Windows файл CSV и откройте его, дважды кликнув по нему.

Если Вы открываете файл CSV, то Excel откроет его сразу же вставив данные в новую книгу Excel. Если Вы открываете текстовый файл (.txt), то Excel запустит Мастер импорта текстов. Подробнее об этом читайте в разделе Импортируем CSV в Excel.

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

Если данные соответствуют хотя бы одному из следующих пунктов, то воспользуйтесь Мастером импорта текстов:

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

Чтобы заставить Excel запустить Мастер импорта текстов, Вы можете либо изменить расширение фала с .csv на .txt (прежде чем открывать файл), либо импортировать CSV в Excel так, как это будет описано далее.

Как открыть файл CSV при помощи Проводника Windows

Это самый быстрый способ открыть CSV в Excel. В Проводнике Windows дважды кликните по файлу .csv, и он откроется как новая книга Excel.

Однако, этот способ сработает только в том случае, если приложение Microsoft Excel установлено как программа, заданная по умолчанию, для открытия файлов .csv. Если это так, то Вы будете видеть знакомую иконку в Проводнике Windows рядом с именем файла.

Если Excel не является программой по умолчанию, вот как Вы можете это исправить:


  1. Кликните правой кнопкой мыши по любому файлу .csv в Проводнике Windows и в открывшемся контекстном меню нажмите Open with (Открыть с помощью) > Choose default program (Выбрать программу).
  2. Выберите Excel в списке рекомендованных программ, убедитесь, что стоит галочка для параметра Always use the selected program to open this kind of file (Всегда использовать выбранное приложение для такого типа файлов) и нажмите ОК.Экспортируем файл CSV в Excel

Как импортировать CSV в Excel

Этим способом Вы можете импортировать данные из файла .csv в существующий или в новый лист Excel. В отличие от предыдущих двух способов, он не просто открывает CSV в Excel, а именно конвертирует формат .csv в .xlsx (если Вы используете Excel 2007, 2010 или 2013) или .xls (в версиях Excel 2003 и более ранних).


  1. Откройте нужный лист Excel и кликните по ячейке, куда нужно импортировать данные из файла .csv или .txt.
  2. На вкладке Data (Данные) в разделе Get External Data (Получение внешних данных) кликните From Text (Из текста).Экспортируем файл CSV в Excel
  3. Найдите файл .csv, который требуется импортировать, выберите его и нажмите кнопку Import (Импорт), или просто дважды кликните по нужному CSV файлу.Экспортируем файл CSV в Excel
  4. Откроется Мастер импорта текстов, Вам нужно просто выполнить его шаги.

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

  1. Экспортируем файл CSV в Excel
    • Шаг 1. Выберите формат данных и номер строки, с которой нужно начинать импорт. Чаще всего выбирают Delimited (С разделителями) и со строки 1. Область предварительного просмотра в нижней части диалогового окна мастера показывает первые несколько записей импортируемого файла CSV.Экспортируем файл CSV в Excel

    • Шаг 2. На этом шаге нужно выбрать разделители и ограничитель строк. Delimiter (Разделитель) – это символ, который разделяет значения в файле CSV. Если в Вашем файле CSV использован какой-то символ, которого нет в предложенном списке, то поставьте галочку в варианте Other (Другой) и введите нужный символ. В нашем примере мы указали Tab (Знак табуляции) и Comma (Запятая), чтобы каждый товар (они разделены табуляцией) начинался с новой строки, а информация о товаре, например, ID и данные о продажах (они разделены запятыми), были помещены в разные ячейки.Text qualifier (Ограничитель строк) – это символ, в который заключены отдельные значения. Весь текст, заключённый между такими символами, например, «текст1, текст2», будет импортирован как одно значение, даже если в этом тексте содержится символ, указанный Вами как разделитель.В этом примере мы указали запятую как разделитель, и кавычки как ограничитель строк. В результате, все числа с разделителем десятичных разрядов (которым тоже в нашем случае служит запятая!) будут импортированы в одну ячейку, как это видно в области предпросмотра на рисунке ниже. Если мы не укажем кавычки как ограничитель строк, то все числа будут импортированы в разные ячейки.

      Экспортируем файл CSV в Excel

    • Шаг 3. Посмотрите в область Data preview (Образец разбора данных). Если Вы довольны тем, как выглядят Ваши данные, тогда жмите кнопку Finish (Готово).

Совет: Если в Вашем файле CSV используется последовательно более одной запятой или другого символа-разделителя, то поставьте галочку для параметра Treat consecutive delimiters as one (Считать последовательные разделители одним), чтобы избежать появления пустых ячеек.

  1. Выберите, куда вставлять импортированные данные, на существующий или на новый лист, и нажмите ОК, чтобы завершить импорт файла CSV в Excel.Экспортируем файл CSV в Excel

Совет: Вы можете нажать кнопку Properties (Свойства), чтобы настроить дополнительные параметры, такие как обновление, разметка и форматирование для импортированных данных.

  1. Экспортируем файл CSV в Excel

Замечание: Если Ваш файл CSV содержит численные данные или даты, Excel может преобразовать их с ошибками. Чтобы изменить формат импортированных данных, выберите столбец (столбцы), в которых возникли ошибки, кликните по ним правой кнопкой мыши и в контекстном меню выберите Format cells (Формат ячеек).

Преобразование CSV в Excel: проблемы и решения


Формат CSV используется уже более 30 лет, но несмотря на его длительную историю, он никогда не был официально задокументирован. Название CSV (Comma-Separated Values) возникло из-за использования запятых для разделения полей данных. Но это в теории. На самом деле, множество так называемых CSV-файлов используют другие символы для разделения данных, например:

  • Табуляция – TSV-файлы (tab-separated values)
  • Точка с запятой – SCSV-файлы (semicolon separated values)

Некоторые вариации файлов CSV разделяют поля данных одинарными или двойными кавычками, другие требуют маркер последовательности байтов из Юникода (BOM), например, UTF-8, для корректной интерпретации Юникода.

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

  • Файл CSV отображается в Excel неправильно (все данные помещены в первый столбец)
  • Первые нули потеряны при открытии файла CSV в Excel
  • Значения преобразованы в даты при импорте файла CSV в Excel

Файл CSV отображается в Excel неправильно

Признаки: Вы пытаетесь открыть файл CSV в Excel, и все данные попадают в первый столбец.

Причина: Корень проблемы кроется в том, что в Ваших региональных и языковых настройках Windows и в Вашем файле CSV установлены различные разделители. В Северной Америке и некоторых других странах разделителем полей списка по умолчанию является запятая. В то время как в Европейских странах запятая используется как разделитель десятичных разрядов, а разделителем полей списка является точка с запятой.

Решение: Есть несколько возможных решений этой проблемы. Вы можете быстро просмотреть приведённые ниже рекомендации и выбрать наиболее подходящие для конкретно Вашей задачи.

  1. Укажите правильный разделитель непосредственно в файле CSV. Откройте файл CSV в любом текстовом редакторе (подойдёт даже обычный блокнот) и в первой строке вставьте следующий текст. Обратите внимание, что это должна быть отдельная строка перед любыми другими данными:
    • Чтобы установить разделитель запятую: sep=,
    • Чтобы установить разделитель точку с запятой: sep=;

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


  2. Выберите нужный разделитель в Excel. В Excel 2013 или 2010 на вкладке Data (Данные) в разделе Data Tools (Работа с данными) нажмите Text To Columns (Текст по столбцам).Экспортируем файл CSV в ExcelКогда запустится Мастер распределения текста по столбцам, на первом шаге выберите формат данных Delimited (С разделителями) и нажмите Next (Далее). На втором шаге выберите нужный разделитель и нажмите Finish (Готово).

    Экспортируем файл CSV в Excel

  3. Измените расширение с .csv на .txt. Открытие файла .txt в Excel приведёт к запуску Мастера импорта текстов, и Вы сможете выбрать нужный разделитель, как это было описано в разделе Как импортировать CSV в Excel.
  4. Откройте файл CSV с точкой с запятой в качестве разделителя при помощи VBA. Вот пример кода VBA, который открывает в Excel файл CSV, где в качестве разделителя используется точка с запятой. Код был написан несколько лет назад для более ранних версий Excel (2000 и 2003), но если Вы достаточно хорошо знакомы с VBA, то у Вас не должно возникнуть проблем с его обновлением или изменением для работы с файлами CSV с запятой в качестве разделителя.

Замечание: Все показанные решения изменяют разделитель только для данного файла CSV. Если Вы хотите раз и навсегда изменить разделитель, заданный по умолчанию, то Вам подойдёт следующее решение.

  1. Изменяем разделители в настройках региональных стандартов. Нажмите кнопку Start (Пуск) и запустите Control Panel (Панель управления), кликните пункт Region and Language (Региональные стандарты) > Additional Settings (Дополнительные параметры). Откроется диалоговое окно Customize Format (Настройка формата), в котором Вам нужно выбрать точку (.) для параметра Decimal symbol (Разделитель целой и дробной части), и установить запятую (,) для параметра List separator (Разделитель элементов списка).

Примечание переводчика: Данные настройки приведены для английской локализации Excel (и ряда других стран). Для русской локализации привычнее будет использовать запятую в качестве разделителя целой и дробной части и точку с запятой для разделения элементов списка.

  1. Экспортируем файл CSV в ExcelДважды нажмите ОК, чтобы закрыть диалоговые окна – всё готово! С этого момента Microsoft Excel будет открывать и отображать все файлы CSV (с разделителем запятой) корректно.

Замечание: Установка в Панели управления Windows символов-разделителей целой и дробной части и элементов списка изменит настройки символов, заданные по умолчанию, для всех программ на Вашем компьютере, а не только в Microsoft Excel.

Первые нули теряются при открытии файла CSV в Excel

Признаки: Ваш файл CSV содержит значения с первыми нулями, и эти нули теряются при открытии файла CSV в Excel.

Причина: По умолчанию, Microsoft Excel отображает файл CSV в формате General (Общий), в котором первые нули отсекаются.

Решение: Вместо того, чтобы открывать файл .csv в Excel, запустите, как мы это делали ранее, Мастер импорта текстов, чтобы конвертировать файл CSV в Excel.

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

Экспортируем файл CSV в Excel

Excel преобразует некоторые значения в даты при открытии файла CSV

Признаки: Некоторые значения в Вашем файле CSV похожи на даты, и Excel автоматически преобразует такие значения из текстового формата в формат даты.

Причина: Как упоминалось выше, Excel открывает файл CSV в формате General (Общий), при этом значения, похожие на даты, преобразует из текстового формата в формат даты. Например, если Вы открываете файл CSV, содержащий логины пользователей, то запись «апр23» будет преобразована в дату.

Решение: Преобразуйте файл CSV в Excel при помощи Мастера импорта текстов. На шаге 3 мастера выберите столбцы с записями, похожими на даты, и измените формат столбца на текстовый.

Экспортируем файл CSV в Excel

Если Вам нужно достичь противоположного результата, то есть в определённом столбце преобразовать значения в даты, тогда установите формат Date (Дата) и выберите подходящий формат даты в выпадающем списке.

Как импортировать в Excel несколько файлов CSV

Думаю, Вы знаете, что Microsoft Excel позволяет открывать несколько файлов CSV при помощи команды Open (Открыть).

  1. На вкладке File (Файл) нажмите Open (Открыть) и в выпадающем списке в нижней правой части диалогового окна выберите Text Files (Текстовые файлы).
  2. Чтобы выделить несколько файлов подряд, кликните по первому файлу, затем нажав и удерживая клавишу Shift, кликните по крайнему файл. Оба эти файла, а также все, что находятся между ними, будут выделены.Чтобы выделить файлы, расположенные не подряд, удерживайте клавишу Ctrl и щелкайте по каждому файлу .csv, который хотите открыть.
  3. Когда выделены все нужные файлы CSV, нажмите кнопку Open (Открыть).Экспортируем файл CSV в Excel

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

Надеюсь, теперь Вы легко сможете преобразовать любой файл CSV в Excel. Если у Вас возникают какие-либо вопросы или сложности, смело пишите мне в комментариях. И благодарю за терпение каждого, кто осилил чтение этой длинной статьи до самого конца! :)

office-guru.ru

В данной статье рассмотрим одну из самых важных функций платформы интернет-магазина — импорт данных каталога через файл формата CSV (Microsoft Excel)

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

Вы можете сразу перейти в нужный раздел:

  • Описание полей в файле CSV
  • Импорт файла CSV

 

Описание полей в файле CSV

 

Описание полей в файле CSV

Описание полей в файле CSV
Рисунок 1.

1. sku — артикул товара, обязательное поле для заполнения.

Артикул является уникальным идентификатором товара, по артикулу происходит обновление всех остальных полей товара, присутствие столбца “Артикул” в файле csv обязательно. Может состоять из букв, цифр, тире “-” и нижнего слэша “_ “. Всё без кавычек.

2. name — наименование товара.

3. paramsynonym — URL синоним товара.

4. category — категория товара, вложенность указывается через ">>".

К примеру [Техника >> Игровые приставки >> Аксессуары для игровых приставок].

Если товар находится в нескольких категориях, категории указываются через "," к примеру [Техника >> Игровые приставки >> Xbox 360],[Техника >> Игровые приставки >> Аксессуары для игровых приставок].

5. enabled — активность товара. Значение "+" означает что товар активен, значение "-" товар не активен. Всё без кавычек.

6. currency — базовая валюта товара, т.е. валюта в которой указывается цена товара в панели администрирования, к примеру если Вы закупаете товар в долларах а продаете в рублях, то для товара в панели администрирования валюта будет USD и цена будет указана в долларах, соответственно в файле в данном поле нужно указать USD. С описанием настройки курса валют, в соответствии с котором будет осуществляться пересчет в рубли в клиентской части можно ознакомиться в инструкции: "Валюты"

7. price — цена товара.

8. purchaseprice — закупочная цена

9. amount — количество товара

10. sku:size:color:price:purchaseprice:amount — Данное поле используется для назначения товару связку "цвет-размер-цена-количество"

Разберём подробнее. В формуле используется:

Sku — артикул.

size — например M, S — это размеры товара.

color — цвет товара.

price — цена товара.

purchaseprice — закупочная цена.

amount — количество.

Рассмотрим пример, т.е. если:

  • A968 — артикул,
  • S — размер товара,
  • Черный — цвет товара,
  • 3599 — цена товара,
  • 1200 — закупочная цена,
  • 10 — количество,

то запись будет выглядеть как [A968:S:Черный:3599:1200:10].

11. unit — единица измерения товара.

12. discount — cкидка на товар в процентах.

 13. discountamount — скидка на товар в валюте (в рублях, долларах, евро, и т.д.)

В зависимости от валюты 

14. shippingprice — цена доставки единицы товара.

Заполняется, если настраивается способ доставки “Доставка в зависимости от стоимости доставки товара”.

15. weight — вес товара. Вес необходимо указывать в кг, в ячейке единицу измерения прописывать не нужно.

16. size — размер товара (Ш х В х Д), формат заполнения: 0 x 0 x 0. Все размеры указываются в мм, в ячейке единицу измерения прописывать не нужно.

17. briefdescription — краткое описание товара.

Отображается в режиме просмотра каталога "Список" (рис. 2).

Отображается в режиме просмотра каталога "Список"
Рисунок 2.

18. description — полное описание товара.

Отображается в карточке товара на вкладке "Описание" (рис. 3).

Отображается в карточке товара на вкладке "Описание"
Рисунок 3.

19. title —  title для товара. Относится к SEO информации о товаре.

20. metakeywords — Meta KeyWords для товара. Относится к SEO информации о товаре.

21. metadescription — MetaDescription  для товара. Относится к SEO информации о товаре.

22. h1 — H1 для товара. Относится к SEO информации о товаре.

23. photos — фото для товара. Указывается фото или прямая ссылка на изображение через знак разделителя, который указан в настройках импорта в поле "Разделитель между свойствами" (рис. 3), т.е., к примеру, если указана точка с запятой, то в столбце прописываем так:

Если запятая, то так:

Если в столбце указывается фото, то при импорте необходимо все указанные фото подгрузить zip архивом в поле "Путь к zip архиву с фото" (рис. 4).

 

Важно!

В zip архиве не должно быть внутренних папок только фотографии. Формирование такого zip архива реализуется путем выделения всех фото командой CTRL+A и добавлением выделенных фото в архив.

Обратите внимание

Если указывается ссылка на фото, то архив грузить не требуется, укажите только через соответствующий разделитель ссылки на фото.

К примеру:

Если в столбце указывается фото, то при импорте необходимо все указанные фото подгрузить zip архивом в поле "Путь к zip архиву с фото"
Рисунок 4.

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

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

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

Пример:

Обратите внимание

Цвета должны быть предварительно созданы в “Справочнике цветов” и заданы для модификации товара. Подробнее здесь

24. videos — ссылка на видео. Указывается прямая ссылка на видео.

Пример: https://www.youtube.com/watch?v=kLI4tc88-6s

25. markers — маркеры для товаров (новинки, хиты, скидки):

Буква b — bestseller — означает маркер "Хит продаж".

Буква r — recommender — означает маркер "Рекомендованный".

Буква n — new — означает маркер "Новинка".

Буква s — sale- означает маркер "Распродажа".

26. properties — свойства товара.

Сначала прописываем название свойства, далее разделитель, который указан в настройках импорта в поле "Разделитель между свойствами и значением" (рис. 6), далее значение свойства, затем разделитель, указанный в настройках импорта в поле "Разделитель между свойствами" (рис. 6), и далее следующее свойство по аналогии.

Формат:

К примеру, если в настройках указаны разделители как на рисунке 6, то в файле должно быть прописано так:

Разделители
Рисунок 6.

27. producer — производитель товара.

28. preorder — возможность оформления товара под заказ, при наличии 0.
Значение "+" означает, что товар возможно оформить под заказ при наличии 0, значение "-" означает, что товар невозможно оформить под заказ при наличии 0. Всё без кавычек.

29. sales_notes — тег sales_notes для файла Яндекс.Маркет.
(Подробнее с описанием данного тега можно ознакомиться здесь).

30. related sku — похожие товары. Необходимо указать артикулы товаров через разделитель указанный в настройках импорта в поле "Разделитель между свойствами" (рис. 6), указанные товары будут включены в блок "С этим товаром покупают".

31. alternative sku — альтернативные товары. Необходимо указать артикулы товаров через разделитель, указанный в настройках импорта в поле "Разделитель между свойствами" (рис. 6), указанные товары будут включены в блок "Похожие товары".

32. custom options — дополнительные опции товара (к примеру, + стоимость установки 200 руб.).

Формат:

Где:

— "Тип доп.опции" может быть

  • Выпадающий список — в файле прописываем DropDownList
  • Радио кнопки — в файле прописываем RadioButton
  • Галочка — в файле прописываем CheckBox
  • Однострочное текстовое поле — в файле прописываем TextBoxSingleLine
  • Многострочное текстовое поле — в файле прописываем TextBoxMultiLine

— "Обязательность доп. опции" — возможные значения

  • 1 — Обязательна
  • 0 — Необязательна

— "Тип"- возможные значения

  • Fixed — фиксированная цена
  • Percent — процентная

К примеру, доп. опция "Флеш карт", как на рисунок 7 будет выглядеть в файле так:

 

33. gtin — глобальный номер товарной продукции (GTIN) является уникальным и международным идентификатором продукта "Где найти уникальный идентификатор товара?", "Уникальные идентификаторы товаров", необходим для выгрузки данных в Merchant Center.

Является необязательным полем, заполняется для каждого товара в отдельности.

34. googleproductcategory — категория товаров Google Определение категории, Merchant Center, позволяет продавцам публиковать данные о своих магазинах и товарах в Google Покупках и других сервисах Google. Его наличие определяет категорию товара в соответствии с Google классификацией товаров и позволяет анализировать, по каким запросам необходимо показывать Ваши объявления.

Является обязательным полем для заполнения, при размещении товаров на Merchant Center заполняется для каждого товара отдельно, или если для товара не заполнено, то берется из общих настроек Merchant Center (рис. 7).

Является обязательным полем для заполнения, при размещении товаров на Merchant Center заполняется для каждого товара отдельно, или если для товара не заполнено, то берется из общих настроек Merchant Center
Рисунок 7.

35. yandexproductcategory — категория товаров Яндекс.Маркет ("Как предложению попасть в нужную категорию?"), позволяет продавцам публиковать данные о своих магазинах и товарах в Яндекс.Маркет. Его наличие определяет категорию товара в соответствии с Яндекс.Маркет классификацией товаров и позволяет анализировать, по каким запросам необходимо показывать Ваши объявления.

36. yandextypeprefix — элемент, в котором передается тип или категория товара при выгрузке товаров в формате YML на Яндекс.Маркет ("Название предложения").

37. yandexmodel — элемент, в котором передается модель товара и важные параметры при выгрузке товаров в формате YML на Яндекс.Маркет ("Название предложения").

38. adult — относится ли данный товар к товарам для взрослых. Необходим для выгрузки данных в Яндекс.Маркет, является обязательным полем только для магазинов "Магазины для взрослых" ("Adult"). Для остальных магазинов данное поле не заполняется.

Формат заполнения: Значение "+" означает, что товар относится к товарам для взрослых, значение "-" означает, что товар не относится к товарам для взрослых. Всё без кавычек.

39. manufacturer warranty — элемент предназначен для отметки товаров, имеющих официальную гарантию производителя. Необязательный элемент, используется при выгрузке данных в Яндекс.Маркет. Формат заполнения: + да, — нет.

40. tags — теги метки, подробнее можно ознакомиться здесь.

41. gifts — указываются артикулы товаров, которые идут в подарок при покупке текущего товара. Необходимо указать артикулы товаров через разделитель, указанный в настройках импорта в поле "Разделитель между свойствами" (рис. 12).

42. minamount — минимальное количество товара при заказе.

43. maxamount — максимальное количество товара при заказе.

44. multiplicity – кратность товара. 

Пример: перчатки для работы. Они могут продаваться по 1 шт., но по факту их продают всегда по 2 шт. Значит, кратность данного товара равна 2. При увеличении количества перчаток в заказе их будет 4, 6 и т.д. Увеличение происходит на кратность товара.

45. productsets — указываются артикулы товаров, идущие в комплекте с этим товаром. Необходимо указать артикулы товаров через разделитель, указанный в настройках импорта в поле "Разделитель между свойствами".

46. cbid — ставка для карточки модели (рис.7) ("Стоимость размещения").

47. fee — размер комиссии на товарное предложение, участвующее в программе "Заказ на Маркете" (рис.7).("Стоимость размещения").

48. barcode — штрих-код. Могут быть указаны любые цифры и буквы.

49. Колонка из модуля “Дополнительные вкладки в карточке товара”. Если Вы пользуетесь модулем "Дополнительные вкладки", то при экспорте будет выгружаться колонка с названием вкладки карточки товара. Таким образом у каждого товара можно заполнить соответствующую ему информацию из данной вкладки.
Например, у нас заведена вкладка в карточке товара с названием “Тест” (рис. 8).

Например, у нас заведена вкладка в карточке товара с названием “Тест”
Рисунок 8.

Тогда при экспорте каталога в CSV формате дополнительная вкладка карточки товара будет называться producttab_тест и выглядеть так, как на рисунке 9.

Тогда при экспорте каталога в CSV формате дополнительная вкладка карточки товара будет называться producttab_тест и выглядеть так
Рисунок 9.

50. Колонка sorting. Cортировка товаров внутри категории — активация данной опции позволит загрузить сортировку товара в той категории, в которой он находится. Сортировка указывать в столбце sorting, порядок сортировки указывается в том же порядке, в котором указаны категории в колонке category.

51. Колонка tax. Параметр указывает значение налога в карточке товара.
Возможные значения:
— Без НДС;
— НДС 0%;
— НДС 10%;
— НДС 18%.

Подробнее о налогах здесь.

52. Колонка yandexdeliverydays. Укажите число дней или промежуток, в который товар может доставлен покупателю. Например, 2 или 1-3. Не используйте буквы или иные символы, кроме дефиса.

Этот параметр выгружается в Яндекс.Маркет как атрибут 'days' для элемента 'delivery-options'. Он указывает количество дней, за которое доставлен данный товар может быть доставлен покупателю.

Если поле оставить пустым, в атрибут 'days' элемента 'delivery-options' будет выгружаться срок доставки, указанный в общих настройках выгрузки для Яндекс.Маркета.

 

Всё готово.

 

Импорт файла CSV

Если у Вас имеется отредактированный каталог в формате CSV, то Вы можете загрузить его в интернет-магазин.

Для этого перейдите в меню “Каталог”-”Импорт данных”-”Импорт товаров” (рис.10).

Импорт файла CSV
Рисунок 10. Импорт товаров.

Рассмотрим настройки импорта более подробно (рис. 11).

Рассмотрим настройки импорта более подробно
Рисунок 11. Настройки импорта.

Разделитель между колонками — разделитель, который указан между столбцами или колонками в файле CSV (рис. 12, рис. 13, п.1).

Разделитель между столбцами.
Рисунок 12. Разделитель между столбцами.

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

Кодировка файла — это кодировка, в которой загружается каталог. Обычные кодировки, которые воспринимаются Microsoft Excel, это кодировки UTF-8 и Windows-1251 (рис. 13, п.2).

Разделитель между свойствами — символ, который  должен указываться в файле CSV при перечислении свойств (пример рассмотрен чуть ниже) (рис 13, п.3).

Разделитель между свойством и значением — символ, который должен указываться в файле CSV при разделении свойства и его значения (рис 13, п.4).

Сначала должно быть прописано название свойства, далее разделитель, который указан в настройках импорта в поле "Разделитель между свойствами и значением" (рис 13, п.4), далее значение свойства, затем разделитель, указанный в настройках импорта в поле "Разделитель между свойствами" (рис. 13, п.3), и далее следующее свойство по аналогии. К примеру, если в настройках указаны разделители как на рисунке 13, то в файле должно быть прописано так:

"Объем памяти:6Gb;Тип памяти:DDR3".

Настройки импорта.
Рисунок 13. Настройки импорта.

Первая строка файла содержит заголовки — данная опция означает, что если в импортируемом файле CSV будет верхняя строка с заголовками колонок (рис. 14), то она будет использована соответствующем образом (рис. 14, рис. 13, п.5).

Файл импорта.
Рисунок 14. Файл импорта.

Если при импорте заголовки колонок соответствуют полям, принятым в платформе AdvantShop, то при импорте они распознаются автоматически (рис. 15).

Автоматическое распознание полей импорта.
Рисунок 15. Автоматическое распознание полей импорта.

Если заголовки колонок отличаются, то соответствие полям можно расставить вручную. (Рис. 16).

Автоматическое распознание полей импорта.
Рисунок 16. Автоматическое распознание полей импорта.

Если же в файле CSV не имеется заголовков колонок, то при импорте деактивируйте опцию “Первая строка файла содержит заголовки”.

Тогда сопоставление столбцов нужно будет произвести вручную (рис. 17).

Настройка полей импорта.
Рисунок 17. Настройка полей импорта.

Деактивировать товары, которых нет в прайсе — при активации данной опции все товары, которые есть в магазине, если их нет в импортируемом CSV-файле, будут деактивированы (рис 13, п.6).

.Csv файл каталога товаров — через кнопку добавить Вы можете выбрать импортируемый CSV файл с вашего локального компьютера.

.Zip архив с фотографиями товаров — загрузка архива с фотографиями к CSV файлу, если у Вас в CSV файле указаны названия фотографий с расширением в колонке photos. С инструкцией подготовки архива фотографий можно ознакомиться на странице

На этом рассмотрение функционала импорта CSV файла закончено. Попробуйте выгрузить/загрузить каталог на персональной пробной версии интернет-магазина.

 

www.advantshop.net

Импорт товаров в формате CSV

От автора: приветствую Вас дорогой друг. Интернет магазины в данное время очень популярны, а значит достаточно часто веб-мастера, занимаются разработкой сайтов именно этого типа. При этом любой магазин, конечно же, предполагает публикацию множества различных товаров, добавить которые вручную порой становится непосильной задачей. Потому как ее выполнение, требует огромного количества времени.

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

Для всех современных CMS, которые используются для создания магазинов, написаны дополнительные модули или расширения по импорту/экспорту товаров, которые могут быть как встроенными, так и поставляться отдельно на платной или бесплатной основе. Но для самописного движка интернет магазина вышеуказанный функционал придется описывать самостоятельно. Поэтому в данном уроке мы с Вами напишем небольшое веб-приложение, которое реализует импорт товаров CSV.

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

Итак, в данном уроке мы будем рассматривать импорт товаров в формате CSV, то есть вся информация о добавляемых товарах будет содержаться в специальном файле с расширением .csv.

Формат CSV – это простой текстовый формат, предназначенный для представления различных табличных данных. То есть благодаря ему, сложная таблица может быть сохранена в виде простого текста, с специфическим форматированием. CSV – это аббревиатура, образованная английскими словами — Comma-Separated Values — значения, разделённые запятыми. Синтаксис указанного формата предполагает, что каждая строка файла – это одна строка таблицы. Данные, которые хранятся в колонках, разделены друг от друга знаком запятой (,).

Но согласитесь, что запятая – это символ, который конечно же может встречаться в тексте, в качестве знака пунктуации, поэтому на практике, часто используют в качестве разделителей другие знаки, к примеру – точка с запятой (;), что собственно мы с Вами и сделаем. В этом случае, правильно бы назвать формат – DSV (delimiter-separated values — значения разделённые разделителем), но на сегодняшний день под понятием CSV – понимают набор определенных текстовых значений разделенных определенным разделителем.

Как было сказано выше, создавать скрипт мы будем с чистого листа и по сути реализуем считывание данных документа CSV и запись полученной информации в таблицу “products” базы данных.

Структура таблицы следующая:

Импорт товаров в формате CSV

Формат CSV очень легко получить, используя в качестве исходной таблицы – таблицу Microsoft Excel. Конечно, Вы можете спросить – зачем преобразовывать таблицу в специальный формат, если можно осуществить импорт, читая содержимое каждой ячейки таблицы. И по большому счету — Да, мы можем это сделать. Но при этом придется использовать дополнительную библиотеку по работе с документами Excel. В свою очередь формат CSV – простой текстовый формат, который легко и быстро читается языком PHP, без каких либо дополнительных инструментов.

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

Импорт товаров в формате CSV

Как Вы видите каждая строка таблицы – это отдельный товар. При этом в колонках, располагается информация, которая должна быть сохранена в соответствующие поля таблицы “products”.

Теперь давайте преобразуем данную таблицу в формат CSV, для этого переходим в меню “Файл”, далее выбираем пункт “Сохранить как”.

Импорт товаров в формате CSV

Затем при сохранении выбираем формат CSV (разделители-запятые).

Импорт товаров в формате CSV

Обратите внимание, что файл будет сохранен в кодировке Windows-1251, поэтому для дальнейшей работы необходимо сменить кодировку на UTF-8. Теперь можно приступать к созданию функционала будущего скрипта.

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

Поэтому текстовая версия завершена, а значит жду Вас в видео. Всего Вам доброго и удачного кодирования!!!

Формат csv файла

webformyself.com

Формат CSV

Формат CSV ― это текстовый формат, предназначенный для представления табличных данных. Первая строка содержит названия столбцов, а следующие строки ― сами данные. Содержимое столбцов отделяется друг от друга запятой.

Данные в файле должны быть в кодировке UTF-8.

Скачать пример CSV-файла

Для просмотра примера в LibreOffice необходимо сделать импорт текста. При этом выберите кодировку UTF-8, разделитель ― «запятая», разделитель текста ― « «(двойные кавычки)».

Для просмотра примера в Excel сохраненный файл откройте через меню Данные → Получение внешних данных → Из текста. Выберите кодировку UTF-8, разделитель «запятая», ограничитель строк «»(двойные кавычки)».

Описание элементов

Подготовка файла

Чтобы настроить автоматическое ежедневное обновление данных о ваших филиалах:

  1. Подготовьте файл в формате CSV. Данные должны быть в кодировке UTF-8.

  2. Выложите файл на свой сайт по обновляемой ссылке.

    Данные должны быть доступны по протоколу FTP, HTTP или HTTPS.

Загрузка файла в интерфейсе

На странице сети в Загрузка филиалов файлом нажмите кнопку Добавить. В открывшемся окне укажите ссылку на подготовленный файл, выберите тип «csv» и нажмите Проверить. Проверка файла может занять несколько минут.

Если проверка прошла успешно, кнопка Результаты проверки будет отмечена зеленым. Нажмите ее и в открывшемся окне проверьте изменения в филиалах. На карте может быть показано до 50 филиалов с изменениями. Нажмите Сохранить. Данные из файла будут загружены в базу Справочника. При большом объеме данных загрузка может занять от нескольких часов до суток.

Если в результате проверки будут обнаружены ошибки, кнопка Результаты проверки будет отмечена красным. Исправьте ошибки и снова отправьте файл на проверку.

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

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

Для однократного обновления данных сохраните файл в формате CSV или XSLX и передайте с помощью формы. Укажите в сообщении актуальный электронный адрес и телефон вашей организации. Если у нас возникнут вопросы по загруженному файлу, мы свяжемся с вами.

Новые данные появятся на Яндекс.Картах в течение семи дней после загрузки правильно оформленного файла.

Если у вас остались вопросы, напишите нам с помощью формы.

yandex.ru

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-ом не воспринимается вообще.

Формат csv файла

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

Формат csv файла

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

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

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

Формат csv файла

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

Резюмирую.

Чтобы сгенерировать такой 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

habr.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.