75 lines
3.1 KiB
Plaintext
75 lines
3.1 KiB
Plaintext
Type xlsxChart = Class(TSChart)
|
|
///缺省构造函数
|
|
Function Create(sheet,excel); overload;
|
|
Begin
|
|
excel_ := excel;
|
|
class(TSChart).Create(chartData);
|
|
chartId_ := excel.WorkBook().GetFilesCount('xl/charts/chart') + 1;
|
|
drawingRID_ := excel_.WorkBook().GetSheetDrawing(sheet);
|
|
drawingXmlObj_ := excel_.WorkBook().GetXmlFileObj('xl/drawings/drawing' $ drawingRID_ $ '.xml');
|
|
drawingRelsObj := excel_.WorkBook().GetDrawingRelsFile(drawingRID_);
|
|
[chartRid_, find] := class(TSXml).FindRelationshipRid(drawingRelsObj, '');
|
|
chartRid_ ++;
|
|
class(TSXml).AddRelationshipRid(drawingRelsObj, '../charts/chart'+inttostr(chartId_)+'.xml', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', 'rId' + inttostr(chartRid_));
|
|
xlChartFileName_ := 'xl/charts/chart'+inttostr(chartId_)+'.xml';
|
|
content_xml := excel_.WorkBook().GetXmlFileObj(class(TSXml).GetFileName('Content_Types'));
|
|
class(TSXml).AddOverrideContentType(content_xml, '/' + xlChartFileName_, 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml');
|
|
End;
|
|
|
|
class Function NewObject(sheet, excel);
|
|
Begin
|
|
excel_ := excel;
|
|
o := excel_.WorkBook().GetSheetObj(sheet);//sheet存在
|
|
if not ifObj(o, chart) then return 0;
|
|
return new xlsxChart(sheet, excel);
|
|
End;
|
|
|
|
Function AddChart(range, chartData);
|
|
Begin
|
|
chartData_ := chartData;
|
|
excel_.Zip().Add(xlChartFileName_, GetDefaultXml());
|
|
xmlObj := excel_.Zip().Get(xlChartFileName_);
|
|
Apply(xmlObj);
|
|
|
|
a := str2array(range,':');
|
|
if length(a) <> 2 then return array(1,'Invalid params.');
|
|
[err1, col1,row1] := excel_.CellNameToCoordinates(a[0]);
|
|
[err2, col2,row2] := excel_.CellNameToCoordinates(a[1]);
|
|
if err1 or err2 then return array(1,'Invalid params.');
|
|
o := TOfficeObj('TtwoCellAnchor');
|
|
o.XFrom.Col := col1 - 1;
|
|
o.XFrom.ColOff := chartData.BegColOff ? chartData.BegColOff : 0;
|
|
o.XFrom.Row := row1 - 1;
|
|
o.XFrom.RowOff := chartData.BegRowOff ? chartData.BegRowOff : 0;
|
|
|
|
o.XTo.Col := col2;
|
|
o.XTo.ColOff := chartData.EndColOff ? chartData.EndColOff : 0;
|
|
o.XTo.Row := row2;
|
|
o.XTo.RowOff := chartData.EndRowOff ? chartData.EndRowOff : 0;
|
|
|
|
//o.GraphicFrame.macro := '';
|
|
o.GraphicFrame.GraphicFramePr.Name := chartData.Name ? chartData.Name : 'Chart' + inttostr(chartId_);
|
|
o.GraphicFrame.GraphicFramePr.Id := class(TSXml).GetcNvPrID(drawingXmlObj_);
|
|
o.GraphicFrame.GraphicFramePr.cNvGraphicFramePr := true;
|
|
|
|
o.GraphicFrame.XFrm.Off.X := 0;
|
|
o.GraphicFrame.XFrm.Off.Y := 0;
|
|
o.GraphicFrame.XFrm.Ext.Cx := 0;
|
|
o.GraphicFrame.XFrm.Ext.Cy := 0;
|
|
|
|
o.GraphicFrame.Graphic.GraphicData.uri := 'http://schemas.openxmlformats.org/drawingml/2006/chart';
|
|
o.GraphicFrame.Graphic.GraphicData.Rid := 'rId' + inttostr(chartRid_);
|
|
o.GraphicFrame.Graphic.GraphicData.R := 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
|
|
o.GraphicFrame.Graphic.GraphicData.C := 'http://schemas.openxmlformats.org/drawingml/2006/chart';
|
|
o.ClientData.ObjectType := true;
|
|
node := drawingXmlObj_.FirstChild('xdr:wsDr').InsertEndChild(o.Marshal());
|
|
End;
|
|
private
|
|
[weakref]excel_;
|
|
drawingRID_:integer;
|
|
chartId_;
|
|
chartRid_;
|
|
xlChartFileName_;
|
|
drawingXmlObj_;
|
|
End;
|