3

Libre Officeでファイルを開き、これを.docファイルのように保存する方法は? 可能です?(このためのスクリプトを作成します)

4

2 に答える 2

4

libreofficeマニュアル(コマンドラインユーティリティとして)によると、これにはpythonは必要ありませんが、これlibreofficeを直接サポートする必要があります:

--convert-to output_file_extension[:output_filter_name] [--outdir output_dir] file... ファイルをバッチ変換します。--outdir が指定されていない場合、現在の作業ディレクトリが変換されたファイルの出力ディレクトリとして使用されます。

例:

    -- pdf *.docに変換

すべての .doc ファイルを PDF に変換します。

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

Writer PDF エクスポート ダイアログの設定を使用して、すべての .doc ファイルを PDF に変換し、/home/user に保存します。

多くのファイルを処理する必要がある場合は、次のような単純な bash スクリプトを記述できます。

for i in `find folder -type f -name *.lwp` ; do
    libreoffice --headless --convert-to doc:"MS Word 2003 XML" $i
done

このコマンドを呼び出す方法の詳細については、こちらまたは以前に指定されたマニュアルを参照してください。

そして、基本的に python と から同じ呼び出しを行うことができますsubprocess:

import os
import os.path
import subprocess

for i in os.listdir( SOURCE_FOLDER):
    if not i.endswith( '.lwp'):
        continue

    path = os.path.join( SOURCE_FOLDER, i)
    args = ['libreoffice', '--headless', '--convert-to',
            'doc:"MS Word 2003 XML"', path]

    subprocess.call(args, shell=False)
于 2013-04-24T21:08:00.560 に答える
0

win7 では、LO 4.1 を使用して次のことを行う必要がありました (コマンド ラインから 、cmd スクリプトで実行している場合は、おそらく変換%fする必要があります)。%%f

set path=%path%;C:\Program Files (x86)\LibreOffice 4\program
for %f in (*.odt) do (
    soffice.exe --headless --convert-to doc --outdir "C:\tmp" %f
)

ノート:

  • LO のインスタンスが開いている場合は機能しません。
  • outdir が必要です
  • 入力ファイルのワイルドカードはサポートされていません (したがって for ループ)

対応する python スクリプトは次のようになります。

import os
import subprocess as sp

lo = r'C:\Program Files (x86)\LibreOffice 4\program\soffice.exe'

args = '--headless --convert-to doc --outdir "%(out)s" "%(inp)s"'

inp_path = './odt'
out_path = './doc'

inp_path = os.path.normpath(os.path.abspath(inp_path))
out_path = os.path.normpath(os.path.abspath(out_path))

for root, dirs, files in os.walk(inp_path):
  for fname in files:
    if fname.endswith('.odt'):
      i = os.path.join(inp_path,fname)
      sp.call(lo + ' ' + args%{'out': out_path, 'inp': i})

(ask.libreofficeから私の回答をコピーして変更し、スーパーユーザーにも投稿しました)

于 2013-09-13T13:19:03.087 に答える