web-dev-qa-db-ja.com

コマンドラインからLibreoffice-Filesを編集

コマンドラインからlibreoffice calcテーブルに行を追加したい。しかし、どうすればいいかわかりません。
コマンドラインからlibreofficeを起動する方法を見つけました。

たとえば、iamが探しているもの:-The test.ods-file before

Name      Text
Hans      Bla
Christian BlaBlub

私が入ります...

ubuntu> [a command -insert] Alf|test -file=test.ods

「Alf」と「test」がテーブルの次の行として追加されるように。
-後のtest.ods-file

Name      Text
Hans      Bla
Christian BlaBlub
Alf       test
7
Chris Sagined

.odsはアーカイブです。そのため、アーカイブを抽出する必要があります。

ドキュメント から:

XMLファイル構造

OpenDocumentファイル形式のドキュメントは、XMLファイルを含む圧縮されたZipアーカイブとして保存されます。これらのXMLファイルを表示するには、解凍プログラムでOpenDocumentファイルを開くことができます。 OpenDocumentファイルには、次のファイルとディレクトリが含まれています。

  • ドキュメントのテキストコンテンツはcontent.xmlにあります。

だからそれはそれほど単純ではありません

[a command -insert] Alf|test -file=test.ods

xMLパーツも挿入する必要があるためです。


enter image description here

$ cd ~/tmp/
$ unzip ../test.ods 
Archive:  test.ods
 extracting: mimetype                
 extracting: Thumbnails/thumbnail.png  
  inflating: settings.xml            
  inflating: content.xml             
  inflating: meta.xml                
  inflating: styles.xml              
  inflating: manifest.rdf            
   creating: Configurations2/images/Bitmaps/
   creating: Configurations2/toolpanel/
   creating: Configurations2/progressbar/
  inflating: Configurations2/accelerator/current.xml  
   creating: Configurations2/floater/
   creating: Configurations2/statusbar/
   creating: Configurations2/toolbar/
   creating: Configurations2/popupmenu/
   creating: Configurations2/menubar/
  inflating: META-INF/manifest.xml   

Content.xmlを見て、最後の行の下に新しい行を追加する場合、次のようなものを追加する必要があります...

<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a2a2a2</text:p>
</table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b2b2b2</text:p>
</table:table-cell></table:table-row>

<table:named-expressions/>

次に、ファイルを再度Zipします(Zip -r ../test2.ods .ファイルがあるディレクトリから)。

結果:

enter image description here


コマンドラインからファイルを編集するには、このコマンドを使用しました。サンプルを〜/ Downloadsに置き、そこにtmp /を作成してテストします。これに使用されるすべてのコマンド:

cd ~/Downloads/tmp/
unzip ../test.ods 
sed 's#</table:table><table:named-expressions/>#<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a3a3a3</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>b3b3b3</text:p></table:table-cell></table:table-row>&#' content.xml > content2.xml 
mv content2.xml content.xml
Zip -r ../test2.ods .

必要なのは、テキストセグメントを独自のものに置き換えることだけです。


Terdonの好意による新しいバージョン(変数を使用して読みやすくします):

$ from="</table:table><table:named-expressions/>"
$ to="<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>a3a3a3</text:p></table:table-cell><table:tab‌​le-cell office:value-type="string" calcext:value-type="string"><text:p>b3b3b3</text:p></table:table-cell></table:ta‌​ble-row>"
$ sed "s#$from#$to$from#" content.xml

「#」はセパレータです。テキストに「#」がある場合は、別のものを使用してください。

10
Rinzwind