LINUX.ORG.RU

Автоматизация LibreOffice

 , , ,


0

2

Имеется большой текст с несложным форматированием, разбитый на 100 ~1000 глав. Нужно каждую главу сохранить в отдельный файл docx (формат MS Office). В текст будут вноситься правки. Нужно будет сохранять исправленные главы.

Можно ли как-то автоматизировать это разбиение на много мелких файлов?

★★★★★

Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от Entmatix

Спасибо, никогда бы не подумал искать это в «отправить».

Но это создаёт документы ODT, а мне нужны docx. Как-то можно сменить формат? Или есть конвертер командной строки?

В оглавлении все части по именам файлов с номерами. Можно ли автоматически сменить, например, на первую строку с текстом?

При каждом открытии составного документа предлагает сохранить изменённый шаблон «», даже если я его уже сохранял в прошлый раз. В чём проблема?

Несвязанная проблема: при экспорте HTML в ODT выдаёт ошибку Error saving the document …. : Wrong parameter. The operation was started under an invalid parameter. Из-за чего это может быть?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Но это создаёт документы ODT, а мне нужны docx. Как-то можно сменить формат? Или есть конвертер командной строки?

soffice --headless --convert-to docx <filename> вроде, как-то так было можно. find/exec -ом по каталогу и должно работать.

upd. Хотя, надо в man уточнить, там должны маски поддерживаться. Т.е. вместо <filename> можно просто *.odt и должны все odt в каталоге конвертироваться.

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 2)
Ответ на: комментарий от question4

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

Entmatix
()
Ответ на: комментарий от Kompilainenn

Есть конвертер в том же меню Файл

Для составного документа тип DOCX отсутствует и в Save As, и в Export. Как его включить?

Открывать и конвертировать по одному — не вариант. Глав оказалось не 100, а 933.

Заодно ещё вопрос по конвертированию из GUI: загружаю HTML, пытаюсь Save As как ODT — такого пункта в списке нет. Пытаюсь Export, получаю ошибку Error saving the document ... : Wrong parameter. The operation was started under an invalid parameter. В чём проблема?

Но сконвертировать мне как-то удалось. 2 раза. Но я опять не помню, что я сделал, отчего заработало.

question4 ★★★★★
() автор топика
Ответ на: комментарий от SkyMaverick

soffice --headless --convert-to docx <filename>

Работает, и на удивление быстро.

Хотя, надо в man уточнить, там должны маски поддерживаться. Т.е. вместо можно просто *.odt и должны все odt в каталоге конвертироваться.

Эксперимент показал, что из командной строки воспринимает только первые 3000 символов. В отличии от 7-zip, конструкции '*.odt' или \*.odt не воспринимает. Поэтому придётся городить однострочник на шелле.

question4 ★★★★★
() автор топика
Ответ на: комментарий от Irma

Кириллица в имени файла может привести к такому.

А также в пути. Но кириллицы нет. Диактрик тоже нет.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

придётся городить однострочник на шелле.

был как-то у меня over4k-строчник на bash который дергал суточную статистику из трех баз, генерил из статистики ods-таблицу где обсчитывался анализ, туда же вставлялся png-файлик с подписью, затем таблица конвертировалась в pdf-файл который отправлялся по факсу. Движок libreoffice в консольном режиме подсунутый ему файл с формулами легко пересчитывал и конвертировал в pdf, это было самым приятным моментом.

foxy_ant ★★
()
Ответ на: комментарий от Kompilainenn

Файл-Мастер-Конвертер документов

Спасибо. Но он сконвертировал только первые 325 файлов. Похоже, просто вызывает soffice в командной строке без проверки результата.

question4 ★★★★★
() автор топика
Ответ на: комментарий от DumLemming

Веб-движок на одном сайте умеет импортировать только DOCX.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Странно, никогда не слышал, что у конвертера есть ограничение на количество файлов в каталоге. Надо проверить

Kompilainenn ★★★★★
()
Ответ на: комментарий от question4

Мы проверили на 2048 файлах, все файлы сконвертировались.

И этот конвертер не работает через командную строку

А ещё конвертер ведёт лог, где можно увидеть проблему

Kompilainenn ★★★★★
()
Ответ на: комментарий от Kompilainenn

никогда не слышал, что у конвертера есть ограничение на количество файлов в каталоге

Ограничение при конвертировании в командной строке — выше писал. Экспериментально установил, что воспринимаются первые ~3000 знаков, дальше теряются.

Визард сконвертировал те же самые файлы, которые ранее конвертировались по команде soffice --headless --convert-to docx *.odt , поэтому я и предположил, что через командную строку.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от Kompilainenn

А ещё конвертер ведёт лог, где можно увидеть проблему

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

Там написано:

Word documents
Source documents
Target documents


0 documents converted
question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

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

а так вот:

find -name «*.odt» -print0 | xargs -0 office –headless –convert-to docx

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

Ограничение системы у меня — более 11 000. Ограничение в 3000 — только здесь.

find -name "*.odt" -print0 | xargs -0 office –headless –convert-to docx

Ну да. Но предпочитаю for.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Ну да. Но предпочитаю for.

И глупо.С for будет тысяча вызовов, по одному на каждый, а тут обработка пачками, вызовов десять будет. Экономия времени будет на порядок если не больше.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

Разумное возражение. Просто я xargs почти не пользуюсь, обычно скармливаю команды sh.

Попробовал. Насколько могу судить, xargs подставил в командную строку все сразу, в результате сконвертировались только случайные 250, так как find выдавал их в случайном порядке. Но длина этой командной строки получается не 3000 знаков, а в несколько раз больше. Похоже, с 3000 было совпадение, а LibreOffice ограничивает число параметров командной строки 253.

По времени (мерял time) разница с for, вызывающим soffice для каждого файла, в 30,5 раз. Интересно, что для xargs real в полтора раза больше user, а для for — в полтора раза меньше.

В общем, стоит сделать что-то вроде for n in {,1,2,3,4,5,6,7,8,9}; do soffice --headless --convert-to docx $n??.odt; done

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Познать силу xargs должен ты!

xargs -n 10

будет вызывать команду с десятком аргументов и не более

xargs -s 250

будет создавать командную строку не более 250 символов

xargs –show-limits

покажет текущие лимиты.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

find -name «*.odt» -print0 | xargs -0 -I ARG office –headless –convert-to docx ARG

Превратится в тот же FOR создавая командную строку на каждое имя файла. Но в отличие от башизмов эта конструкция устойчива к пробелам в имени файла

find -name «*.odt» -print0 | xargs -0 -I ARG office –headless –convert-to docx – ARG

а если добавить – то и к дефисам и прочим сюрпризам в имени файла

AVL2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.