Quad.Wiki

Конвертация CSV в XLSX или XLSX в CSV

CSV → XLSX

 

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

 

 

1. Скачайте и установите программу https://ru.libreoffice.org/

 

2. Добавьте действие в Quad.Magic “Выполнить файл и дождаться завершения” в группе действий обновления ПЕРЕД действием импорта обновленных прайсов.

 

3. В Настройка 1 действия укажите путь, куда будет сохранен исполняемый скрипт, который преобразует файл. Можно указать путь X:\Quad Solutions\files\csvtoxlsx.bat , где X:\Quad Solutions - путь к папке с программой на вашем компьютере

 

4. В Настройка 4 добавить следующий текст скрипта:

set CSVPath="f:\Quad Solutions\files\2_ price\param.csv" set OutPath="f:\Quad Solutions\files\2_ price" "C:\Program Files\LibreOffice\program\soffice.exe" ^ --headless --infilter="csv:59,34,UTF8" ^ --convert-to xlsx:"Calc MS Excel 2007 XML" ^ --outdir %OutPath% %CSVPath%

в первой строке замените текст f:\Quad Solutions\files\2_ price\param.csv на путь к вашему файлу CSV, включая имя файла

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

 

вместо f:\Quad Solutions\files\2_ price укажите путь к папке, куда будет сохранен файл XLSX, т.е. файл результатов

путь папки результатов обязательно должен быть без обратного слеша на конце (\)

файл результатов сохраняется с тем же именем, что и входной файл CSV, только с расширением XLSX - например файл params.csv сохранится с названием params.xlsx, указать другое название нельзя

 

C:\Program Files\LibreOffice\program\soffice.exe - в третьей строке проверьте, что путь к файлу soffice.exe правильный. Это должен быть путь в папку, куда вы установили Libre Office.

 

--infilter="csv:59,34,UTF8" - четвертая строка содержит настройки входного файла CSV

первый параметр 59 - значит что разделитель в файле “точка с запятой”. если у вас разделитель “запятая”, то нужно заменить это число на 44

знак Tab (табуляция): 09 (если не получится, то попробуйте просто 9)

коды других символов можно посмотреть в этой таблице

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

третий параметр UTF8 - формат файла. Если у вас обычный файл с русскими буквами, то нужно поменять на WIN1251

 

5. Запустите задание, если все ок, то вы увидите такое окно

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

 

XLSX → CSV

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

Например, когда при импорте прайса выскакивает такое окно

 

Для этого вам так же нужно установить Libre Office.

1. Сделайте первые 3 пункта из этой инструкции, указанные в разделе CSV → XLSX.

2. В Настройка 4 добавить следующий текст скрипта:

set CSVPath="f:\Quad Solutions\files\2_ price\tehnoprofile.xlsx" set OutPath="f:\Quad Solutions\files\2_ price" "C:\Program Files\LibreOffice\program\soffice.exe" ^ --headless --convert-to csv:"Text - txt - csv (StarCalc)":59,34,UTF8,1,,0,false,true,false,false,false,-1 %CSVPath% ^ --outdir %OutPath%

 

В первой строке указывается путь к преобразовываемому файлу

Во второй строке - папка, куда будет сохранен результат (папку указывать без слеша на конце)

 

В результате работы этого скрипта будет сформированы файлы в формате CSV (кодировка UTF-8), для каждого листа свой отдельный файл (в названии файла будет указано название листа). Если в прайсе только 1 лист, то сформирован будет только 1 файл CSV.

 

 

Пример исходного файла

Результат:

Обратите внимание, что результат сохраняется в кодировке UTF-8 и полученный файл нужно загружать с использованием макроса

Или же сделать обратное преобразование из CSV в XLSX по этой инструкции в п. CSV → XLSX