[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/filters/kspread/excel
From: Marijn Kruisselbrink <m.kruisselbrink () student ! tue ! nl>
Date: 2010-08-29 20:54:08
Message-ID: 20100829205408.6FDF0AC887 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1169649 by mkruisselbrink:
save dimensions and column width information
M +44 -2 export/ExcelExport.cpp
M +5 -2 sidewinder/records.xml
--- trunk/koffice/filters/kspread/excel/export/ExcelExport.cpp #1169648:1169649
@@ -20,16 +20,21 @@
#include <ExcelExport.h>
#include <ExcelExport.moc>
+#include <QFont>
+#include <QFontMetricsF>
#include <QMap>
#include <kdebug.h>
#include <kgenericfactory.h>
#include <KoFilterChain.h>
+#include <KoPostscriptPaintDevice.h>
#include <part/Doc.h>
#include <Map.h>
#include <Sheet.h>
+#include <RowColumnFormat.h>
+#include <kspread_limits.h>
#include <swinder.h>
#include <XlsRecordOutputStream.h>
@@ -191,6 +196,20 @@
return KoFilter::OK;
}
+static unsigned convertColumnWidth(qreal width)
+{
+ static qreal factor = -1;
+ if (factor == -1) {
+ QFont f("Arial", 10);
+ KoPostscriptPaintDevice pd;
+ QFontMetricsF fm(f, &pd);
+ for (char c = '0'; c <= '9'; c++) {
+ factor = qMax(factor, fm.width(c));
+ }
+ }
+ return width / factor * 256;
+}
+
void ExcelExport::convertSheet(KSpread::Sheet* sheet)
{
XlsRecordOutputStream& o = *d->out;
@@ -227,11 +246,34 @@
o.writeRecord(VCenterRecord(0));
o.writeRecord(SetupRecord(0));
- o.writeRecord(DefaultColWidthRecord(0));
- // ColInfo
+ QRect area = sheet->usedArea();
+ o.writeRecord(DefaultColWidthRecord(0)); // TODO: real defaultColWidthRecord
{
+ ColInfoRecord cir(0);
+ for (int i = 1; i <= area.right(); ++i) {
+ const KSpread::ColumnFormat* column = sheet->columnFormat(i);
+ unsigned w = convertColumnWidth(column->width());
+ if (w != cir.width() || column->isHidden() != cir.isHidden() || \
column->isDefault() != !cir.isNonDefaultWidth()) { + if (i > 1) {
+ o.writeRecord(cir);
+ }
+ cir.setFirstColumn(i-1);
+ cir.setWidth(w);
+ cir.setHidden(column->isHidden());
+ cir.setNonDefaultWidth(!column->isDefault());
+ }
+ cir.setLastColumn(i-1);
+ }
+ o.writeRecord(cir);
+ }
+
+ {
DimensionRecord dr(0);
+ dr.setFirstRow(area.top()-1);
+ dr.setFirstColumn(area.left()-1);
+ dr.setLastRowPlus1(area.bottom());
+ dr.setLastColumnPlus1(area.right());
o.writeRecord(dr);
}
--- trunk/koffice/filters/kspread/excel/sidewinder/records.xml #1169648:1169649
@@ -209,7 +209,10 @@
<field name="xfIndex" type="unsigned" size="16" />
<field name="hidden" type="bool" size="1" />
- <field name="reserved0" size="7" />
+ <field name="nonDefaultWidth" type="bool" size="1" />
+ <field name="bestFit" type="bool" size="1" />
+ <field name="showPhonetic" type="bool" size="1" />
+ <field name="reserved0" size="4" />
<field name="outlineLevel" type="unsigned" size="3" />
<field name="reserved1" size="1" />
<field name="notCollapsed" type="bool" size="1" />
@@ -634,7 +637,7 @@
</record>
<record name="DefaultColWidth" id="0x55">
- <field name="cchdefColWidth" type="unsigned" size="16" />
+ <field name="cchdefColWidth" type="unsigned" size="16" default="8" />
</record>
<record name="HCenter" id="0x0083">
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic