Attached patch enables simple (90°) rotation for Excel 4.0 and line wrap
and vertical alignment for Excel >= 3.0
It also fixes the simple outline (box) support for Excel 2.0 and the
one type of background (a 12.5% dot) which apparently existed in Excel 2.0
The patch has been tested here, seems to work fine and doesn't touch code
used for modern Excel sheets anyway.
Please apply to CVS HEAD to improve import of pre-OLE era Excel sheets
Nick.
--- ms-excel-read.c.old 2005-03-13 00:16:31.000000000 +0000
+++ ms-excel-read.c 2005-07-04 13:56:34.000000000 +0100
@@ -1880,10 +1880,33 @@
case 2: xf->halign = HALIGN_CENTER; break;
case 3: xf->halign = HALIGN_RIGHT; break;
case 4: xf->halign = HALIGN_FILL; break;
+ case 5: xf->halign = HALIGN_JUSTIFY; break;
+ case 6: xf->halign = HALIGN_CENTER_ACROSS_SELECTION; break;
}
- xf->valign = VALIGN_BOTTOM;
- xf->rotation = 0;
+ xf->valign = VALIGN_BOTTOM;
+ xf->rotation = 0;
+
+ if (ver >= MS_BIFF_V4) {
+ xf->wrap_text = (data & 0x0008) != 0;
+ switch (data & 0x30) {
+ case 0x00: xf->valign = VALIGN_TOP; break;
+ case 0x10: xf->valign = VALIGN_CENTER; break;
+ default :
+ case 0x20: xf->valign = VALIGN_BOTTOM; break;
+ }
+ switch (data & 0xc0) {
+ case 0x00: xf->rotation = 0; break;
+ case 0x40: xf->rotation = -1; break;
+ case 0x80: xf->rotation = 90; break;
+ case 0xc0: xf->rotation = 270; break;
+ }
+ } else if (ver >= MS_BIFF_V3) {
+ xf->wrap_text = (data & 0x0008) != 0;
+ if (xf->wrap_text) {
+ xf->valign = VALIGN_TOP;
+ }
+ }
xf->indent = 0;
xf->differences = 0;
@@ -1914,20 +1937,20 @@
xf->border_type[STYLE_RIGHT] = biff_xf_map_border (data & 0x07);
subdata = data >> 3;
xf->border_color[STYLE_RIGHT] = (subdata==24) ? 64 :
subdata;
- } else {
+ } else /* MS_BIFF_V2 */ {
xf->pat_foregnd_col = 0;
- xf->pat_backgnd_col = 0;
- xf->fill_pattern_idx = 0;
+ xf->pat_backgnd_col = 1;
data = q->data[3];
- xf->border_type[STYLE_TOP] = (data & 0x08) ? 1 : 0;
- xf->border_color[STYLE_TOP] = 0;
- xf->border_type[STYLE_BOTTOM] = (data & 0x10) ? 1: 0;
- xf->border_color[STYLE_BOTTOM] = 0;
- xf->border_type[STYLE_LEFT] = (data & 0x20) ? 1: 0;;
+ xf->border_type[STYLE_LEFT] = (data & 0x08) ? 1 : 0;
xf->border_color[STYLE_LEFT] = 0;
- xf->border_type[STYLE_RIGHT] = (data & 0x40) ? 1: 0;;
+ xf->border_type[STYLE_RIGHT] = (data & 0x10) ? 1: 0;
xf->border_color[STYLE_RIGHT] = 0;
+ xf->border_type[STYLE_TOP] = (data & 0x20) ? 1: 0;
+ xf->border_color[STYLE_TOP] = 0;
+ xf->border_type[STYLE_BOTTOM] = (data & 0x40) ? 1: 0;
+ xf->border_color[STYLE_BOTTOM] = 0;
+ xf->fill_pattern_idx = (data & 0x80) ? 5: 0;
}
xf->border_type[STYLE_DIAGONAL] = 0;
_______________________________________________
gnumeric-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gnumeric-list