web-dev-qa-db-fra.com

Modifier les fichiers Libreoffice à partir de la ligne de commande

Je veux ajouter des lignes à une table de calcul de libreoffice à partir de la ligne de commande. Mais je ne sais pas comment.
Je viens de comprendre comment démarrer libreoffice en ligne de commande.

Par exemple, ce que cherche iam: -The test.ods-file before

Name      Text
Hans      Bla
Christian BlaBlub

J'entre...

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

de sorte que "Alf" et "test" soient ajoutés à la ligne suivante du tableau.
- Le test.ods-file après:

Name      Text
Hans      Bla
Christian BlaBlub
Alf       test
7
Chris Sagined

.ods est une archive. Vous aurez donc besoin d'extraire l'archive.

De la documentation :

Structure du fichier XML

Les documents au format de fichier OpenDocument sont stockés sous forme d'archives Zip compressées contenant des fichiers XML. Pour afficher ces fichiers XML, vous pouvez ouvrir le fichier OpenDocument avec un programme de décompression. Les fichiers et répertoires suivants sont contenus dans les fichiers OpenDocument:

  • Le contenu textuel du document se trouve dans content.xml.

Donc ce n’est pas aussi simple que

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

puisque vous devez également insérer les parties 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   

Quand vous regardez content.xml et que vous voulez ajouter une nouvelle ligne en dessous de la dernière, vous devez ajouter quelque chose comme ça ...

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

avant

<table:named-expressions/>

puis compressez à nouveau les fichiers (Zip -r ../test2.ods . à partir du répertoire contenant les fichiers).

Résultat:

enter image description here


Pour éditer le fichier à partir de la ligne de commande, j'ai utilisé cette commande. Je mets l'exemple dans ~/Téléchargements et crée un fichier tmp/dans celui-ci pour le tester. Toutes les commandes utilisées pour cela:

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 .

Tout ce que vous avez à faire est de remplacer les segments de texte par les vôtres.


Nouvelle version gracieuseté de Terdon (elle utilise des variables pour la rendre plus lisible):

$ 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

Le "#" est un séparateur. Si vous avez un "#" dans le texte, utilisez autre chose.

10
Rinzwind