You are here

Conversione file da linea di comando con Libreoffice

tito.brasolin's picture
Submitted by tito.brasolin on Sun, 09/29/2019 - 18:42

Avviare il software LibreOffice con parametri permette agli utenti esperti di influenzare il comportamento e le prestazioni del programma. In particolare, tramite il parametro --convert-to è possibile effettuare conversioni tra i vari formati di file supportati. Qui vedremo un esempio di conversione da csv a ods con qualche osservazione aggiuntiva sulle accortezze necessarie per convertire file in batch in ambiente Windows.

Ecco un esempio di comando di conversione da csv a ods in ambiente Windows, supponendo che il software sia stato installato nel percorso standard:

"C:\Program Files\LibreOffice\program\soffice.exe"^
--convert-to ods^
--infilter="csv:44,34,76,1,11/5,1033,false,false,true"^
document.csv

Il parametro --infilter sarà descritto più avanti. Qui osserviamo è teoricamente possibile utilizzare i caratteri jolly per convertire più file, ma in pratica la conversione funzionerà solo per un file a causa dell'impossibilità di avviare più istanze di LibreOffice contemporaneamente. Il problema è descritto alla pagina: Using the --convert-to command-line function to convert formats under Windows 10.

Si può ovviare al problema utilizzando nel nostro file batch un ciclo simile al seguente:

for %%f in (*.csv) do (
start /wait "C:\Program Files\LibreOffice\program\soffice.exe"^
--convert-to ods %%f
)

Il filtro CSV accetta una stringa composta da un minimo di cinque a un massimo di nove token separati da virgola: l'esempio qui sopra è riferito a un file csv in cui i campi sono separati da virgole (carattere ASCII 44), i testi sono delimitati da doppi apici (34), la codifica è Unicode (UTF-8), l'importazione inizia dalla prima riga, l'undicesimo campo è una data in formato AA/MM/GG, la lingua è inglese americano (1033) etc.

Ecco la descrizione dettagliata di tutti i token:

  1. Il primo token definisce uno o più separatori di campo. Valori multipli sono separati da una barra ("/") quindi se, ad esempio, i separatori sono punti e virgole e tabulazioni orizzontali il primo token sarà 59/9. Se separatori consecutivi devono essere trattati come un separatore unico il token dovrà terminare con /MRG. Se i campi sono a larghezza fissa il token conterrà le tre lettere FIX.
  2. Il secondo token contiene il delimitatore di testo come valore ASCII, quindi 34 per i doppi apici e 39 per gli apici singoli.
  3. Il terzo token contiene la codifica del testo, secondo quanto descritto alla pagina Filter Options - Apache OpenOffice Wiki.
  4. Il quarto token indica la riga da cui iniziare l'importazione. La prima riga del file è la numero 1.
  5. Il quinto token contiene il formato delle celle, e ha un significato diverso a seconda del primo token:
    • Se sono utilizzati i separatori di campo, il token ha la forma colonna/formato[/colonna/formato/...] in cui la colonna 1 è quella più a sinistra e il formato è spiegato qui sotto.
    • Se il primo token è FIX il quinto token ha la forma inizio/formato[/inizio/formato/...] in cui inizio è il numero del primo carattere per il campo, essendo 0 il numero del carattere più a sinistra nella linea. Il formato è spiegato qui sotto.

    Il formato da utilizzare per la cella durante l'importazione è specificato con un numero:

    1. Standard
    2. Testo
    3. MM/GG/AA
    4. GG/MM/AA
    5. AA/MM/GG
    6. -
    7. -
    8. -
    9. ignora il campo (non importare)
    10. US-English

    Il codice 10 indica che il contenuto del campo è US-English. Ciò risulta utile se un campo contiene valori decimali formattati con il sistema americano (con il punto "." come separatore dei decimali e la virgola "," come separatore delle migliaia). Utilizzando 10 come codice di formato le API sono in grado di interpretare correttamente il contenuto numerico di un campo anche se i separatori di decimali e migliaia nel linguaggio nella lingua corrente sono diversi.

  6. Il sesto token (facoltativo) equivale al selettore "Lingua" nell'interfaccia utente per l'importazione csv. È una stringa in formato decimale, se è 0 oppure è omessa viene utilizzata la lingua dell'interfaccia utente. Per gli identificatori della lingua si faccia riferimento alla pagina Language Identifier Constants and Strings - Windows applications | Microsoft Docs ricordando che va utilizzato il formato decimale mentre la documentazione Microsoft usa quello esadecimale. Per esempio, per l'inglese americano il codice è 1033 (esadecimale 0x0409).
  7. Il settimo token (facoltativo)
    • se importazione equivale alla spunta "Quoted field as text". Può essere la stringa false o true (default false).
    • se esportazione equivale alla spunta "Quote all text cells". Può essere la stringa o true (default false).
  8. L'ottavo token (facoltativo)
    • se importazione equivale alla spunta "Detect special numbers". Può essere la stringa false o true (default false).
    • se esportazione non ha equivalente nell'interfaccia utente. Se è la stringa true le celle contenenti valori numerici sono salvate come numeri. Se è false i numeri sono salvati come testo, con delimitatori di testo. Il valore di default è true.
  9. Il nono token (facoltativo)
    • se importazione vengono utilizzati solo otto token, questo non è usato.
    • se esportazione equivale alla spunta "Save cell contents as shown". Può essere la stringa o true (default true).