ZaLinux.ru

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

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

Предположим, нам дано множество офисных файлов в формате .doc (или любом другом формате, который поддерживает LibreOffice), и мы хотим их переконвертировать в другой формат. Если файлов немного, то их можно открыть в LibreOffice и выбрать сохранение в нужном формате. Но если их десятки и более, то эта рутинная работа станет долгой и утомительной.

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

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

Для этого нужно запустить команду

soffice --headless --convert-to doc Имя_файла

Где

  • doc – можно заменить на желаемый формат (pdf, html, odt, docx и т.д.)
  • Имя_файла – замените на тот файл, который вы хотите конвертировать.

Ещё примеры команды:

Конвертирует все поддерживаемые файлы в каталоге Математика в html формат и сохранит их в текущем каталоге^

soffice --headless --convert-to html Математика/*

Конвертировать все файлы в формате .doc в формат PDF и сохранить их в каталоге /home/user:

soffice --headless --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc

Конвертировать все файлы в формате .doc в формат html с кодировкой UTF8 и сохранить их в текущем каталоге.

soffice --headless --convert-to "html:XHTML Writer File:UTF8" *.doc

Конвертировать все файлы в формате .doc в обычный текст с кодировкой UTF8.

soffice --headless --convert-to "txt:Text (encoded):UTF8" *.doc

Вывод содержимого файла в консоль

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

soffice --headless --cat имя_файла

Конечно, сложные элементы, которые не могут быть отображены в командной строке (картинки, формы и т.д.), показаны не будут.

Рекомендуемые статьи:

6 Комментарии

  1. Yudini

    А в винде команда конвертации недоступна? я могу открыть командой файл, но конвертироваться он не желает.
    Пробовал разные варианты. С конкретным фалом, со всеми файлами в папке, конвертацию в разные фрматы, даже запуск в самом ридере swriter.exe с параметрами. В итоге все равно открывается, но не конвертится. Винда не может в последовательность команд ?

    Секретного варианта запуска и исполнения макроса, как в ворде, нету?

    1. Alexey (Автор записи)

      У меня сначала тоже ничего не получалось. Пробовал свои примеры, а также как описано здесь:

      Там в одном примере даже зачем-то PS приплели.

      В общем, проблема решилась с помощью Cygwin:

      'C:/Program Files/LibreOffice 5/program/soffice.bin' --headless --convert-to pdf:writer_pdf_Export --outdir 'C:\tmp' 'C:\1.docx'
      convert C:\1.docx -> C:\tmp\1.pdf using filter : writer_pdf_Export

      Т.е. в Cygwin я запускал файл soffice.bin. У Cygwin сразу два огромных плюса:

      • он выводит ошибки (это помогло мне узнать, что LibreOffice не может прочитать исходный файл)
      • можно использовать подстановочные символы (в командной строке Windows никакие бы звёздочки мы не смогли использовать, пришлось бы писать простой bat скрипт для автоматизации).
      1. Yudini

        Ясно понятно, спасибо)

        В общем хелп у либре офиса немножко темнит

        Batch convert files. If --outdir is not specified, then current working directory is used as output_dir.

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

        Да, то что cmd ошибки не выводит это… раздражает

        Но в принципе

        "C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --convert-to pdf:writer_pdf_Export --outdir "C:\tmp" "C:\tmp\1.docx"

        так запускается и отрабатывает даже в обычной cmd.

        PS Реадктор огонь, но… как вставлять в стиле кода?)

        1. Alexey (Автор записи)

          В стиле кода только для админа, причём только из админки при редактировании комментария – здесь даже я не могу вставить sad Это связано с фильтрацией данных (тегов).

  2. Антон

    Помогите не какне воспринемает Кирилицу

    "C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --convert-to  docx --outdir C:\Clip\Anton C:\Clip\Anton\Обзор ВП сентябрь 2019.doc
    
    1. Alexey (Автор записи)

      Попробуйте имя файла поместить в кавычки:

      "C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --convert-to  docx --outdir "C:\Clip\Anton\Обзор ВП сентябрь 2019.doc"

       

Оставить комментарий

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