Edite arquivos do Libreoffice na linha de comando

7

Eu quero adicionar linhas a uma tabela calc do libreoffice na linha de comando. Mas eu não tenho ideia de como. Acabei de descobrir como iniciar o libreoffice a partir da linha de comando.

Por exemplo, o que eu estou procurando: -O test.ods-file antes

Name      Text
Hans      Bla
Christian BlaBlub

Eu entro ...

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

para que "Alf" e "teste" sejam adicionados como próxima linha na tabela.
-O test.ods-file depois:

Name      Text
Hans      Bla
Christian BlaBlub
Alf       test
    
por Chris Sagined 26.10.2016 / 13:09

1 resposta

10

.ods é um arquivo. Então você precisará extrair o arquivo.

Na documentação :

  

estrutura de arquivos XML

     

Os documentos no formato de arquivo OpenDocument são armazenados como arquivos zip compactados que contêm arquivos XML. Para visualizar esses arquivos XML, você pode abrir o arquivo OpenDocument com um programa de descompactação. Os seguintes arquivos e diretórios estão contidos nos arquivos do OpenDocument:

     
  • O conteúdo do texto do documento está localizado em content.xml.
  •   

Portanto, não é tão simples como

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

desde que você também precise inserir as partes 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   

Quando você olha para o content.xml e deseja adicionar uma nova linha abaixo da última, você precisa adicionar algo assim ...

<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>

antes

<table:named-expressions/>

e, em seguida, feche os arquivos novamente ( zip -r ../test2.ods . do diretório com os arquivos).

Resultado:

Para editar o arquivo da linha de comando, usei este comando. Eu coloquei o exemplo em ~ / Downloads e fiz um tmp / in para testar. Todos os comandos usados para isso:

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 .

Tudo o que você precisa fazer é substituir os segmentos de texto pelos seus próprios.

Versão mais recente cortesia de Terdon (ele usa variáveis para torná-lo mais legível):

$ 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

O "#" é um separador. Se você tiver um "#" no texto, use outra coisa.

    
por Rinzwind 26.10.2016 / 13:22