[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/filters/kspread/excel/import
From: Marijn Kruisselbrink <m.kruisselbrink () student ! tue ! nl>
Date: 2010-09-08 9:41:50
Message-ID: 20100908094150.DD311AC857 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1172960 by mkruisselbrink:
add support for page headers/footers
M +64 -1 ExcelImport.cpp
--- trunk/koffice/filters/kspread/excel/import/ExcelImport.cpp #1172959:1172960
@@ -53,11 +53,13 @@
#include <DocBase.h>
#include <CalculationSettings.h>
#include <CellStorage.h>
+#include <HeaderFooter.h>
#include <Map.h>
+#include <RowColumnFormat.h>
#include <Sheet.h>
+#include <SheetPrint.h>
#include <Style.h>
#include <StyleStorage.h>
-#include <RowColumnFormat.h>
#include <ValueConverter.h>
#include <ShapeApplicationData.h>
#include <Util.h>
@@ -141,6 +143,7 @@
void processMetaData();
void processSheet(Sheet* isheet, KSpread::Sheet* osheet);
+ void processSheetForHeaderFooter(Sheet* isheet, KSpread::Sheet* osheet);
void processColumn(Sheet* isheet, unsigned column, KSpread::Sheet* osheet);
void processRow(Sheet* isheet, unsigned row, KSpread::Sheet* osheet);
void processCell(Cell* icell, KSpread::Cell ocell);
@@ -148,6 +151,8 @@
void processEmbeddedObjects(const KoXmlElement& rootElement, KoStore* store);
void processNumberFormats();
+ QString convertHeaderFooter(const QString& xlsHeader);
+
int convertStyle(const Format* format, const QString& formula = QString());
QHash<CellFormatKey, int> styleCache;
QList<KSpread::Style> styleList;
@@ -420,6 +425,7 @@
os->setAutoCalculationEnabled(is->autoCalc());
// TODO: page layout
+ processSheetForHeaderFooter(is, os);
if(is->password() != 0) {
//TODO
@@ -453,6 +459,63 @@
os->cellStorage()->loadConditions(cellConditions);
}
+void ExcelImport::Private::processSheetForHeaderFooter(Sheet* is, KSpread::Sheet* os)
+{
+ os->print()->headerFooter()->setHeadFootLine(
+ convertHeaderFooter(is->leftHeader()), convertHeaderFooter(is->centerHeader()),
+ convertHeaderFooter(is->rightHeader()), convertHeaderFooter(is->leftFooter()),
+ convertHeaderFooter(is->centerFooter()), convertHeaderFooter(is->rightFooter()));
+}
+
+QString ExcelImport::Private::convertHeaderFooter(const QString& text)
+{
+ QString result;
+ bool skipUnsupported = false;
+ int lastPos;
+ int pos = text.indexOf('&');
+ int len = text.length();
+ if ((pos < 0) && (text.length() > 0)) // If ther is no &
+ result += text;
+ else if (pos > 0) // Some text and '&'
+ result += text.mid(0, pos - 1);
+
+ while (pos >= 0) {
+ switch (text[pos + 1].unicode()) {
+ case 'D':
+ result += "<date>";
+ break;
+ case 'T':
+ result += "<time>";
+ break;
+ case 'P':
+ result += "<page>";
+ break;
+ case 'N':
+ result += "<pages>";
+ break;
+ case 'F':
+ result += "<name>";
+ break;
+ case 'A':
+ result += "<sheet>";
+ break;
+ case '\"':
+ default:
+ skipUnsupported = true;
+ break;
+ }
+ lastPos = pos;
+ pos = text.indexOf('&', lastPos + 1);
+ if (!skipUnsupported && (pos > (lastPos + 1)))
+ result += text.mid(lastPos + 2, (pos - lastPos - 2));
+ else if (!skipUnsupported && (pos < 0)) //Remaining text
+ result += text.mid(lastPos + 2, len - (lastPos + 2));
+ else
+ skipUnsupported = false;
+ }
+ return result;
+}
+
void ExcelImport::Private::processColumn(Sheet* is, unsigned columnIndex, KSpread::Sheet* os)
{
Column* column = is->column(columnIndex, false);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic