LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   [SOLVED] Export AutoCorrect Entries from LibreOffice to CSV (https://www.linuxquestions.org/questions/linux-software-2/%5Bsolved%5D-export-autocorrect-entries-from-libreoffice-to-csv-867742/)

devdol 03-10-2011 11:01 AM

[SOLVED] Export AutoCorrect Entries from LibreOffice to CSV
 
After having discovered AutoKey, I wanted make a subset of my numerous "AutoCorrect" entries (ACE) from inside LibreOffice available desktop-wide.
Unfortunately there is no easy way to export them into a flat file, and I did not find any solution yet. There is a macro to export "AutoText" entries, but they are a different class (to be triggered by pressing F3, not just by automatic replacement just while typing).

On Linux, AutoCorrect definitions are stored in files like
~/.libreoffice/3/user/autocorr/acor_*.dat, which are ZIP files (each one for a given language). They contain a file DocumentList.xml, which holds all ACE definitions as an xml tree structure.

As LibreOffice's Website does not yet have a place to share Macros, Snippets and so on, I take the liberty of placing a recipe here using python, for those who want to use, improve or extend it:

Code:

#-*- coding: utf-8 -*-
import os, sys, zipfile, xml.dom.minidom
##########################################################
# Script to export LibreOffice Auto Correct Entries
# into a flat file (e.g. to reuse some of them with autokey)
##########################################################
ACEfile='.libreoffice/3/user/autocorr/acor_de-DE.dat'    # This is a ZIP where LibreOffice stores its auto correct entries
ifname='DocumentList.xml'                                # Name of the file inside the ZIP archive that contains auto correct entries
ofname='AutoCorrectEntries.csv'                          # any desired output file name for the export
tagname= 'block-list:block'                              # (as in DocumentList.xml)
schema=['block-list:abbreviated-name','block-list:name'] # (as in DocumentList.xml)
default_encoding='UTF-8'                                # (as in DocumentList.xml)
ofdelimiter=";"                                          # any desired delimiter for export
##########################################################

of = open(ofname,"w")
oACE = zipfile.ZipFile(os.path.join(os.path.expanduser("~"), ACEfile))
zif = oACE.open(ifname, "r") # access as read-only ZipExtFile object
doctree = xml.dom.minidom.parse(zif)  # Parse the input file as DOM (document object model, xml-tree) into memory
if doctree.encoding:
    encoding = doctree.encoding
else:
        encoding = default_encoding
for elem in doctree.getElementsByTagName(tagname):
        acEntry=[]
        for fieldname in schema:
                acEntry.append(elem.getAttribute(fieldname))
        of.write(ofdelimiter.join(acEntry).encode(encoding)+"\n")
of.close()    # Close output file
doctree.unlink # and deallocate DOM object


EricTRA 03-11-2011 01:45 AM

Hello,

Thank you for sharing your solution. Off the Zero Reply List.

Kind regards,

Eric


All times are GMT -5. The time now is 10:40 AM.