diff options
Diffstat (limited to 'kspread/plugins/scripting/scripts/exporthtml/ExportHtml.py')
-rwxr-xr-x | kspread/plugins/scripting/scripts/exporthtml/ExportHtml.py | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/kspread/plugins/scripting/scripts/exporthtml/ExportHtml.py b/kspread/plugins/scripting/scripts/exporthtml/ExportHtml.py new file mode 100755 index 00000000..2e2dfc31 --- /dev/null +++ b/kspread/plugins/scripting/scripts/exporthtml/ExportHtml.py @@ -0,0 +1,179 @@ +""" +KSpread Kross Python Script. + +Export to HTML File. + +Description: +This script exports data from KSpread to a HTML file. + +Author: +Sebastian Sauer <[email protected]> + +Copyright: +Dual-licensed under LGPL v2+higher and the BSD license. +""" + +import os, sys + +try: + import qt +except (ImportError): + raise "Failed to import the required PyQt python module." + +class Dialog(qt.QDialog): + def __init__(self, scriptpath, parent): + self.scriptpath = scriptpath + + import krosskspreadcore + self.doc = krosskspreadcore.get("KSpreadDocument") + + import qt + qt.QDialog.__init__(self, parent, "Dialog", 1, qt.Qt.WDestructiveClose) + self.setCaption("Export to HTML File") + layout = qt.QVBoxLayout(self) + box = qt.QVBox(self) + box.setMargin(10) + box.setSpacing(10) + layout.addWidget(box) + + sheetbox = qt.QHBox(box) + sheetbox.setSpacing(6) + sheetlabel = qt.QLabel("Sheet:",sheetbox) + self.sheetcombo = qt.QComboBox(sheetbox) + currentsheetname = self.doc.currentSheet().name() + for sheetname in self.doc.sheetNames(): + self.sheetcombo.insertItem(sheetname) + if sheetname == currentsheetname: + self.sheetcombo.setCurrentItem(self.sheetcombo.count() - 1) + sheetlabel.setBuddy(self.sheetcombo) + sheetbox.setStretchFactor(self.sheetcombo,1) + + self.styles = { + "Paper" : + "html { background-color:#efefef; }" + "body { background-color:#fafafa; color:#303030; margin:1em; padding:1em; border:#606060 1px solid; }" + , + "Plain" : + "html { background-color:#ffffff; color:#000; }" + "body { margin:1em; }" + , + "Seawater" : + "html { background-color:#0000aa; }" + "body { background-color:#000066; color:#efefff; margin:1em; padding:1em; border:#00f 1px solid; }" + "h1 { color:#0000ff; }" + "th { color:#6666ff; }" + , + } + + stylebox = qt.QHBox(box) + stylebox.setSpacing(6) + stylelabel = qt.QLabel("Style:",stylebox) + self.stylecombo = qt.QComboBox(stylebox) + stylenames = self.styles.keys() + stylenames.sort() + for stylename in stylenames: + self.stylecombo.insertItem(stylename) + stylelabel.setBuddy(self.stylecombo) + stylebox.setStretchFactor(self.stylecombo,1) + + filebox = qt.QHBox(box) + filebox.setSpacing(6) + filelabel = qt.QLabel("File:",filebox) + self.fileedit = qt.QLineEdit(self.getDefaultFile(),filebox) + btn = qt.QPushButton("...",filebox) + qt.QObject.connect(btn, qt.SIGNAL("clicked()"),self.browseClicked) + filelabel.setBuddy(self.fileedit) + filebox.setStretchFactor(self.fileedit,1) + + btnbox = qt.QHBox(box) + btnbox.setSpacing(6) + okbtn = qt.QPushButton(btnbox) + okbtn.setText("Export") + okbtn.setDefault(True) + qt.QObject.connect(okbtn,qt.SIGNAL("clicked()"),self.startExport) + cancelbtn = qt.QPushButton(btnbox) + cancelbtn.setText("Cancel") + qt.QObject.connect(cancelbtn,qt.SIGNAL("clicked()"),self.close) + + box.setMinimumWidth(480) + + def browseClicked(self): + import qt + filename = str( qt.QFileDialog.getSaveFileName(str(self.fileedit.text()),"*.htm *.html *.xhtml;;*", self) ) + if filename != "": self.fileedit.setText(filename) + + def getDefaultFile(self): + import os + try: + homepath = os.getenv("HOME") + if not homepath: + import pwd + user = os.getenv("USER") or os.getenv("LOGNAME") + if not user: + pwent = pwd.getpwuid(os.getuid()) + else: + pwent = pwd.getpwnam(user) + homepath = pwent[6] + except (KeyError, ImportError): + homepath = os.curdir + return os.path.join(homepath, "kspreadexport.html") + + def startExport(self): + import qt + + sheetname = str( self.sheetcombo.currentText() ) + sheet = self.doc.sheetByName( sheetname ) + print "sheetname=%s sheet=%s" % (sheetname,sheet) + + filename = str( self.fileedit.text() ) + try: + file = open(filename, "w") + except IOError, (errno, strerror): + qt.QMessageBox.critical(self,"Error","<qt>Failed to create HTML file \"%s\"<br><br>%s</qt>" % (filename,strerror)) + return + + file.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n") + file.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n") + file.write("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n") + file.write("<head><title>%s</title>\n" % sheetname) + + file.write("<style type=\"text/css\">\n<!--\n") + file.write( self.styles[ str(self.stylecombo.currentText()) ] ) + file.write("\n//-->\n</style>\n") + + file.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n") + file.write("</head><body><h1>%s</h1>\n" % sheetname) + + file.write("<table border=\"1\">\n") + cell = sheet.firstCell() + prevrow = -1 + while cell: + #print "Cell col=%s row=%s value=%s" % (cell.column(),cell.row(),cell.value()) + + row = cell.row() + if row != prevrow: + prevrow = row + file.write("<tr>") + file.write("<th>%s</th>" % row) + + file.write("<td>%s</td>" % cell.value()) + + cell = cell.nextCell() + if cell == None or cell.row() != prevrow: + file.write("</tr>\n") + + file.write("</table>\n") + file.write("</body></html>\n") + + file.close() + self.close() + +if __name__ == "__main__": + scriptpath = os.getcwd() + qtapp = qt.QApplication(sys.argv) +else: + scriptpath = os.path.dirname(__name__) + qtapp = qt.qApp + +dialog = Dialog(scriptpath, qtapp.mainWidget()) +dialog.exec_loop() |