diff --git a/components/fpspreadsheet/source/common/wikitable.pas b/components/fpspreadsheet/source/common/wikitable.pas
index d7e384b0f..9f2cd1d40 100644
--- a/components/fpspreadsheet/source/common/wikitable.pas
+++ b/components/fpspreadsheet/source/common/wikitable.pas
@@ -377,7 +377,7 @@ Format mediawiki:
*)
procedure TsWikiTableWriter.WriteToStrings_WikiMedia(AStrings: TStrings);
- function DoBorder(ABorder: TsCellBorder; ACell: PCell): String;
+ function DoBorder(AFormat: PsCellFormat; ABorder: TsCellBorder): String;
const
// (cbNorth, cbWest, cbEast, cbSouth, cbDiagUp, cbDiagDown)
BORDERNAMES: array[TsCellBorder] of string =
@@ -389,11 +389,9 @@ procedure TsWikiTableWriter.WriteToStrings_WikiMedia(AStrings: TStrings);
var
ls: TsLineStyle;
clr: TsColor;
- fmt: PsCellFormat;
begin
- fmt := Workbook.GetPointerToCellFormat(ACell^.FormatIndex);
- ls := fmt^.BorderStyles[ABorder].LineStyle;
- clr := fmt^.BorderStyles[ABorder].Color;
+ ls := AFormat^.BorderStyles[ABorder].LineStyle;
+ clr := AFormat^.BorderStyles[ABorder].Color;
Result := Format('border-%s:%s', [BORDERNAMES[ABorder], LINESTYLES[ls]]);
if clr <> scBlack then
Result := Result + ' ' + ColorToHTMLColorStr(clr) + '; ';
@@ -421,6 +419,7 @@ var
isHeader: Boolean;
borders: TsCellBorders;
fs: TFormatSettings;
+ fmt: PsCellFormat;
begin
FWorksheet := Workbook.GetFirstWorksheet();
FWorksheet.UpdateCaches;
@@ -458,10 +457,12 @@ begin
for i := 0 to FWorksheet.GetLastRowIndex() do
begin
AStrings.Add('|-');
+ lRow := FWorksheet.FindRow(i);
for j := 0 to FWorksheet.GetLastColIndex do
begin
lCell := FWorksheet.FindCell(i, j);
+ lCol := FWorksheet.FindCol(j);
lCurStr := FWorksheet.ReadAsText(lCell, fs);
// Check for invalid characters
@@ -477,7 +478,12 @@ begin
lRowSpanStr := '';
lColWidthStr := '';
lRowHeightStr := '';
- lCurUsedFormatting := FWorksheet.ReadUsedFormatting(lCell);
+
+ // Format
+ fmt := FWorksheet.GetPointerToEffectiveCellFormat(i, j);
+ if fmt <> nil then
+ lCurUsedFormatting := fmt^.UsedFormattingFields else
+ lCurUsedFormatting := [];
// Row header
isHeader := (soHasFrozenPanes in FWorksheet.Options) and
@@ -485,27 +491,21 @@ begin
// Column width (to be considered in first row)
if i = 0 then
- begin
- lCol := FWorksheet.FindCol(j);
- if lCol <> nil then
- lColWidthStr := Format(' width="%.0fpt"',
- [FWorkbook.ConvertUnits(lCol^.Width, FWorkbook.Units, suPoints)]);
- end;
+ lColWidthStr := Format(' width="%.0fpt"', [
+ FWorkbook.ConvertUnits(FWorksheet.GetColWidth(i), FWorkbook.Units, suPoints)
+ ]);
// Row height (to be considered in first column)
if j = 0 then
- begin
- lRow := FWorksheet.FindRow(i);
- if (lRow <> nil) and (lRow^.RowHeightType <> rhtDefault) then
- lRowHeightStr := Format(' height="%.0fpt"',
- [FWorkbook.ConvertUnits(lRow^.Height, FWorkbook.Units, suPoints)]);
- end;
+ lRowHeightStr := Format(' height="%.0fpt"', [
+ FWorkbook.ConvertUnits(FWorksheet.GetRowHeight(j), FWorkbook.Units, suPoints)
+ ]);
// Font
lFont := FWorkbook.GetDefaultFont;
- if (uffFont in lCurUsedFormatting) then
+ if (uffFont in lCurUsedFormatting) and (fmt <> nil) then
begin
- lFont := FWorksheet.ReadCellFont(lCell);
+ lFont := FWorkbook.GetFont(fmt^.FontIndex);
if fssBold in lFont.Style then lCurStr := '' + lCurStr + '';
if fssItalic in lFont.Style then lCurStr := '' + lCurStr + '';
if fssUnderline in lFont.Style then lCurStr := '' + lCurStr + '';
@@ -513,9 +513,12 @@ begin
end;
// Background color
- if uffBackground in lCurUsedFormatting then
+ if (fmt <> nil) and (uffBackground in lCurUsedFormatting) then
begin
- lCurColor := FWorksheet.ReadBackgroundColor(lCell);
+ if (fmt^.Background.Style = fsSolidFill) then
+ lCurColor := fmt^.Background.FgColor
+ else
+ lCurColor := fmt^.Background.BgColor;
lStyleStr := Format('background-color:%s;color:%s;', [
ColorToHTMLColorStr(lCurColor),
ColorToHTMLColorStr(lFont.Color)
@@ -523,9 +526,9 @@ begin
end;
// Horizontal alignment
- if uffHorAlign in lCurUsedFormatting then
+ if (fmt <> nil) and (uffHorAlign in lCurUsedFormatting) then
begin
- horAlign := FWorksheet.ReadHorAlignment(lCell);
+ horAlign := fmt^.HorAlignment;
if horAlign = haDefault then
case lCell^.ContentType of
cctNumber,
@@ -541,9 +544,9 @@ begin
end;
// vertical alignment
- if uffVertAlign in lCurUsedFormatting then
+ if (fmt <> nil) and (uffVertAlign in lCurUsedFormatting) then
begin
- vertAlign := FWorksheet.ReadVertAlignment(lCell);
+ vertAlign := fmt^.VertAlignment;
case vertAlign of
vaTop : lStyleStr := lStyleStr + 'vertical-align:top;';
vaCenter : lStyleStr := lStyleStr + 'vertical-align:center;';
@@ -552,17 +555,18 @@ begin
end;
// borders
- if uffBorder in lCurUsedFormatting then
+ if (fmt <> nil) and (uffBorder in lCurUsedFormatting) then
begin
- borders := FWorksheet.ReadCellBorders(lCell);
+ borders := fmt^.Border;
+// borders := FWorksheet.ReadCellBorders(lCell);
if (cbWest in borders) then
- lStyleStr := lStyleStr + DoBorder(cbWest, lCell);
+ lStyleStr := lStyleStr + DoBorder(fmt, cbWest);
if (cbEast in borders) then
- lStyleStr := lStyleStr + DoBorder(cbEast, lCell);
+ lStyleStr := lStyleStr + DoBorder(fmt, cbEast);
if (cbNorth in borders) then
- lStyleStr := lStyleStr + DoBorder(cbNorth, lCell);
+ lStyleStr := lStyleStr + DoBorder(fmt, cbNorth);
if (cbSouth in borders) then
- lStyleStr := lStyleStr + DoBorder(cbSouth, lCell);
+ lStyleStr := lStyleStr + DoBorder(fmt, cbSouth);
end;
// Merged cells