从命令行编辑 Libreoffice 文件

从命令行编辑 Libreoffice 文件

我想从命令行向 libreoffice calc 表添加行。但我不知道怎么做。
我刚刚弄清楚了如何从命令行启动 libreoffice。

例如我正在寻找:-test.ods-file之前

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

答案1

.ods是一个档案。因此您需要提取该档案。

来自文档

XML 文件结构

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

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

所以这并不像

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

因为您还需要插入 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   

当您查看 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 -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 .

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


较新版本由 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

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

相关内容