110 lines
3.8 KiB
Python
Executable file
110 lines
3.8 KiB
Python
Executable file
#!/usr/bin/python3
|
|
# ods2xls.py
|
|
# adapted from ssconv.py
|
|
# see also
|
|
# https://help.libreoffice.org/Common/About_Converting_Microsoft_Office_Documents
|
|
# http://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
|
|
# http://linuxsleuthing.blogspot.com/2012/01/unoconv-is-number-one.html
|
|
#
|
|
# Copyright (C) 2013, Tom Marble.
|
|
#
|
|
# This software's license gives you freedom; you can copy, convey,
|
|
# propogate, redistribute and/or modify this program under the terms of
|
|
# the GNU Lesser General Public License (LGPL) as published by the Free
|
|
# Software Foundation (FSF), either version 2.1 of the License, or (at your
|
|
# option) any later version of the LGPL published by the FSF.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# along with this program in a file in the toplevel directory called
|
|
# "LGPLv2.1". If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import os
|
|
import ooutils
|
|
import time
|
|
|
|
import uno
|
|
from com.sun.star.task import ErrorCodeIOException
|
|
|
|
class SSConverter:
|
|
"""
|
|
Spreadsheet converter class.
|
|
Converts spreadsheets to XLS files.
|
|
"""
|
|
|
|
def __init__(self, oorunner=None):
|
|
self.desktop = None
|
|
self.oorunner = None
|
|
|
|
|
|
def convert(self, inputFile, outputFile):
|
|
"""
|
|
Convert the input file (a spreadsheet) to a XLS file.
|
|
"""
|
|
|
|
# Start openoffice if needed.
|
|
if not self.desktop:
|
|
if not self.oorunner:
|
|
self.oorunner = ooutils.OORunner()
|
|
|
|
# DEBUG
|
|
print('oorunner should be working here')
|
|
self.desktop = self.oorunner.connect()
|
|
time.sleep(1)
|
|
print(os.popen('fuser -u 8100/tcp').read())
|
|
print('connected to LibreOffice...')
|
|
|
|
inputUrl = uno.systemPathToFileUrl(os.path.abspath(inputFile))
|
|
outputUrl = uno.systemPathToFileUrl(os.path.abspath(outputFile))
|
|
document = self.desktop.loadComponentFromURL(inputUrl, "_blank", 0, ooutils.oo_properties(Hidden=True))
|
|
|
|
try:
|
|
# Additional property option:
|
|
# FilterOptions="59,34,0,1"
|
|
# 59 - Field separator (semicolon), this is the ascii value.
|
|
# 34 - Text delimiter (double quote), this is the ascii value.
|
|
# 0 - Character set (system).
|
|
# 1 - First line number to export.
|
|
#
|
|
# For more information see:
|
|
# http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
|
|
#
|
|
document.storeToURL(outputUrl, ooutils.oo_properties(FilterName="MS Excel 97"))
|
|
finally:
|
|
document.close(True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from sys import argv
|
|
from os.path import isfile
|
|
|
|
if len(argv) == 2 and argv[1] == '--shutdown':
|
|
ooutils.oo_shutdown_if_running()
|
|
else:
|
|
if len(argv) < 2:
|
|
print("USAGE:")
|
|
print(" python %s INPUT-FILE [INPUT-FILE ...]" % argv[0])
|
|
print("OR")
|
|
print(" python %s --shutdown" % argv[0])
|
|
exit(255)
|
|
if not isfile(argv[1]):
|
|
print("File not found: %s" % argv[1])
|
|
exit(1)
|
|
|
|
try:
|
|
i = 1
|
|
converter = SSConverter()
|
|
while i < len(argv):
|
|
odsname = argv[i]
|
|
xlsname = odsname.replace('.ods', '.xls')
|
|
print('%s => %s' % (odsname, xlsname))
|
|
converter.convert(odsname, xlsname)
|
|
i += 1
|
|
|
|
except ErrorCodeIOException as exception:
|
|
print("ERROR! ErrorCodeIOException %d" % exception.ErrCode)
|
|
exit(1)
|