small-hacks/ods2xls.py

111 lines
3.8 KiB
Python
Raw Normal View History

2015-12-21 23:57:18 -08:00
#!/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
Correct licensing info per author's instructions. I discussed the licensing of this file with Tom Marble, and he agreed in IRC that LGPLv2.1-or-later is the proper license. <bkuhn> tmarble: in 2013-01 you sent me some scripts for ods2xls <bkuhn> you mention they're based on ssconv <bkuhn> but they don't have license info <bkuhn> I was putting it into a public repository and then figured I should ask you first. [11:45] <tmarble> oh my.. I will look [11:46] <bkuhn> tmarble: if you figure it out, I can commit the files and you can add a license. [11:47] <bkuhn> the lib is lgpl'd, that's marked <bkuhn> (although you didn't mark your copyright notice if you canged it) <tmarble> http://www.linuxjournal.com/content/convert-spreadsheets-csv-files-python-and-pyuno [11:57] <tmarble> bkuhn: sorry this was sort of a small, hacky script and didn't get the "full treatment" [11:58] <tmarble> clearly it should be LGPLv2+ <bkuhn> tmarble: do you recall if you modified the library as well as the script? [12:07] <bkuhn> I see you put this in the lib: <bkuhn> # PyODConverter (Python OpenDocument Converter) v1.0.0 - 2008-05-05 <bkuhn> # Copyright (C) 2008 Mirko Nasato <mirko@artofsolving.com> <bkuhn> # Licensed under the GNU LGPL v2.1 - or any later version. <bkuhn> # http://www.gnu.org/licenses/lgpl-2.1.html <bkuhn> and no copyright notices in the main program file <bkuhn> can you tell me what it should be? <tmarble> bkuhn: IIRC I did not modify ooutils [12:09] <tmarble> bkuhn: yeah, sorry about that.. it's not even in VCS [12:10] <bkuhn> It's ok. <bkuhn> I'm putting it public in my small hacks directory. <tmarble> bkuhn: as I mentioned before let's stick with LGPLv2.1+ <bkuhn> As I use it all the time. <bkuhn> and someone else might find it useful <bkuhn> I believe one has a moral duty to share all software. :) <tmarble> please feel free to adjust the headers! <bkuhn> tmarble: may I quote this conversation in the Git log? <tmarble> bkuhn: I loved karen's citing your quote "You may say I'm a dreamer, but I'm not the only one." [12:11] <tmarble> bkuhn: yes
2014-09-04 12:09:00 -04:00
#
2015-12-21 23:57:18 -08:00
# Copyright (C) 2013, Tom Marble.
Correct licensing info per author's instructions. I discussed the licensing of this file with Tom Marble, and he agreed in IRC that LGPLv2.1-or-later is the proper license. <bkuhn> tmarble: in 2013-01 you sent me some scripts for ods2xls <bkuhn> you mention they're based on ssconv <bkuhn> but they don't have license info <bkuhn> I was putting it into a public repository and then figured I should ask you first. [11:45] <tmarble> oh my.. I will look [11:46] <bkuhn> tmarble: if you figure it out, I can commit the files and you can add a license. [11:47] <bkuhn> the lib is lgpl'd, that's marked <bkuhn> (although you didn't mark your copyright notice if you canged it) <tmarble> http://www.linuxjournal.com/content/convert-spreadsheets-csv-files-python-and-pyuno [11:57] <tmarble> bkuhn: sorry this was sort of a small, hacky script and didn't get the "full treatment" [11:58] <tmarble> clearly it should be LGPLv2+ <bkuhn> tmarble: do you recall if you modified the library as well as the script? [12:07] <bkuhn> I see you put this in the lib: <bkuhn> # PyODConverter (Python OpenDocument Converter) v1.0.0 - 2008-05-05 <bkuhn> # Copyright (C) 2008 Mirko Nasato <mirko@artofsolving.com> <bkuhn> # Licensed under the GNU LGPL v2.1 - or any later version. <bkuhn> # http://www.gnu.org/licenses/lgpl-2.1.html <bkuhn> and no copyright notices in the main program file <bkuhn> can you tell me what it should be? <tmarble> bkuhn: IIRC I did not modify ooutils [12:09] <tmarble> bkuhn: yeah, sorry about that.. it's not even in VCS [12:10] <bkuhn> It's ok. <bkuhn> I'm putting it public in my small hacks directory. <tmarble> bkuhn: as I mentioned before let's stick with LGPLv2.1+ <bkuhn> As I use it all the time. <bkuhn> and someone else might find it useful <bkuhn> I believe one has a moral duty to share all software. :) <tmarble> please feel free to adjust the headers! <bkuhn> tmarble: may I quote this conversation in the Git log? <tmarble> bkuhn: I loved karen's citing your quote "You may say I'm a dreamer, but I'm not the only one." [12:11] <tmarble> bkuhn: yes
2014-09-04 12:09:00 -04:00
#
# 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:
2015-12-21 23:57:18 -08:00
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]):
2015-12-21 23:57:18 -08:00
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')
2015-12-21 23:57:18 -08:00
print('%s => %s' % (odsname, xlsname))
converter.convert(odsname, xlsname)
i += 1
2015-12-21 23:57:18 -08:00
except ErrorCodeIOException as exception:
print("ERROR! ErrorCodeIOException %d" % exception.ErrCode)
exit(1)