从命令行编辑 Libreoffice 文件

Chr*_*ned 8 command-line libreoffice

我想从命令行向 libreoffice calc 表添加行。但我不知道如何。
我刚刚想出了如何从命令行启动 libreoffice。

例如我在找什么: -test.ods-file之前

Name      Text
Hans      Bla
Christian BlaBlub
Run Code Online (Sandbox Code Playgroud)

我进入...

ubuntu> [a command -insert] Alf|test -file=test.ods
Run Code Online (Sandbox Code Playgroud)

以便将“Alf”和“test”添加为表中的下一行。
-test.ods-file之后:

Name      Text
Hans      Bla
Christian BlaBlub
Alf       test
Run Code Online (Sandbox Code Playgroud)

Rin*_*ind 11

.ods是一个存档。因此,您需要提取存档。

文档

XML文件结构

OpenDocument 文件格式的文档存储为包含 XML 文件的压缩 zip 档案。要查看这些 XML 文件,您可以使用解压缩程序打开 OpenDocument 文件。OpenDocument 文件中包含以下文件和目录:

  • 文档的文本内容位于 content.xml 中。

所以它不是那么简单

[a command -insert] Alf|test -file=test.ods
Run Code Online (Sandbox Code Playgroud)

因为您还需要插入 XML 部分。


在此处输入图片说明

$ 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   
Run Code Online (Sandbox Code Playgroud)

当您查看 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>
Run Code Online (Sandbox Code Playgroud)

<table:named-expressions/>
Run Code Online (Sandbox Code Playgroud)

然后再次压缩文件(zip -r ../test2.ods .从包含文件的目录)。

结果:

在此处输入图片说明


为了从命令行编辑文件,我使用了这个命令。我将示例放在 ~/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 .
Run Code Online (Sandbox Code Playgroud)

您需要做的就是用您自己的文本段替换文本段。


由 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
Run Code Online (Sandbox Code Playgroud)

“#”是分隔符。如果文本中有“#”,请使用其他内容。