CSV в xls как сделать автоматом

Автор ink-service, 18 июня 2021, 14:44

0 Пользователи и 1 гость просматривают эту тему.

ink-service

Доброго дня все. помогите решить задачку.
Есть файл csv нужно его сохранить как .xls
Ручками это делаю,  открываю в Excel и сохраняю как.. - все нормально, а нужно его преобразовывать без моего участия, макросом каким-то через планировщик.
Нужен для программы которая понимает только файл .xls.  и Сейчас приходится каждый день проделывать ручками пересохраняя его.(((

sokol92

Выложите небольшой фрагмент своего .csv файла и укажите версию LO и операционную систему, в которой работаете.
Владимир.

economist

Совсем без участия не получится. Когда открывает Excel он делает кучу работы (всю ее записывает макрорекордер, кстати). Нужно описать всю задачу: сколько CSV-файлов, в одной ли папке они все появляются, что в них разделитель полей, кодировка, заголовки в какой строке, десятичная , или .  Быстрее всего задача решается и работает на языке Python из LibreOffice c библиотекой Pandas, о которой я писал тут:  https://forumooo.ru/index.php/topic,8696.0.html Быстрее ничего нет на протяжении уже 9 лет.

Файл csv2xls.py - поставить в Планировщик.

import pandas as pd
df=pd.read_csv('C:\ваш.csv', sep=';')
df.to_excel('C:\ваш.xlsx')


Особый цимус в том что можно добавить пару даже не строк, а слов(!) в эти три строки - и сделать мгновенную фильтрацию, отбор, вычисление и тд прочее, что делается потом ручками в Excel (а делается наверняка немало).

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

#3
Цитата: ink-service от 18 июня 2021, 14:44макросом каким-то через планировщик

Это решается параметрами командной строки, с учётом параметров фильтра CSV. Если бы Вы выложили информацию, которую Владимир запрашивал в ответе #1, то уже давно получили бы результат. Но в любом случае, команда будет выглядеть как-то так:

soffice --infilter=csv:59,34,0,0,1/2/2/2/3/2/4/2,0,true,false,false --convert-to xls --outdir output_dir path/to/file.csv

Основной вопрос - в строке 59,34,0,0,1/2/2/2/3/2/4/2,0,true,false,false, которая описывает, как надо импортировать CSV - и разделители, и кодировку файла, и локаль, и - при необходимости - формат столбцов. Именно для этого и нужны были дополнительные сведения - но Вы и сами можете подобрать, используя ссылку на документацию выше.

Да, кстати, с учётом неизвестной программы, которой Вы пользуетесь, команду может быть необходимо изменить - AOO требует аргументов с одним "-": не --infilter, а -infilter, не --convert-to, а -convert-to, не --outdir, а -outdir.
С уважением,
Михаил Каганский

mikekaganski

И помните, что XLS ограничен 256 столбцами и 65536 строками.
С уважением,
Михаил Каганский

sokol92

Здравствуйте, Михаил! Большое спасибо за разъяснения.
Вопрос по документации. В версии LO 7.2 ( :) ) появился список имен фильтров для параметра командной строки --infilter. Имени "csv" там нет. Где истина?
Владимир.

mikekaganski

#6
Цитата: sokol92 от 19 июня 2021, 14:14Имени "csv" там нет. Где истина?

:) Зато там есть Text - txt - csv (StarCalc), который не изменился со времён OOo (см. ссылку на параметры фильтра выше). Это корректное имя фильтра. Просто можно использовать расширение вместо имени (недокументированная возможность).

Кстати, ссылка из --infilter появилась в рамках tdf#98153.
С уважением,
Михаил Каганский

sokol92

Владимир.

ink-service

Извиняюсь пропал на выходных)).
во вложении архив  в нем файл 123.csv -что обрабатываем.. разделитель ;
и файлик 456.xls
LO последней версии, обновлен.
сейчас делаю так, Прав клав. мыши на файле 123.csv  - открыть с помощью  в LO calc
при открытии он естественно спросит о разделителях, там ставлю галочку на против ;  и открываем.  потом сохранить как- и в формате xls сохраняю.
все.. 

mikekaganski

А это нормально, что Ваш результирующий XLS получается с числовым столбцом E (SCOD)? Не знаю как насчёт столбцов A и B (ID и IDCTG_GROUP), но уж столбцы C-F, на мой взгляд, требуют фиксированного "текстового" формата при импорте?
С уважением,
Михаил Каганский

ink-service

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

mikekaganski

#11
soffice --infilter=csv:59,34,76,2,1/2/2/2/3/2/4/2/5/2/6/2,1049 --convert-to xls --outdir output_dir path/to/123.csv

Разделитель полей - точка с запятой ; (код 59); разделитель строк - двойные кавычки " (код 34); кодировка файла - UTF-8 (код 76); начинать со строки 2; первые шесть столбцов - текстовые; локаль ("язык") - русская (Россия).
С уважением,
Михаил Каганский

mikekaganski

Цитата: ink-service от 21 июня 2021, 12:38
Первая строка в XLS файле , это наименование столбцов получились...

Я не про первую строку, а про пятый столбец. Там у Вас числа типа 2,00001E+12, и это неправильно. Будут у Вас коды длиной больше 12 символов (16 и больше), или, скажем, начальные нули в коде - и Вы получите проблему при импорте.
С уважением,
Михаил Каганский

economist

#13
Если интересен вариант с Python, то рабочий код для вашего примера, с решением проблемы с кодом в поле SCODE такой:

Файл csv2xls.py - поставить в Планировщик.

import pandas as pd
df=pd.read_csv('D:/123.csv', sep=';', decimal=',')
df.SCOD = df.SCOD.astype('str')
df.to_excel('D:/456.xlsx')
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ink-service

Цитата: mikekaganski от 21 июня 2021, 12:48Там у Вас числа типа 2,00001E+12, и это неправильно
хм..  а у меня такое не отображается. сразу все нормально показывается , вообще это ШтрихКод товара, по нему я соответствие делаю потом.

Цитата: mikekaganski от 21 июня 2021, 12:46Код:
soffice --infilter=csv:59,34,76,2,1/2/2/2/3/2/4/2/5/2/6/2,1049 --convert-to xls --outdir output_dir path/to/123.csv
а этот код куда мне теперь? как его запускать? через батник?


Цитата: economist от 21 июня 2021, 13:24Файл csv2xls.py - поставить в Планировщик.
тот же вопрос)... как запустить проверить?