From b9af2f71bbd4b764b4f96f3baafe3824a49589b3 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Wed, 1 Jul 2009 11:26:56 +0000 Subject: [PATCH] =?UTF-8?q?fpspreadsheet:=20Adds=20OpenDocument=20read=20s?= =?UTF-8?q?upport=20from=20Jos=C3=A9=20Luis=20Jurado=20Rinc=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@888 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpsopendocument.pas | 147 ++++++++++++++++++- 1 file changed, 143 insertions(+), 4 deletions(-) diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index 250759347..e36715de1 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -16,7 +16,7 @@ Specifications obtained from: http://docs.oasis-open.org/office/v1.1/OS/OpenDocument-v1.1.pdf -AUTHORS: Felipe Monteiro de Carvalho +AUTHORS: Felipe Monteiro de Carvalho / Jose Luis Jurado Rincon } unit fpsopendocument; @@ -28,11 +28,27 @@ interface uses Classes, SysUtils, - fpszipper, {NOTE: fpszipper is the latest zipper.pp Change to standard zipper when FPC 2.4 is released } - fpspreadsheet; + fpszipper, {NOTE: fpszipper is the latest zipper.pp Change to standard zipper when FPC 2.4 is released. Changed by JLJR} + fpspreadsheet, + xmlread, DOM; type + { TsSpreadOpenDocReader } + + TsSpreadOpenDocReader = class(TsCustomSpreadReader) + private + FWorksheet: TsWorksheet; + function GetAttrValue(ANode : TDOMNode; AAttrName : string) : string; + public + { General reading methods } + procedure ReadFromFile(AFileName: string; AData: TsWorkbook); override; + { Record writing methods } + procedure ReadFormula(ARow : Word; ACol : Word; ACellNode: TDOMNode); + procedure ReadLabel(ARow : Word; ACol : Word; ACellNode: TDOMNode); + procedure ReadNumber(ARow : Word; ACol : Word; ACellNode: TDOMNode); + end; + { TsSpreadOpenDocWriter } TsSpreadOpenDocWriter = class(TsCustomSpreadWriter) @@ -100,6 +116,129 @@ const SCHEMAS_XMLNS_XSD = 'http://www.w3.org/2001/XMLSchema'; SCHEMAS_XMLNS_XSI = 'http://www.w3.org/2001/XMLSchema-instance'; +{ TsSpreadOpenDocReader } + +function TsSpreadOpenDocReader.GetAttrValue(ANode : TDOMNode; AAttrName : string) : string; +var + i : integer; + Found : Boolean; +begin + Found:=false; + i:=0; + Result:=''; + while not Found and (i'' then + ReadFormula(Row+RowsCount,Col+ColsCount,CellNode) + else + if ParamValueType='float' then + ReadNumber(Row+RowsCount,Col+ColsCount,CellNode); + end; //for ColsCount + end; //for RowsCount + + Inc(Col,ColsCount+1); + CellNode:=CellNode.NextSibling; + end; //while Assigned(CellNode) + + Inc(Row,RowsCount+1); + RowNode:=RowNode.NextSibling; + end; // while Assigned(RowNode) + + TableNode:=TableNode.NextSibling; + end; //while Assigned(TableNode) + + Doc.Free; +end; + +procedure TsSpreadOpenDocReader.ReadFormula(ARow: Word; ACol : Word; ACellNode : TDOMNode); +begin + +end; + +procedure TsSpreadOpenDocReader.ReadLabel(ARow: Word; ACol : Word; ACellNode : TDOMNode); +begin + FWorkSheet.WriteUTF8Text(ARow,ACol,ACellNode.TextContent); +end; + +procedure TsSpreadOpenDocReader.ReadNumber(ARow: Word; ACol : Word; ACellNode : TDOMNode); +begin + FWorkSheet.WriteNumber(Arow,ACol,StrToFloat(ACellNode.TextContent)); +end; + { TsSpreadOpenDocWriter } procedure TsSpreadOpenDocWriter.WriteGlobalFiles; @@ -416,7 +555,7 @@ end; } initialization - RegisterSpreadFormat(TsCustomSpreadReader, TsSpreadOpenDocWriter, sfOpenDocument); + RegisterSpreadFormat(TsSpreadOpenDocReader, TsSpreadOpenDocWriter, sfOpenDocument); end.