TSOffice/funcext/TSOffice/TOfficeObj.tsf

15565 lines
432 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Version 1.6.6
Function TOfficeObj(n);
Begin
case lowercase(n) of
"nodeinfo":
return new NodeInfo("");
"trange":
return new TRange("");
"tcell":
return new TCell();
"tfont":
return new TFont();
"tcomment":
return new TComment();
"tcomments":
return new TComments();
"trichtext":
return new TRichText();
"txdrfromto":
return new TxdrFromTo();
"toff":
return new TOff();
"text":
return new TExt();
"txfrm":
return new TXfrm();
"tclientdata":
return new TClientData();
"tgraphicframepr":
return new TGraphicFramePr();
"tgraphicframe":
return new TGraphicFrame();
"ttwocellanchor":
return new TtwoCellAnchor();
"tcnvpicpr":
return new TcNvPicPr();
"tpictureformat":
return new TPictureFormat();
"tshapeformat":
return new TShapeFormat();
"tchart":
return new TChart();
"tlegend":
return new TLegend();
"tchartaxis":
return new TChartAxis();
"tnumfont":
return new TNumFont();
"tnamelayout":
return new TNameLayout();
"tpt":
return new Tpt();
"tstrcache":
return new TStrCache();
"tstrref":
return new TStrRef();
"tccat":
return new TcCat();
"tnumcache":
return new TNumCache();
"tnumref":
return new TNumRef();
"tcval":
return new TcVal();
"ttx":
return new TTx();
"tsolidfill":
return new TSolidFill();
"tschemeclr":
return new TSchemeClr();
"tln":
return new TLn();
"tcontourclr":
return new TContourClr();
"tsp3d":
return new TSp3D();
"tsppr":
return new TspPr();
"tdpt":
return new TDpt();
"tmarker":
return new TMarker();
"tser":
return new TSer();
"tdlbls":
return new TdLbls();
"tccharts":
return new TcCharts();
"tcscaling":
return new TcScaling();
"tcchartlines":
return new TcChartLines();
"tcnumfmt":
return new TcNumFmt();
"tar":
return new TaR();
"taendpararpr":
return new TaEndParaRPr();
"tap":
return new TaP();
"tappr":
return new TaPPr();
"talatin":
return new TaLatin();
"taea":
return new TaEa();
"tacs":
return new TaCs();
"tarpr":
return new TaRPr();
"tabodypr":
return new TaBodyPr();
"ttxpr":
return new TTxPr();
"tcaxs":
return new TcAxs();
"tplotarea":
return new TplotArea();
"tview3d":
return new TView3D();
"tborder":
return new TBorder();
"tborders":
return new TBorders();
"tnumfmts":
return new TNumFmts();
"tgradient":
return new TGradient();
"tfills":
return new TFills();
"tpattern":
return new TPattern();
"tstop":
return new TStop();
"talignment":
return new TAlignment();
"tprotection":
return new TProtection();
"tstyle":
return new TStyle();
"txf":
return new TXf();
"theaderfooter":
return new THeaderFooter();
"tmargins":
return new TMargins();
"thyperlink":
return new THyperLink();
"tsheetview":
return new TSheetView();
"tpane":
return new TPane();
"tselection":
return new TSelection();
"tpagelayout":
return new TPageLayout();
"tappproperty":
return new TAppProperty();
"tcoreproperty":
return new TCoreProperty();
"tbr":
return new TBr();
"twfont":
return new TwFont();
"twrpr":
return new TwrPr();
"tnumpr":
return new TNumPr();
"ttextbox":
return new TTextBox();
"twhyperlinkimpl":
return new TWHyperLinkImpl();
"twppr":
return new TwpPr();
"tcnvgraphicframepr":
return new TcNvGraphicFramePr();
"tnvpicpr":
return new TnvPicPr();
"tcnvpr":
return new TCNvPr();
"textlst":
return new TExtLst();
"taext":
return new TAext();
"tprstgeom":
return new TprstGeom();
"tblipfill":
return new TblipFill();
"twline":
return new TwLine();
"tpicsppr":
return new TpicsPpr();
"tblip":
return new TBlip();
"tstretch":
return new TStretch();
"tref":
return new TRef();
"tscheme":
return new TScheme();
"txdrstyle":
return new TXdrStyle();
"tpic":
return new TPic();
"tgraphicdata":
return new TGraphicData();
"tgraphic":
return new TGraphic();
"twinline":
return new TwInline();
"twdrawing":
return new TwDrawing();
"ttext":
return new TText();
"trun":
return new TRun();
"tfootnoteimpl":
return new TFootnoteImpl();
"tfootnotebody":
return new TFootnoteBody();
"tbookmark":
return new TBookMark();
"tfldsimple":
return new TFldSimple();
"tparagraph":
return new TParagraph();
"twbody":
return new TwBody();
"toptinfo":
return new TOptInfo();
"trevision":
return new TRevision();
"tdoccomment":
return new TDocComment();
"tcol":
return new TCol();
"tcols":
return new TCols();
"tpagemargin":
return new TPageMargin();
"tdocgrid":
return new TDocGrid();
"treference":
return new TReference();
"tpageborders":
return new TPageBorders();
"tpage":
return new TPage();
"tdocsection":
return new TDocSection();
"tcellmerge":
return new TcellMerge();
"twtcpr":
return new TwTcPr();
"twtc":
return new TwTc();
"twtrpr":
return new TwTrPr();
"twcnfstyle":
return new TwCnfStyle();
"twshading":
return new TwShading();
"ttblcellmar":
return new TTblCellMar();
"ttblprex":
return new TTblPrEx();
"twtr":
return new TwTr();
"twborder":
return new TwBorder();
"twtblborders":
return new TwTblBorders();
"twtblppr":
return new TwTblpPr();
"twtblpr":
return new TwTblPr();
"twgridcol":
return new TwGridCol();
"twtblgrid":
return new TwTblGrid();
"ttable":
return new TTable();
"tcoreproperties":
return new TCoreProperties();
"tpicture":
return new TPicture();
"tpbdr":
return new TpBdr();
"tlatentstyle":
return new TLatentStyle();
"ttblstylepr":
return new TtblStylePr();
"tdocxstyle":
return new TDocxStyle();
"tdocpartobj":
return new TDocPartObj();
"tsdtpr":
return new TSdtPr();
"tsdtendpr":
return new TSdtEndPr();
"tsdtcontent":
return new TSdtContent();
"ttablecontentimpl":
return new TTableContentImpl();
"ttabstops":
return new TTabStops();
"ttabstop":
return new TTabStop();
"tnumber":
return new TNumber();
"tlevel":
return new TLevel();
"tnumstyle":
return new TNumStyle();
"texceltable":
return new TExcelTable();
"ttablestyle":
return new TTableStyle();
"tbreak":
return new TBreak();
"tprotect":
return new TProtect();
"tcalcpr":
return new TCalcPr();
End;
End;
///////////////////////////////////////////////////////////////
/// TFont
///////////////////////////////////////////////////////////////
type TFont=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'font');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Name read readXMLName write writeXMLName;
Function readXMLName();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Name'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLName);
End;
Function writeXMLName(str);
Begin
XMLName := class(TSXml).CurCodePageToUtf8(str);
End;
Property Size read readXMLSize write writeXMLSize;
Function readXMLSize();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Size'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLSize);
End;
Function writeXMLSize(str);
Begin
XMLSize := class(TSXml).CurCodePageToUtf8(str);
End;
Property Bold read readXMLBold write writeXMLBold;
Function readXMLBold();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Bold'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLBold);
End;
Function writeXMLBold(str);
Begin
XMLBold := class(TSXml).CurCodePageToUtf8(str);
End;
Property Italic read readXMLItalic write writeXMLItalic;
Function readXMLItalic();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Italic'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLItalic);
End;
Function writeXMLItalic(str);
Begin
XMLItalic := class(TSXml).CurCodePageToUtf8(str);
End;
Property Color read readXMLColor write writeXMLColor;
Function readXMLColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Color'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLColor);
End;
Function writeXMLColor(str);
Begin
XMLColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ThemeColor read readXMLThemeColor write writeXMLThemeColor;
Function readXMLThemeColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ThemeColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLThemeColor);
End;
Function writeXMLThemeColor(str);
Begin
XMLThemeColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property Strikethrough read readXMLStrikethrough write writeXMLStrikethrough;
Function readXMLStrikethrough();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Strikethrough'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLStrikethrough);
End;
Function writeXMLStrikethrough(str);
Begin
XMLStrikethrough := class(TSXml).CurCodePageToUtf8(str);
End;
Property Script read readXMLScript write writeXMLScript;
Function readXMLScript();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Script'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLScript);
End;
Function writeXMLScript(str);
Begin
XMLScript := class(TSXml).CurCodePageToUtf8(str);
End;
Property Charset read readXMLCharset write writeXMLCharset;
Function readXMLCharset();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Charset'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCharset);
End;
Function writeXMLCharset(str);
Begin
XMLCharset := class(TSXml).CurCodePageToUtf8(str);
End;
Property Underline read readXMLUnderline write writeXMLUnderline;
Function readXMLUnderline();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Underline'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLUnderline);
End;
Function writeXMLUnderline(str);
Begin
XMLUnderline := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Name','name':'name','obj':XMLName,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Size','name':'sz','obj':XMLSize,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Bold','name':'b','obj':XMLBold,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'Italic','name':'i','obj':XMLItalic,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'Color','name':'color','obj':XMLColor,'attrEx':'','nodeType':'','attrName':'rgb', 'desc':'', 'class':'')
,('field':'ThemeColor','name':'color','obj':XMLThemeColor,'attrEx':'theme','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Strikethrough','name':'strike','obj':XMLStrikethrough,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'Script','name':'vertAlign','obj':XMLScript,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Charset','name':'charset','obj':XMLCharset,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Underline','name':'u','obj':XMLUnderline,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'FontStyle','name':'fontstyle','obj':FontStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'OutlineFont','name':'outlinefont','obj':OutlineFont,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Shadow','name':'shadow','obj':Shadow,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'TintAndShade','name':'tintandshade','obj':TintAndShade,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Background','name':'background','obj':Background,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'rFont','name':'rFont','obj':rFont,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ThemeFont','name':'scheme','obj':ThemeFont,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ColorIndex','name':'color','obj':ColorIndex,'attrEx':'index','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Subscript','name':'subscript','obj':Subscript,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Superscript','name':'superscript','obj':Superscript,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
XMLName;
XMLSize;
XMLBold;
XMLItalic;
XMLColor;
XMLThemeColor;
XMLStrikethrough;
XMLScript;
XMLCharset;
XMLUnderline;
FontStyle;
OutlineFont;
Shadow;
TintAndShade;
Background;
rFont;
ThemeFont;
ColorIndex;
Subscript;
Superscript;
End;
///////////////////////////////////////////////////////////////
/// TComment
///////////////////////////////////////////////////////////////
type TComment=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'r');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Font := new TFont(self, 'rPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Font.InitRootNode(node);
End;
Property Text read readXMLText write writeXMLText;
Function readXMLText();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Text'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLText);
End;
Function writeXMLText(str);
Begin
XMLText := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Font','name':Font.NodeName,'obj':Font,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TFont')
,('field':'Text','name':'t','obj':XMLText,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Space','name':'t','obj':Space,'attrEx':'xml:space','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Font;
XMLText;
Space;
End;
///////////////////////////////////////////////////////////////
/// TComments
///////////////////////////////////////////////////////////////
type TComments=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'comment/text');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("AuthorId", "authorId", AuthorId, ""),("Ref", "ref", Ref, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
Function AddComment(text);
Begin
o := new TComment(self, "r");
ExtNodes[ length(ExtNodes) ] := array("field":"", "name":"r", "obj":o, "attrEx":"", "nodeType":"");
o.Text := text;
o.Font.Bold := "";
o.Font.Size := 9;
o.Font.rFont := "宋体";
o.Font.Charset := 134;
return o;
End;
Function Comment(index);
Begin
return GetNode(index);
End;
//Attributes
AuthorId;
Ref;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TRichText
///////////////////////////////////////////////////////////////
type TRichText=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'si');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
Function AddText(text);
Begin
o := new TComment(self, "r");
ExtNodes[ length(ExtNodes) ] := array("field":"", "name":"r", "obj":o, "attrEx":"", "nodeType":"");
o.Text := text;
return o;
End;
Function RichText(index);
Begin
return GetNode(index);
End;
//Attributes
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TxdrFromTo
///////////////////////////////////////////////////////////////
type TxdrFromTo=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xdr:from');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Col','name':'xdr:col','obj':Col,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'ColOff','name':'xdr:colOff','obj':ColOff,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Row','name':'xdr:row','obj':Row,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'RowOff','name':'xdr:rowOff','obj':RowOff,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Col;
ColOff;
Row;
RowOff;
End;
///////////////////////////////////////////////////////////////
/// TOff
///////////////////////////////////////////////////////////////
type TOff=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:off');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("X", "x", X, ""),("Y", "y", Y, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
X;
Y;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TExt
///////////////////////////////////////////////////////////////
type TExt=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:ext');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Cx", "cx", Cx, ""),("Cy", "cy", Cy, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Cx;
Cy;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TXfrm
///////////////////////////////////////////////////////////////
type TXfrm=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:xfrm');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Off := new TOff(self, 'a:off');
Ext := new TExt(self, 'a:ext');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Off.InitRootNode(node);
Ext.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Off','name':Off.NodeName,'obj':Off,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TOff')
,('field':'Ext','name':Ext.NodeName,'obj':Ext,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TExt')
) union ExtNodes;
End;
//Attributes
//Nodes
Off;
Ext;
End;
///////////////////////////////////////////////////////////////
/// TClientData
///////////////////////////////////////////////////////////////
type TClientData=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'x:ClientData');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
ObjectType := "Note";
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("ObjectType", "ObjectType", ObjectType, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'MoveWithCells','name':'x:MoveWithCells','obj':MoveWithCells,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'SizeWithCells','name':'x:SizeWithCells','obj':SizeWithCells,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'Anchor','name':'x:Anchor','obj':Anchor,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'AutoFill','name':'x:AutoFill','obj':AutoFill,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Row','name':'x:Row','obj':Row,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Column','name':'x:Column','obj':Column,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
ObjectType;
//Nodes
MoveWithCells;
SizeWithCells;
Anchor;
AutoFill;
Row;
Column;
End;
///////////////////////////////////////////////////////////////
/// TGraphicFramePr
///////////////////////////////////////////////////////////////
type TGraphicFramePr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xdr:cNvGraphicFramePr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Id','name':'xdr:cNvPr','obj':Id,'attrEx':'id','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Name','name':'xdr:cNvPr','obj':Name,'attrEx':'name','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'cNvGraphicFramePr','name':'xdr:cNvGraphicFramePr','obj':cNvGraphicFramePr,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Id;
Name;
cNvGraphicFramePr;
End;
///////////////////////////////////////////////////////////////
/// TGraphicFrame
///////////////////////////////////////////////////////////////
type TGraphicFrame=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xdr:graphicFrame');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
GraphicFramePr := new TGraphicFramePr(self, 'xdr:nvGraphicFramePr');
Xfrm := new TXfrm(self, 'xdr:xfrm');
Graphic := new TGraphic(self, 'a:graphic');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
GraphicFramePr.InitRootNode(node);
Xfrm.InitRootNode(node);
Graphic.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("macro", "macro", macro, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'GraphicFramePr','name':GraphicFramePr.NodeName,'obj':GraphicFramePr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TGraphicFramePr')
,('field':'Xfrm','name':Xfrm.NodeName,'obj':Xfrm,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TXfrm')
,('field':'Graphic','name':Graphic.NodeName,'obj':Graphic,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TGraphic')
) union ExtNodes;
End;
//Attributes
macro;
//Nodes
GraphicFramePr;
Xfrm;
Graphic;
End;
///////////////////////////////////////////////////////////////
/// TtwoCellAnchor
///////////////////////////////////////////////////////////////
type TtwoCellAnchor=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xdr:twoCellAnchor');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
XFrom := new TxdrFromTo(self, 'xdr:from');
XTo := new TxdrFromTo(self, 'xdr:to');
GraphicFrame := new TGraphicFrame(self, 'xdr:graphicFrame');
Pic := new TPic(self, 'xdr:pic');
ClientData := new TClientData(self, 'xdr:clientData');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
XFrom.InitRootNode(node);
XTo.InitRootNode(node);
GraphicFrame.InitRootNode(node);
Pic.InitRootNode(node);
ClientData.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("EditAs", "editAs", EditAs, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'XFrom','name':XFrom.NodeName,'obj':XFrom,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TxdrFromTo')
,('field':'XTo','name':XTo.NodeName,'obj':XTo,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TxdrFromTo')
,('field':'GraphicFrame','name':GraphicFrame.NodeName,'obj':GraphicFrame,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TGraphicFrame')
,('field':'Pic','name':Pic.NodeName,'obj':Pic,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TPic')
,('field':'ClientData','name':ClientData.NodeName,'obj':ClientData,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'TClientData')
) union ExtNodes;
End;
//Attributes
EditAs;
//Nodes
XFrom;
XTo;
GraphicFrame;
Pic;
ClientData;
End;
///////////////////////////////////////////////////////////////
/// TcNvPicPr
///////////////////////////////////////////////////////////////
type TcNvPicPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xdr:cNvPicPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'PicLocks','name':'a:picLocks','obj':PicLocks,'attrEx':'noChangeAspect','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
PicLocks;
End;
///////////////////////////////////////////////////////////////
/// TPictureFormat
///////////////////////////////////////////////////////////////
type TPictureFormat=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, '');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
BegColOff := 0;
BegRowOff := 0;
EndColOff := 0;
EndRowOff := 0;
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'BegColOff','name':'BegColOff','obj':BegColOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BegRowOff','name':'BegRowOff','obj':BegRowOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'EndColOff','name':'EndColOff','obj':EndColOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'EndRowOff','name':'EndRowOff','obj':EndRowOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
BegColOff;
BegRowOff;
EndColOff;
EndRowOff;
End;
///////////////////////////////////////////////////////////////
/// TShapeFormat
///////////////////////////////////////////////////////////////
type TShapeFormat=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, '');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'BegColOff','name':'BegColOff','obj':BegColOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BegRowOff','name':'BegRowOff','obj':BegRowOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'EndColOff','name':'EndColOff','obj':EndColOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'EndRowOff','name':'EndRowOff','obj':EndRowOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
Function AddText(text);
Begin
o := new TaP(self, "a:p");
o.R.Rpr.Lang := "en-US";
o.R.Rpr.AltLang := "zh-CN";
o.R.Rpr.SZ := 2400;
o.Ppr.Algn := "l";
ExtNodes[ length(ExtNodes) ] := array("field":"", "name":"a:p", "obj":o, "attrEx":"", "nodeType":"");
return o;
End;
//Attributes
//Nodes
BegColOff;
BegRowOff;
EndColOff;
EndRowOff;
End;
///////////////////////////////////////////////////////////////
/// TChartImpl
///////////////////////////////////////////////////////////////
type TChartImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 't:chart');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Series := array();
XAxis := new TChartAxis(self, 'XAxis');
YAxis := new TChartAxis(self, 'YAxis');
Legend := new TLegend(self, 'c:legend');
Plotarea := new TplotArea(self, 'c:plotArea');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
XAxis.InitRootNode(node);
YAxis.InitRootNode(node);
Legend.InitRootNode(node);
Plotarea.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Width','name':'Width','obj':Width,'attrEx':'','nodeType':'','attrName':'', 'desc':'word图表宽度cm', 'class':'')
,('field':'Height','name':'Height','obj':Height,'attrEx':'','nodeType':'','attrName':'', 'desc':'word图表高度cm', 'class':'')
,('field':'BegColOff','name':'BegColOff','obj':BegColOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'BegRowOff','name':'BegRowOff','obj':BegRowOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'EndColOff','name':'EndColOff','obj':EndColOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'EndRowOff','name':'EndRowOff','obj':EndRowOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'Name','name':'Name','obj':Name,'attrEx':'','nodeType':'','attrName':'', 'desc':'图表名称', 'class':'')
,('field':'Title','name':'Title','obj':Title,'attrEx':'','nodeType':'','attrName':'', 'desc':'图表标题', 'class':'')
,('field':'Type','name':'Type','obj':Type,'attrEx':'','nodeType':'','attrName':'', 'desc':'图表类型', 'class':'')
,('field':'VaryColors','name':'VaryColors','obj':VaryColors,'attrEx':'','nodeType':'','attrName':'', 'desc':'varyColors (按点) 改变颜色,此元素指定系列中的每个数据标记具有不同的颜色。', 'class':'')
,('field':'ShowLegendKey','name':'ShowLegendKey','obj':ShowLegendKey,'attrEx':'','nodeType':'','attrName':'', 'desc':'如果数据标签的图例项标示可见,则该属性值为 True读/写 Boolean。', 'class':'')
,('field':'ShowVal','name':'ShowVal','obj':ShowVal,'attrEx':'','nodeType':'','attrName':'', 'desc':'允许用户在图表中显示数据标签的值,读/写 Boolean。', 'class':'')
,('field':'ShowCatName','name':'ShowCatName','obj':ShowCatName,'attrEx':'','nodeType':'','attrName':'', 'desc':'允许用户在图表中显示数据标签的分类名称,读/写 Boolean。', 'class':'')
,('field':'ShowSerName','name':'ShowSerName','obj':ShowSerName,'attrEx':'','nodeType':'','attrName':'', 'desc':'允许用户在图表中显示数据标签的系列名称,读/写 Boolean。', 'class':'')
,('field':'ShowBubbleSize','name':'ShowBubbleSize','obj':ShowBubbleSize,'attrEx':'','nodeType':'','attrName':'', 'desc':'允许用户在图表中显示数据标签的气泡大小,读/写 Boolean', 'class':'')
,('field':'ShowPercent','name':'ShowPercent','obj':ShowPercent,'attrEx':'','nodeType':'','attrName':'', 'desc':'允许用户在图表中显示数据标签的百分比数值,读/写 Boolean。', 'class':'')
,('field':'ShowLeaderLines','name':'ShowLeaderLines','obj':ShowLeaderLines,'attrEx':'','nodeType':'','attrName':'', 'desc':'如果数据系列有引导线,则该属性值为 True读/写 Boolean。', 'class':'')
,('field':'DataTable','name':'DataTable','obj':DataTable,'attrEx':'','nodeType':'','attrName':'', 'desc':'显示数据表,读/写 Boolean。', 'class':'')
,('field':'Ord','name':'Ord','obj':Ord,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'Series','name':'w:ser','obj':Series,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'XAxis','name':XAxis.NodeName,'obj':XAxis,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TChartAxis')
,('field':'YAxis','name':YAxis.NodeName,'obj':YAxis,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TChartAxis')
,('field':'Legend','name':Legend.NodeName,'obj':Legend,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TLegend')
,('field':'Plotarea','name':Plotarea.NodeName,'obj':Plotarea,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TplotArea')
,('field':'ShowBlanksAs','name':'ShowBlanksAs','obj':ShowBlanksAs,'attrEx':'','nodeType':'','attrName':'', 'desc':'此元素指定如何在图表上绘制空白单元格。', 'class':'')
,('field':'plotVisOnly','name':'plotVisOnly','obj':plotVisOnly,'attrEx':'','nodeType':'','attrName':'', 'desc':'此元素指定如何在图表上绘制空白单元格。', 'class':'')
,('field':'ChartNode','name':'ChartNode','obj':ChartNode,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'plotAreaNode','name':'plotAreaNode','obj':plotAreaNode,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'C','name':'C','obj':C,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'xmlObj','name':'xmlObj','obj':xmlObj,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'Rid','name':'Rid','obj':Rid,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'pNode','name':'pNode','obj':pNode,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'DisableExcel','name':'DisableExcel','obj':DisableExcel,'attrEx':'','nodeType':'','attrName':'', 'desc':'是否内嵌excel数据文件默认嵌入。', 'class':'')
,('field':'Excel','name':'Excel','obj':Excel,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'chartFileName','name':'chartFileName','obj':chartFileName,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'excelFileName','name':'excelFileName','obj':excelFileName,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'drawingFileName','name':'drawingFileName','obj':drawingFileName,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Width;
Height;
BegColOff;
BegRowOff;
EndColOff;
EndRowOff;
Name;
Title;
Type;
VaryColors;
ShowLegendKey;
ShowVal;
ShowCatName;
ShowSerName;
ShowBubbleSize;
ShowPercent;
ShowLeaderLines;
DataTable;
Ord;
Series;
XAxis;
YAxis;
Legend;
Plotarea;
ShowBlanksAs;
plotVisOnly;
ChartNode;
plotAreaNode;
C;
xmlObj;
Rid;
pNode;
DisableExcel;
Excel;
chartFileName;
excelFileName;
drawingFileName;
End;
///////////////////////////////////////////////////////////////
/// TLegend
///////////////////////////////////////////////////////////////
type TLegend=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:legend');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'legendPos','name':'c:legendPos','obj':legendPos,'attrEx':'val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Layout','name':'c:layout','obj':Layout,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'overlay','name':'c:overlay','obj':overlay,'attrEx':'val','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
Property Position write setPosition;
Function setPosition(t);
Begin
m := array("bottom": "b",
"left": "l",
"right": "r",
"top": "t",
"top_right": "tr");
legendPos := m[t];
End;
//Attributes
//Nodes
legendPos;
Layout;
overlay;
End;
///////////////////////////////////////////////////////////////
/// TChartAxis
///////////////////////////////////////////////////////////////
type TChartAxis=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'ChartAxis');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
NumFont := new TNumFont(self, 'NumFont');
NameLayout := new TNameLayout(self, 'NameLayout');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
NumFont.InitRootNode(node);
NameLayout.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'None','name':'None','obj':None,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Crossing','name':'Crossing','obj':Crossing,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MajorGridlines','name':'MajorGridlines','obj':MajorGridlines,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MinorGridlines','name':'MinorGridlines','obj':MinorGridlines,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MajorTickMark','name':'MajorTickMark','obj':MajorTickMark,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MinorTickMark','name':'MinorTickMark','obj':MinorTickMark,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MinorUnitType','name':'MinorUnitType','obj':MinorUnitType,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MajorUnit','name':'MajorUnit','obj':MajorUnit,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MajorUnitType','name':'MajorUnitType','obj':MajorUnitType,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'TickLabelSkip','name':'TickLabelSkip','obj':TickLabelSkip,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'DisplayUnits','name':'DisplayUnits','obj':DisplayUnits,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'DisplayUnitsVisible','name':'DisplayUnitsVisible','obj':DisplayUnitsVisible,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'DateAxis','name':'DateAxis','obj':DateAxis,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ReverseOrder','name':'ReverseOrder','obj':ReverseOrder,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Max','name':'Max','obj':Max,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Min','name':'Min','obj':Min,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'NumFormat','name':'NumFormat','obj':NumFormat,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'NumFont','name':NumFont.NodeName,'obj':NumFont,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TNumFont')
,('field':'LogBase','name':'LogBase','obj':LogBase,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'NameLayout','name':NameLayout.NodeName,'obj':NameLayout,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TNameLayout')
) union ExtNodes;
End;
//Attributes
//Nodes
None;
Crossing;
MajorGridlines;
MinorGridlines;
MajorTickMark;
MinorTickMark;
MinorUnitType;
MajorUnit;
MajorUnitType;
TickLabelSkip;
DisplayUnits;
DisplayUnitsVisible;
DateAxis;
ReverseOrder;
Max;
Min;
NumFormat;
NumFont;
LogBase;
NameLayout;
End;
///////////////////////////////////////////////////////////////
/// TNumFont
///////////////////////////////////////////////////////////////
type TNumFont=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'NumFont');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Color','name':'Color','obj':Color,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Bold','name':'Bold','obj':Bold,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Italic','name':'Italic','obj':Italic,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Underline','name':'Underline','obj':Underline,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Color;
Bold;
Italic;
Underline;
End;
///////////////////////////////////////////////////////////////
/// TNameLayout
///////////////////////////////////////////////////////////////
type TNameLayout=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'NameLayout');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'X','name':'X','obj':X,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Y','name':'Y','obj':Y,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Width','name':'Width','obj':Width,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Height','name':'Height','obj':Height,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
X;
Y;
Width;
Height;
End;
///////////////////////////////////////////////////////////////
/// Tpt
///////////////////////////////////////////////////////////////
type Tpt=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:pt');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("IDx", "idx", IDx, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'V','name':'c:v','obj':V,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
IDx;
//Nodes
V;
End;
///////////////////////////////////////////////////////////////
/// TStrCache
///////////////////////////////////////////////////////////////
type TStrCache=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:strRef');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Pt := new Tpt(self, 'c:pt');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Pt.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'PtCount','name':'c:ptCount','obj':PtCount,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Pt','name':Pt.NodeName,'obj':Pt,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'Tpt')
) union ExtNodes;
End;
//Attributes
//Nodes
PtCount;
Pt;
End;
///////////////////////////////////////////////////////////////
/// TStrRef
///////////////////////////////////////////////////////////////
type TStrRef=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:strRef');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
StrCache := new TStrCache(self, 'c:strCache');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
StrCache.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'F','name':'c:f','obj':F,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'StrCache','name':StrCache.NodeName,'obj':StrCache,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStrCache')
) union ExtNodes;
End;
//Attributes
//Nodes
F;
StrCache;
End;
///////////////////////////////////////////////////////////////
/// TcCat
///////////////////////////////////////////////////////////////
type TcCat=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:cat');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
StrRef := new TStrRef(self, 'c:strRef');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
StrRef.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'StrRef','name':StrRef.NodeName,'obj':StrRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStrRef')
) union ExtNodes;
End;
//Attributes
//Nodes
StrRef;
End;
///////////////////////////////////////////////////////////////
/// TNumCache
///////////////////////////////////////////////////////////////
type TNumCache=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:numCache');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Pt := new Tpt(self, 'c:pt');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Pt.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'FormatCode','name':'c:formatCode','obj':FormatCode,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'PtCount','name':'c:ptCount','obj':PtCount,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Pt','name':Pt.NodeName,'obj':Pt,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'Tpt')
) union ExtNodes;
End;
//Attributes
//Nodes
FormatCode;
PtCount;
Pt;
End;
///////////////////////////////////////////////////////////////
/// TNumRef
///////////////////////////////////////////////////////////////
type TNumRef=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:numRef');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
NumCache := new TNumCache(self, 'c:numCache');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
NumCache.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'F','name':'c:f','obj':F,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'NumCache','name':NumCache.NodeName,'obj':NumCache,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TNumCache')
) union ExtNodes;
End;
//Attributes
//Nodes
F;
NumCache;
End;
///////////////////////////////////////////////////////////////
/// TcVal
///////////////////////////////////////////////////////////////
type TcVal=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:val');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
NumRef := new TNumRef(self, 'c:numRef');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
NumRef.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'NumRef','name':NumRef.NodeName,'obj':NumRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TNumRef')
) union ExtNodes;
End;
//Attributes
//Nodes
NumRef;
End;
///////////////////////////////////////////////////////////////
/// TTx
///////////////////////////////////////////////////////////////
type TTx=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:tx');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
StrRef := new TStrRef(self, 'c:strRef');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
StrRef.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'StrRef','name':StrRef.NodeName,'obj':StrRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStrRef')
) union ExtNodes;
End;
//Attributes
//Nodes
StrRef;
End;
///////////////////////////////////////////////////////////////
/// TSolidFill
///////////////////////////////////////////////////////////////
type TSolidFill=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:solidFill');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SchemeClr := new TSchemeClr(self, 'a:schemeClr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SchemeClr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'SchemeClr','name':SchemeClr.NodeName,'obj':SchemeClr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSchemeClr')
,('field':'SrgbClr','name':'a:srgbClr','obj':SrgbClr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
SchemeClr;
SrgbClr;
End;
///////////////////////////////////////////////////////////////
/// TSchemeClr
///////////////////////////////////////////////////////////////
type TSchemeClr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:schemeClr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Val", "val", Val, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'LumMod','name':'a:lumMod','obj':LumMod,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'LumOff','name':'a:lumOff','obj':LumOff,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
Val;
//Nodes
LumMod;
LumOff;
End;
///////////////////////////////////////////////////////////////
/// TLn
///////////////////////////////////////////////////////////////
type TLn=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 't:Ln');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SolidFill := new TSolidFill(self, 'a:solidFill');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SolidFill.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("Algn", "algn", Algn, ""),("Cap", "cap", Cap, ""),("Cmpd", "cmpd", Cmpd, ""),("W", "w", W, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'NoFill','name':'a:noFill','obj':NoFill,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'prstDash','name':'a:prstDash','obj':prstDash,'attrEx':'val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Round','name':'a:round','obj':Round,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'SolidFill','name':SolidFill.NodeName,'obj':SolidFill,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSolidFill')
) union ExtNodes;
End;
//Attributes
Algn;
Cap;
Cmpd;
W;
//Nodes
NoFill;
prstDash;
Round;
SolidFill;
End;
///////////////////////////////////////////////////////////////
/// TContourClr
///////////////////////////////////////////////////////////////
type TContourClr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:contourClr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SchemeClr := new TSchemeClr(self, 'a:schemeClr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SchemeClr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'SchemeClr','name':SchemeClr.NodeName,'obj':SchemeClr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSchemeClr')
) union ExtNodes;
End;
//Attributes
//Nodes
SchemeClr;
End;
///////////////////////////////////////////////////////////////
/// TSp3D
///////////////////////////////////////////////////////////////
type TSp3D=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:sp3d');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
ContourClr := new TContourClr(self, 'a:contourClr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
ContourClr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("ContourW", "contourW", ContourW, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'ContourClr','name':ContourClr.NodeName,'obj':ContourClr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TContourClr')
) union ExtNodes;
End;
//Attributes
ContourW;
//Nodes
ContourClr;
End;
///////////////////////////////////////////////////////////////
/// TspPr
///////////////////////////////////////////////////////////////
type TspPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:spPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SolidFill := new TSolidFill(self, 'a:solidFill');
Ln := new TLn(self, 'a:ln');
Sp3D := new TSp3D(self, 'a:sp3d');
XFrm := new TXfrm(self, 'a:xfrm');
PrstGeom := new TprstGeom(self, 'a:prstGeom');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SolidFill.InitRootNode(node);
Ln.InitRootNode(node);
Sp3D.InitRootNode(node);
XFrm.InitRootNode(node);
PrstGeom.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'NoFill','name':'a:noFill','obj':NoFill,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'SolidFill','name':SolidFill.NodeName,'obj':SolidFill,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSolidFill')
,('field':'Ln','name':Ln.NodeName,'obj':Ln,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TLn')
,('field':'Sp3D','name':Sp3D.NodeName,'obj':Sp3D,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSp3D')
,('field':'EffectLst','name':'a:effectLst','obj':EffectLst,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'XFrm','name':XFrm.NodeName,'obj':XFrm,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TXfrm')
,('field':'PrstGeom','name':PrstGeom.NodeName,'obj':PrstGeom,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TprstGeom')
) union ExtNodes;
End;
//Attributes
//Nodes
NoFill;
SolidFill;
Ln;
Sp3D;
EffectLst;
XFrm;
PrstGeom;
End;
///////////////////////////////////////////////////////////////
/// TDpt
///////////////////////////////////////////////////////////////
type TDpt=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:dPt');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SpPr := new TspPr(self, 'c:spPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SpPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'IDx','name':'c:idx','obj':IDx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Bubble3D','name':'c:bubble3D','obj':Bubble3D,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TspPr')
) union ExtNodes;
End;
//Attributes
//Nodes
IDx;
Bubble3D;
SpPr;
End;
///////////////////////////////////////////////////////////////
/// TMarker
///////////////////////////////////////////////////////////////
type TMarker=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:marker');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SpPr := new TspPr(self, 'c:spPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SpPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Symbol','name':'c:symbol','obj':Symbol,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Size','name':'c:size','obj':Size,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TspPr')
) union ExtNodes;
End;
//Attributes
//Nodes
Symbol;
Size;
SpPr;
End;
///////////////////////////////////////////////////////////////
/// TSer
///////////////////////////////////////////////////////////////
type TSer=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:ser');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Tx := new TTx(self, 'c:tx');
SpPr := new TspPr(self, 'c:spPr');
DPt := new TDpt(self, 'c:dPt');
DPtEx := array();
DLbls := new TdLbls(self, 'c:dLbls');
Marker := new TMarker(self, 'c:marker');
Cat := new TcCat(self, 'c:cat');
Val := new TcVal(self, 'c:val');
XVal := new TcCat(self, 'c:xVal');
YVal := new TcVal(self, 'c:yVal');
BubbleSize := new TcVal(self, 'c:bubbleSize');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Tx.InitRootNode(node);
SpPr.InitRootNode(node);
DPt.InitRootNode(node);
DLbls.InitRootNode(node);
Marker.InitRootNode(node);
Cat.InitRootNode(node);
Val.InitRootNode(node);
XVal.InitRootNode(node);
YVal.InitRootNode(node);
BubbleSize.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'IDx','name':'c:idx','obj':IDx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Ord','name':'c:order','obj':Ord,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Tx','name':Tx.NodeName,'obj':Tx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TTx')
,('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TspPr')
,('field':'DPt','name':DPt.NodeName,'obj':DPt,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TDpt')
,('field':'DPtEx','name':'c:dPt','obj':DPtEx,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TDpt')
,('field':'DLbls','name':DLbls.NodeName,'obj':DLbls,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TdLbls')
,('field':'Marker','name':Marker.NodeName,'obj':Marker,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TMarker')
,('field':'InvertIfNegative','name':'c:invertIfNegative','obj':InvertIfNegative,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Cat','name':Cat.NodeName,'obj':Cat,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcCat')
,('field':'Val','name':Val.NodeName,'obj':Val,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcVal')
,('field':'XVal','name':XVal.NodeName,'obj':XVal,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcCat')
,('field':'YVal','name':YVal.NodeName,'obj':YVal,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcVal')
,('field':'Smooth','name':'c:smooth','obj':Smooth,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BubbleSize','name':BubbleSize.NodeName,'obj':BubbleSize,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcVal')
,('field':'Bubble3D','name':'c:bubble3D','obj':Bubble3D,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
IDx;
Ord;
Tx;
SpPr;
DPt;
DPtEx;
DLbls;
Marker;
InvertIfNegative;
Cat;
Val;
XVal;
YVal;
Smooth;
BubbleSize;
Bubble3D;
End;
///////////////////////////////////////////////////////////////
/// TdLbls
///////////////////////////////////////////////////////////////
type TdLbls=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:dLbls');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Del','name':'c:delete','obj':Del,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowLegendKey','name':'c:showLegendKey','obj':ShowLegendKey,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowVal','name':'c:showVal','obj':ShowVal,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowCatName','name':'c:showCatName','obj':ShowCatName,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowSerName','name':'c:showSerName','obj':ShowSerName,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowPercent','name':'c:showPercent','obj':ShowPercent,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowBubbleSize','name':'c:showBubbleSize','obj':ShowBubbleSize,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ShowLeaderLines','name':'c:showLeaderLines','obj':ShowLeaderLines,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Del;
ShowLegendKey;
ShowVal;
ShowCatName;
ShowSerName;
ShowPercent;
ShowBubbleSize;
ShowLeaderLines;
End;
///////////////////////////////////////////////////////////////
/// TcCharts
///////////////////////////////////////////////////////////////
type TcCharts=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:chart');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Ser := array();
DLbls := new TdLbls(self, 'c:dLbls');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
DLbls.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'BarDir','name':'c:barDir','obj':BarDir,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BubbleScale','name':'c:bubbleScale','obj':BubbleScale,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Grouping','name':'c:grouping','obj':Grouping,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'RadarStyle','name':'c:radarStyle','obj':RadarStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ScatterStyle','name':'c:scatterStyle','obj':ScatterStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'OfPieType','name':'c:ofPieType','obj':OfPieType,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'VaryColors','name':'c:varyColors','obj':VaryColors,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Wireframe','name':'c:wireframe','obj':Wireframe,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Ser','name':'c:ser','obj':Ser,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TSer')
,('field':'SerLines','name':'c:serLines','obj':SerLines,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'DLbls','name':DLbls.NodeName,'obj':DLbls,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TdLbls')
,('field':'Shape','name':'c:shape','obj':Shape,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'HoleSize','name':'c:holeSize','obj':HoleSize,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Smooth','name':'c:smooth','obj':Smooth,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Overlap','name':'c:overlap','obj':Overlap,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'AxID','name':'c:axId','obj':AxID,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'AxID2','name':'c:axId','obj':AxID2,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'AxID3','name':'c:axId','obj':AxID3,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
BarDir;
BubbleScale;
Grouping;
RadarStyle;
ScatterStyle;
OfPieType;
VaryColors;
Wireframe;
Ser;
SerLines;
DLbls;
Shape;
HoleSize;
Smooth;
Overlap;
AxID;
AxID2;
AxID3;
End;
///////////////////////////////////////////////////////////////
/// TcScaling
///////////////////////////////////////////////////////////////
type TcScaling=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:scaling');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'LogBase','name':'c:logBase','obj':LogBase,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Orientation','name':'c:orientation','obj':Orientation,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Max','name':'c:max','obj':Max,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Min','name':'c:min','obj':Min,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
LogBase;
Orientation;
Max;
Min;
End;
///////////////////////////////////////////////////////////////
/// TcChartLines
///////////////////////////////////////////////////////////////
type TcChartLines=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:cChartLines');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SpPr := new TspPr(self, 'c:spPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SpPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TspPr')
) union ExtNodes;
End;
//Attributes
//Nodes
SpPr;
End;
///////////////////////////////////////////////////////////////
/// TcNumFmt
///////////////////////////////////////////////////////////////
type TcNumFmt=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:numFmt');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("FormatCode", "formatCode", FormatCode, ""),("SourceLinked", "sourceLinked", SourceLinked, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
FormatCode;
SourceLinked;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TaR
///////////////////////////////////////////////////////////////
type TaR=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:r');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Rpr := new TaRpr(self, 'a:rPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Rpr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Rpr','name':Rpr.NodeName,'obj':Rpr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaRpr')
,('field':'T','name':'a:t','obj':T,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Rpr;
T;
End;
///////////////////////////////////////////////////////////////
/// TaEndParaRPr
///////////////////////////////////////////////////////////////
type TaEndParaRPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:endParaRPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Lang", "lang", Lang, ""),("AltLang", "altLang", AltLang, ""),("Sz", "sz", Sz, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Lang;
AltLang;
Sz;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TaP
///////////////////////////////////////////////////////////////
type TaP=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:p');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Ppr := new TaPPr(self, 'a:pPr');
R := new TaR(self, 'a:r');
EndParaRPr := new TaEndParaRPr(self, 'a:endParaRPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Ppr.InitRootNode(node);
R.InitRootNode(node);
EndParaRPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Ppr','name':Ppr.NodeName,'obj':Ppr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaPPr')
,('field':'R','name':R.NodeName,'obj':R,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaR')
,('field':'EndParaRPr','name':EndParaRPr.NodeName,'obj':EndParaRPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaEndParaRPr')
) union ExtNodes;
End;
//Attributes
//Nodes
Ppr;
R;
EndParaRPr;
End;
///////////////////////////////////////////////////////////////
/// TaPPr
///////////////////////////////////////////////////////////////
type TaPPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:pPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
DefRPr := new TaRPr(self, 'a:defRPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
DefRPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("Algn", "algn", Algn, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'DefRPr','name':DefRPr.NodeName,'obj':DefRPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaRPr')
) union ExtNodes;
End;
//Attributes
Algn;
//Nodes
DefRPr;
End;
///////////////////////////////////////////////////////////////
/// TaLatin
///////////////////////////////////////////////////////////////
type TaLatin=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:latin');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Typeface", "typeface", Typeface, ""),("Panose", "panose", Panose, ""),("PitchFamily", "pitchFamily", PitchFamily, ""),("Charset", "charset", Charset, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Typeface;
Panose;
PitchFamily;
Charset;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TaEa
///////////////////////////////////////////////////////////////
type TaEa=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:ea');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Typeface", "typeface", Typeface, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Typeface;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TaCs
///////////////////////////////////////////////////////////////
type TaCs=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:cs');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Typeface", "typeface", Typeface, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Typeface;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TaRPr
///////////////////////////////////////////////////////////////
type TaRPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:defRPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SolidFill := new TSolidFill(self, 'a:solidFill');
Latin := new TaLatin(self, 'a:latin');
Ea := new TaEa(self, 'a:ea');
Cs := new TaCs(self, 'a:cs');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SolidFill.InitRootNode(node);
Latin.InitRootNode(node);
Ea.InitRootNode(node);
Cs.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("AltLang", "altLang", AltLang, ""),("Bold", "b", Bold, ""),("Baseline", "baseline", Baseline, ""),("Bmk", "bmk", Bmk, ""),("Cap", "cap", Cap, ""),("Dirty", "dirty", Dirty, ""),("Err", "err", Err, ""),("Italic", "i", Italic, ""),("Kern", "kern", Kern, ""),("Kumimoji", "kumimoji", Kumimoji, ""),("Lang", "lang", Lang, ""),("NoProof", "noProof", NoProof, ""),("NormalizeH", "normalizeH", NormalizeH, ""),("SmtID", "smtId", SmtID, ""),("Spc", "spc", Spc, ""),("Strike", "strike", Strike, ""),("Sz", "sz", Sz, ""),("SmtClean", "smtClean", SmtClean, ""),("U", "u", U, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'SolidFill','name':SolidFill.NodeName,'obj':SolidFill,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSolidFill')
,('field':'Latin','name':Latin.NodeName,'obj':Latin,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaLatin')
,('field':'Ea','name':Ea.NodeName,'obj':Ea,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaEa')
,('field':'Cs','name':Cs.NodeName,'obj':Cs,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaCs')
) union ExtNodes;
End;
//Attributes
AltLang;
Bold;
Baseline;
Bmk;
Cap;
Dirty;
Err;
Italic;
Kern;
Kumimoji;
Lang;
NoProof;
NormalizeH;
SmtID;
Spc;
Strike;
Sz;
SmtClean;
U;
//Nodes
SolidFill;
Latin;
Ea;
Cs;
End;
///////////////////////////////////////////////////////////////
/// TaBodyPr
///////////////////////////////////////////////////////////////
type TaBodyPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:bodyPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Vert", "vert", Vert, ""),("VertOverflow", "vertOverflow", VertOverflow, ""),("HorzOverflow", "horzOverflow", HorzOverflow, ""),("RtlCol", "rtlCol", RtlCol, ""),("Anchor", "anchor", Anchor, ""),("AnchorCtr", "anchorCtr", AnchorCtr, ""),("Rot", "rot", Rot, ""),("BIns", "bIns", BIns, ""),("CompatLnSpc", "compatLnSpc", CompatLnSpc, ""),("ForceAA", "forceAA", ForceAA, ""),("FromWordArt", "fromWordArt", FromWordArt, ""),("LIns", "lIns", LIns, ""),("NumCol", "numCol", NumCol, ""),("RIns", "rIns", RIns, ""),("SpcCol", "spcCol", SpcCol, ""),("SpcFirstLastPara", "spcFirstLastPara", SpcFirstLastPara, ""),("TIns", "tIns", TIns, ""),("Upright", "upright", Upright, ""),("Wrap", "wrap", Wrap, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Vert;
VertOverflow;
HorzOverflow;
RtlCol;
Anchor;
AnchorCtr;
Rot;
BIns;
CompatLnSpc;
ForceAA;
FromWordArt;
LIns;
NumCol;
RIns;
SpcCol;
SpcFirstLastPara;
TIns;
Upright;
Wrap;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TTxPr
///////////////////////////////////////////////////////////////
type TTxPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'txPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
BodyPr := new TaBodyPr(self, 'a:bodyPr');
P := new TaP(self, 'a:p');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
BodyPr.InitRootNode(node);
P.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'BodyPr','name':BodyPr.NodeName,'obj':BodyPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaBodyPr')
,('field':'LstStyle','name':'a:lstStyle','obj':LstStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'P','name':P.NodeName,'obj':P,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TaP')
) union ExtNodes;
End;
//Attributes
//Nodes
BodyPr;
LstStyle;
P;
End;
///////////////////////////////////////////////////////////////
/// TcAxs
///////////////////////////////////////////////////////////////
type TcAxs=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:catAx');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Scaling := new TcScaling(self, 'c:scaling');
MajorGridlines := new TcChartLines(self, 'c:majorGridlines');
MinorGridlines := new TcChartLines(self, 'c:minorGridlines');
NumFmt := new TcNumFmt(self, 'c:numFmt');
SpPr := new TspPr(self, 'c:spPr');
TxPr := new TTxPr(self, 'c:txPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Scaling.InitRootNode(node);
MajorGridlines.InitRootNode(node);
MinorGridlines.InitRootNode(node);
NumFmt.InitRootNode(node);
SpPr.InitRootNode(node);
TxPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'AxID','name':'c:axId','obj':AxID,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Scaling','name':Scaling.NodeName,'obj':Scaling,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcScaling')
,('field':'Del','name':'c:delete','obj':Del,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'AxPos','name':'c:axPos','obj':AxPos,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MajorGridlines','name':MajorGridlines.NodeName,'obj':MajorGridlines,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcChartLines')
,('field':'MinorGridlines','name':MinorGridlines.NodeName,'obj':MinorGridlines,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcChartLines')
,('field':'NumFmt','name':NumFmt.NodeName,'obj':NumFmt,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcNumFmt')
,('field':'MajorTickMark','name':'c:majorTickMark','obj':MajorTickMark,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MinorTickMark','name':'c:minorTickMark','obj':MinorTickMark,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'TickLblPos','name':'c:tickLblPos','obj':TickLblPos,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TspPr')
,('field':'TxPr','name':TxPr.NodeName,'obj':TxPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TTxPr')
,('field':'CrossAx','name':'c:crossAx','obj':CrossAx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Crosses','name':'c:crosses','obj':Crosses,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'CrossBetween','name':'c:crossBetween','obj':CrossBetween,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MajorUnit','name':'c:majorUnit','obj':MajorUnit,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'MinorUnit','name':'c:minorUnit','obj':MinorUnit,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Auto','name':'c:auto','obj':Auto,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'LblAlgn','name':'c:lblAlgn','obj':LblAlgn,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'LblOffset','name':'c:lblOffset','obj':LblOffset,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'TickLblSkip','name':'c:tickLblSkip','obj':TickLblSkip,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'TickMarkSkip','name':'c:tickMarkSkip','obj':TickMarkSkip,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'NoMultiLvlLbl','name':'c:noMultiLvlLbl','obj':NoMultiLvlLbl,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
AxID;
Scaling;
Del;
AxPos;
MajorGridlines;
MinorGridlines;
NumFmt;
MajorTickMark;
MinorTickMark;
TickLblPos;
SpPr;
TxPr;
CrossAx;
Crosses;
CrossBetween;
MajorUnit;
MinorUnit;
Auto;
LblAlgn;
LblOffset;
TickLblSkip;
TickMarkSkip;
NoMultiLvlLbl;
End;
///////////////////////////////////////////////////////////////
/// TplotArea
///////////////////////////////////////////////////////////////
type TplotArea=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:plotArea');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Chart := new TcCharts(self, 'c:chartname');
CatAx := new TcAxs(self, 'c:catAx');
ValAx := new TcAxs(self, 'c:valAx');
SerAx := new TcAxs(self, 'c:serAx');
SpPr := new TspPr(self, 'c:spPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Chart.InitRootNode(node);
CatAx.InitRootNode(node);
ValAx.InitRootNode(node);
SerAx.InitRootNode(node);
SpPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Layout','name':'c:layout','obj':Layout,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'Chart','name':Chart.NodeName,'obj':Chart,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcCharts')
,('field':'CatAx','name':CatAx.NodeName,'obj':CatAx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcAxs')
,('field':'ValAx','name':ValAx.NodeName,'obj':ValAx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcAxs')
,('field':'SerAx','name':SerAx.NodeName,'obj':SerAx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcAxs')
,('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TspPr')
) union ExtNodes;
End;
//Attributes
//Nodes
Layout;
Chart;
CatAx;
ValAx;
SerAx;
SpPr;
End;
///////////////////////////////////////////////////////////////
/// TView3D
///////////////////////////////////////////////////////////////
type TView3D=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'c:view3D');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'RotX','name':'c:rotX','obj':RotX,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'RotY','name':'c:rotY','obj':RotY,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'RAngAx','name':'c:rAngAx','obj':RAngAx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'DepthPercent','name':'c:depthPercent','obj':DepthPercent,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Perspective','name':'c:perspective','obj':Perspective,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
RotX;
RotY;
RAngAx;
DepthPercent;
Perspective;
End;
///////////////////////////////////////////////////////////////
/// TBorder
///////////////////////////////////////////////////////////////
type TBorder=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'border');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Color read readXMLColor write writeXMLColor;
Function readXMLColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Color'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLColor);
End;
Function writeXMLColor(str);
Begin
XMLColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ThemeColor read readXMLThemeColor write writeXMLThemeColor;
Function readXMLThemeColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ThemeColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLThemeColor);
End;
Function writeXMLThemeColor(str);
Begin
XMLThemeColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ThemeColorTint read readXMLThemeColorTint write writeXMLThemeColorTint;
Function readXMLThemeColorTint();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ThemeColorTint'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLThemeColorTint);
End;
Function writeXMLThemeColorTint(str);
Begin
XMLThemeColorTint := class(TSXml).CurCodePageToUtf8(str);
End;
Property LineStyle read readXMLLineStyle write writeXMLLineStyle;
Function readXMLLineStyle();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('LineStyle'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLineStyle);
End;
Function writeXMLLineStyle(str);
Begin
XMLLineStyle := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("LineStyle", "style", XMLLineStyle, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Color','name':'color','obj':XMLColor,'attrEx':'rgb','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ThemeColor','name':'color','obj':XMLThemeColor,'attrEx':'theme','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ThemeColorTint','name':'color','obj':XMLThemeColorTint,'attrEx':'tint','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Weight','name':'weight','obj':Weight,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'TintAndShade','name':'tintandshade','obj':TintAndShade,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
XMLLineStyle;
//Nodes
XMLColor;
XMLThemeColor;
XMLThemeColorTint;
Weight;
TintAndShade;
End;
///////////////////////////////////////////////////////////////
/// TBorders
///////////////////////////////////////////////////////////////
type TBorders=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'border');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Left := new TBorder(self, 'left');
Right := new TBorder(self, 'right');
Top := new TBorder(self, 'top');
Bottom := new TBorder(self, 'bottom');
Diagonal := new TBorder(self, 'diagonal');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Left.InitRootNode(node);
Right.InitRootNode(node);
Top.InitRootNode(node);
Bottom.InitRootNode(node);
Diagonal.InitRootNode(node);
End;
Property DiagonalDown read readXMLDiagonalDown write writeXMLDiagonalDown;
Function readXMLDiagonalDown();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('DiagonalDown'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLDiagonalDown);
End;
Function writeXMLDiagonalDown(str);
Begin
XMLDiagonalDown := class(TSXml).CurCodePageToUtf8(str);
End;
Property DiagonalUp read readXMLDiagonalUp write writeXMLDiagonalUp;
Function readXMLDiagonalUp();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('DiagonalUp'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLDiagonalUp);
End;
Function writeXMLDiagonalUp(str);
Begin
XMLDiagonalUp := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("DiagonalDown", "diagonalDown", XMLDiagonalDown, ""),("DiagonalUp", "diagonalUp", XMLDiagonalUp, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Left','name':Left.NodeName,'obj':Left,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBorder')
,('field':'Right','name':Right.NodeName,'obj':Right,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBorder')
,('field':'Top','name':Top.NodeName,'obj':Top,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBorder')
,('field':'Bottom','name':Bottom.NodeName,'obj':Bottom,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBorder')
,('field':'Diagonal','name':Diagonal.NodeName,'obj':Diagonal,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBorder')
) union ExtNodes;
End;
//Attributes
XMLDiagonalDown;
XMLDiagonalUp;
//Nodes
Left;
Right;
Top;
Bottom;
Diagonal;
End;
///////////////////////////////////////////////////////////////
/// TNumFmts
///////////////////////////////////////////////////////////////
type TNumFmts=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'numFmts');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property FormatCode read readXMLFormatCode write writeXMLFormatCode;
Function readXMLFormatCode();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('FormatCode'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLFormatCode);
End;
Function writeXMLFormatCode(str);
Begin
XMLFormatCode := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("NumFmtId", "numFmtId", NumFmtId, ""),("FormatCode", "formatCode", XMLFormatCode, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
NumFmtId;
XMLFormatCode;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TGradient
///////////////////////////////////////////////////////////////
type TGradient=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'gradientFill');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Stop1 := new TStop(self, 'stop');
Stop2 := new TStop(self, 'stop');
Stop3 := new TStop(self, 'stop');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Stop1.InitRootNode(node);
Stop2.InitRootNode(node);
Stop3.InitRootNode(node);
End;
Property Degree read readXMLDegree write writeXMLDegree;
Function readXMLDegree();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Degree'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLDegree);
End;
Function writeXMLDegree(str);
Begin
XMLDegree := class(TSXml).CurCodePageToUtf8(str);
End;
Property Type read readXMLType write writeXMLType;
Function readXMLType();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Type'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLType);
End;
Function writeXMLType(str);
Begin
XMLType := class(TSXml).CurCodePageToUtf8(str);
End;
Property Left read readXMLLeft write writeXMLLeft;
Function readXMLLeft();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Left'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLeft);
End;
Function writeXMLLeft(str);
Begin
XMLLeft := class(TSXml).CurCodePageToUtf8(str);
End;
Property Right read readXMLRight write writeXMLRight;
Function readXMLRight();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Right'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLRight);
End;
Function writeXMLRight(str);
Begin
XMLRight := class(TSXml).CurCodePageToUtf8(str);
End;
Property Top read readXMLTop write writeXMLTop;
Function readXMLTop();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Top'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTop);
End;
Function writeXMLTop(str);
Begin
XMLTop := class(TSXml).CurCodePageToUtf8(str);
End;
Property Bottom read readXMLBottom write writeXMLBottom;
Function readXMLBottom();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Bottom'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLBottom);
End;
Function writeXMLBottom(str);
Begin
XMLBottom := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Degree", "degree", XMLDegree, ""),("Type", "type", XMLType, ""),("Left", "left", XMLLeft, ""),("Right", "right", XMLRight, ""),("Top", "top", XMLTop, ""),("Bottom", "bottom", XMLBottom, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Stop1','name':Stop1.NodeName,'obj':Stop1,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStop')
,('field':'Stop2','name':Stop2.NodeName,'obj':Stop2,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStop')
,('field':'Stop3','name':Stop3.NodeName,'obj':Stop3,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStop')
) union ExtNodes;
End;
//Attributes
XMLDegree;
XMLType;
XMLLeft;
XMLRight;
XMLTop;
XMLBottom;
//Nodes
Stop1;
Stop2;
Stop3;
End;
///////////////////////////////////////////////////////////////
/// TFills
///////////////////////////////////////////////////////////////
type TFills=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'fill');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Pattern := new TPattern(self, 'patternFill');
Gradient := new TGradient(self, 'gradientFill');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Pattern.InitRootNode(node);
Gradient.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Pattern','name':Pattern.NodeName,'obj':Pattern,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TPattern')
,('field':'Gradient','name':Gradient.NodeName,'obj':Gradient,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TGradient')
) union ExtNodes;
End;
//Attributes
//Nodes
Pattern;
Gradient;
End;
///////////////////////////////////////////////////////////////
/// TPattern
///////////////////////////////////////////////////////////////
type TPattern=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'patternFill');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property PatternType read readXMLPatternType write writeXMLPatternType;
Function readXMLPatternType();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('PatternType'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLPatternType);
End;
Function writeXMLPatternType(str);
Begin
XMLPatternType := class(TSXml).CurCodePageToUtf8(str);
End;
Property ForegroundColor read readXMLForegroundColor write writeXMLForegroundColor;
Function readXMLForegroundColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ForegroundColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLForegroundColor);
End;
Function writeXMLForegroundColor(str);
Begin
XMLForegroundColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property BackgroundColor read readXMLBackgroundColor write writeXMLBackgroundColor;
Function readXMLBackgroundColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('BackgroundColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLBackgroundColor);
End;
Function writeXMLBackgroundColor(str);
Begin
XMLBackgroundColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ForegroundThemeColor read readXMLForegroundThemeColor write writeXMLForegroundThemeColor;
Function readXMLForegroundThemeColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ForegroundThemeColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLForegroundThemeColor);
End;
Function writeXMLForegroundThemeColor(str);
Begin
XMLForegroundThemeColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property BackgroundThemeColor read readXMLBackgroundThemeColor write writeXMLBackgroundThemeColor;
Function readXMLBackgroundThemeColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('BackgroundThemeColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLBackgroundThemeColor);
End;
Function writeXMLBackgroundThemeColor(str);
Begin
XMLBackgroundThemeColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ForegroundThemeColorTint read readXMLForegroundThemeColorTint write writeXMLForegroundThemeColorTint;
Function readXMLForegroundThemeColorTint();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ForegroundThemeColorTint'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLForegroundThemeColorTint);
End;
Function writeXMLForegroundThemeColorTint(str);
Begin
XMLForegroundThemeColorTint := class(TSXml).CurCodePageToUtf8(str);
End;
Property BackgroundThemeColorTint read readXMLBackgroundThemeColorTint write writeXMLBackgroundThemeColorTint;
Function readXMLBackgroundThemeColorTint();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('BackgroundThemeColorTint'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLBackgroundThemeColorTint);
End;
Function writeXMLBackgroundThemeColorTint(str);
Begin
XMLBackgroundThemeColorTint := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("PatternType", "patternType", XMLPatternType, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'ForegroundColor','name':'fgColor','obj':XMLForegroundColor,'attrEx':'rgb','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BackgroundColor','name':'bgColor','obj':XMLBackgroundColor,'attrEx':'rgb','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ForegroundThemeColor','name':'fgColor','obj':XMLForegroundThemeColor,'attrEx':'theme','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BackgroundThemeColor','name':'bgColor','obj':XMLBackgroundThemeColor,'attrEx':'theme','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ForegroundThemeColorTint','name':'fgColor','obj':XMLForegroundThemeColorTint,'attrEx':'tint','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'BackgroundThemeColorTint','name':'bgColor','obj':XMLBackgroundThemeColorTint,'attrEx':'tint','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
XMLPatternType;
//Nodes
XMLForegroundColor;
XMLBackgroundColor;
XMLForegroundThemeColor;
XMLBackgroundThemeColor;
XMLForegroundThemeColorTint;
XMLBackgroundThemeColorTint;
End;
///////////////////////////////////////////////////////////////
/// TStop
///////////////////////////////////////////////////////////////
type TStop=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'stop');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Position read readXMLPosition write writeXMLPosition;
Function readXMLPosition();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Position'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLPosition);
End;
Function writeXMLPosition(str);
Begin
XMLPosition := class(TSXml).CurCodePageToUtf8(str);
End;
Property Color read readXMLColor write writeXMLColor;
Function readXMLColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Color'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLColor);
End;
Function writeXMLColor(str);
Begin
XMLColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ColorIndex read readXMLColorIndex write writeXMLColorIndex;
Function readXMLColorIndex();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ColorIndex'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLColorIndex);
End;
Function writeXMLColorIndex(str);
Begin
XMLColorIndex := class(TSXml).CurCodePageToUtf8(str);
End;
Property ThemeColor read readXMLThemeColor write writeXMLThemeColor;
Function readXMLThemeColor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ThemeColor'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLThemeColor);
End;
Function writeXMLThemeColor(str);
Begin
XMLThemeColor := class(TSXml).CurCodePageToUtf8(str);
End;
Property ThemeColorTint read readXMLThemeColorTint write writeXMLThemeColorTint;
Function readXMLThemeColorTint();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ThemeColorTint'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLThemeColorTint);
End;
Function writeXMLThemeColorTint(str);
Begin
XMLThemeColorTint := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Position", "position", XMLPosition, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Color','name':'color','obj':XMLColor,'attrEx':'rgb','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ColorIndex','name':'color','obj':XMLColorIndex,'attrEx':'index','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ThemeColor','name':'color','obj':XMLThemeColor,'attrEx':'theme','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ThemeColorTint','name':'color','obj':XMLThemeColorTint,'attrEx':'tint','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
XMLPosition;
//Nodes
XMLColor;
XMLColorIndex;
XMLThemeColor;
XMLThemeColorTint;
End;
///////////////////////////////////////////////////////////////
/// TAlignment
///////////////////////////////////////////////////////////////
type TAlignment=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'alignment');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Horizontal read readXMLHorizontal write writeXMLHorizontal;
Function readXMLHorizontal();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Horizontal'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLHorizontal);
End;
Function writeXMLHorizontal(str);
Begin
XMLHorizontal := class(TSXml).CurCodePageToUtf8(str);
End;
Property Vertical read readXMLVertical write writeXMLVertical;
Function readXMLVertical();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Vertical'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLVertical);
End;
Function writeXMLVertical(str);
Begin
XMLVertical := class(TSXml).CurCodePageToUtf8(str);
End;
Property WrapText read readXMLWrapText write writeXMLWrapText;
Function readXMLWrapText();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('WrapText'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLWrapText);
End;
Function writeXMLWrapText(str);
Begin
XMLWrapText := class(TSXml).CurCodePageToUtf8(str);
End;
Property ReadingOrder read readXMLReadingOrder write writeXMLReadingOrder;
Function readXMLReadingOrder();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ReadingOrder'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLReadingOrder);
End;
Function writeXMLReadingOrder(str);
Begin
XMLReadingOrder := class(TSXml).CurCodePageToUtf8(str);
End;
Property TextRotation read readXMLTextRotation write writeXMLTextRotation;
Function readXMLTextRotation();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('TextRotation'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTextRotation);
End;
Function writeXMLTextRotation(str);
Begin
XMLTextRotation := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Horizontal", "horizontal", XMLHorizontal, ""),("Vertical", "vertical", XMLVertical, ""),("WrapText", "wrapText", XMLWrapText, ""),("ReadingOrder", "readingOrder", XMLReadingOrder, ""),("TextRotation", "textRotation", XMLTextRotation, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLHorizontal;
XMLVertical;
XMLWrapText;
XMLReadingOrder;
XMLTextRotation;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TProtection
///////////////////////////////////////////////////////////////
type TProtection=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'protection');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Lock read readXMLLock write writeXMLLock;
Function readXMLLock();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Lock'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLock);
End;
Function writeXMLLock(str);
Begin
XMLLock := class(TSXml).CurCodePageToUtf8(str);
End;
Property Hide read readXMLHide write writeXMLHide;
Function readXMLHide();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Hide'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLHide);
End;
Function writeXMLHide(str);
Begin
XMLHide := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Lock", "locked", XMLLock, ""),("Hide", "hidden", XMLHide, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLLock;
XMLHide;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TStyle
///////////////////////////////////////////////////////////////
type TStyle=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xf');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Border := new TBorders(self, 'border');
Font := new TFont(self, 'font');
NumberFormat := new TNumFmts(self, 'numFmt');
Fill := new TFills(self, 'fill');
Alignment := new TAlignment(self, 'alignment');
Protection := new TProtection(self, 'protection');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Border.InitRootNode(node);
Font.InitRootNode(node);
NumberFormat.InitRootNode(node);
Fill.InitRootNode(node);
Alignment.InitRootNode(node);
Protection.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Border','name':Border.NodeName,'obj':Border,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBorders')
,('field':'Font','name':Font.NodeName,'obj':Font,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TFont')
,('field':'NumberFormat','name':NumberFormat.NodeName,'obj':NumberFormat,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TNumFmts')
,('field':'Fill','name':Fill.NodeName,'obj':Fill,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TFills')
,('field':'Alignment','name':Alignment.NodeName,'obj':Alignment,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TAlignment')
,('field':'Protection','name':Protection.NodeName,'obj':Protection,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TProtection')
) union ExtNodes;
End;
//Attributes
//Nodes
Border;
Font;
NumberFormat;
Fill;
Alignment;
Protection;
End;
///////////////////////////////////////////////////////////////
/// TXf
///////////////////////////////////////////////////////////////
type TXf=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'xf');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Alignment := new TAlignment(self, 'alignment');
Protection := new TProtection(self, 'protection');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Alignment.InitRootNode(node);
Protection.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("NumFmtId", "numFmtId", NumFmtId, ""),("FontId", "fontId", FontId, ""),("FillId", "fillId", FillId, ""),("BorderId", "borderId", BorderId, ""),("XfId", "xfId", XfId, ""),("ApplyFont", "applyFont", ApplyFont, ""),("ApplyFill", "applyFill", ApplyFill, ""),("ApplyBorder", "applyBorder", ApplyBorder, ""),("ApplyAlignment", "applyAlignment", ApplyAlignment, ""),("ApplyProtection", "applyProtection", ApplyProtection, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Alignment','name':Alignment.NodeName,'obj':Alignment,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TAlignment')
,('field':'Protection','name':Protection.NodeName,'obj':Protection,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TProtection')
) union ExtNodes;
End;
//Attributes
NumFmtId;
FontId;
FillId;
BorderId;
XfId;
ApplyFont;
ApplyFill;
ApplyBorder;
ApplyAlignment;
ApplyProtection;
//Nodes
Alignment;
Protection;
End;
///////////////////////////////////////////////////////////////
/// THeaderFooter
///////////////////////////////////////////////////////////////
type THeaderFooter=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'headerFooter');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("DifferentOddEven", "differentOddEven", DifferentOddEven, ""),("DifferentFirst", "differentFirst", DifferentFirst, ""),("ScaleWithDoc", "scaleWithDoc", ScaleWithDoc, ""),("AlignWithMargin", "alignWithMargins", AlignWithMargin, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'OddHeader','name':'oddHeader','obj':OddHeader,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'OddFooter','name':'oddFooter','obj':OddFooter,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'EvenHeader','name':'evenHeader','obj':EvenHeader,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'EvenFooter','name':'evenFooter','obj':EvenFooter,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'FirstHeader','name':'firstHeader','obj':FirstHeader,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'FirstFooter','name':'firstFooter','obj':FirstFooter,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
DifferentOddEven;
DifferentFirst;
ScaleWithDoc;
AlignWithMargin;
//Nodes
OddHeader;
OddFooter;
EvenHeader;
EvenFooter;
FirstHeader;
FirstFooter;
End;
///////////////////////////////////////////////////////////////
/// TMargins
///////////////////////////////////////////////////////////////
type TMargins=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pageMargins');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Left read readXMLLeft write writeXMLLeft;
Function readXMLLeft();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Left'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLeft);
End;
Function writeXMLLeft(str);
Begin
XMLLeft := class(TSXml).CurCodePageToUtf8(str);
End;
Property Right read readXMLRight write writeXMLRight;
Function readXMLRight();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Right'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLRight);
End;
Function writeXMLRight(str);
Begin
XMLRight := class(TSXml).CurCodePageToUtf8(str);
End;
Property Top read readXMLTop write writeXMLTop;
Function readXMLTop();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Top'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTop);
End;
Function writeXMLTop(str);
Begin
XMLTop := class(TSXml).CurCodePageToUtf8(str);
End;
Property Bottom read readXMLBottom write writeXMLBottom;
Function readXMLBottom();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Bottom'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLBottom);
End;
Function writeXMLBottom(str);
Begin
XMLBottom := class(TSXml).CurCodePageToUtf8(str);
End;
Property Header read readXMLHeader write writeXMLHeader;
Function readXMLHeader();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Header'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLHeader);
End;
Function writeXMLHeader(str);
Begin
XMLHeader := class(TSXml).CurCodePageToUtf8(str);
End;
Property Footer read readXMLFooter write writeXMLFooter;
Function readXMLFooter();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Footer'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLFooter);
End;
Function writeXMLFooter(str);
Begin
XMLFooter := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Left", "left", XMLLeft, ""),("Right", "right", XMLRight, ""),("Top", "top", XMLTop, ""),("Bottom", "bottom", XMLBottom, ""),("Header", "header", XMLHeader, ""),("Footer", "footer", XMLFooter, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLLeft;
XMLRight;
XMLTop;
XMLBottom;
XMLHeader;
XMLFooter;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// THyperLink
///////////////////////////////////////////////////////////////
type THyperLink=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'hyperlink');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property LinkUrl read readXMLLinkUrl write writeXMLLinkUrl;
Function readXMLLinkUrl();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('LinkUrl'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLinkUrl);
End;
Function writeXMLLinkUrl(str);
Begin
XMLLinkUrl := class(TSXml).CurCodePageToUtf8(str);
End;
Property Display read readXMLDisplay write writeXMLDisplay;
Function readXMLDisplay();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Display'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLDisplay);
End;
Function writeXMLDisplay(str);
Begin
XMLDisplay := class(TSXml).CurCodePageToUtf8(str);
End;
Property Tooltip read readXMLTooltip write writeXMLTooltip;
Function readXMLTooltip();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Tooltip'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTooltip);
End;
Function writeXMLTooltip(str);
Begin
XMLTooltip := class(TSXml).CurCodePageToUtf8(str);
End;
Property Location read readXMLLocation write writeXMLLocation;
Function readXMLLocation();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Location'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLocation);
End;
Function writeXMLLocation(str);
Begin
XMLLocation := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("LinkType", "linkType", LinkType, ""),("LinkUrl", "linkUrl", XMLLinkUrl, ""),("Axis", "ref", Axis, ""),("Display", "display", XMLDisplay, ""),("Tooltip", "tooltip", XMLTooltip, ""),("RId", "r:id", RId, ""),("Location", "location", XMLLocation, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
LinkType;
XMLLinkUrl;
Axis;
XMLDisplay;
XMLTooltip;
RId;
XMLLocation;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TSheetView
///////////////////////////////////////////////////////////////
type TSheetView=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'sheetView');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property ShowGridLines read readXMLShowGridLines write writeXMLShowGridLines;
Function readXMLShowGridLines();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ShowGridLines'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLShowGridLines);
End;
Function writeXMLShowGridLines(str);
Begin
XMLShowGridLines := class(TSXml).CurCodePageToUtf8(str);
End;
Property ShowRowColHeaders read readXMLShowRowColHeaders write writeXMLShowRowColHeaders;
Function readXMLShowRowColHeaders();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ShowRowColHeaders'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLShowRowColHeaders);
End;
Function writeXMLShowRowColHeaders(str);
Begin
XMLShowRowColHeaders := class(TSXml).CurCodePageToUtf8(str);
End;
Property TabSelected read readXMLTabSelected write writeXMLTabSelected;
Function readXMLTabSelected();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('TabSelected'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTabSelected);
End;
Function writeXMLTabSelected(str);
Begin
XMLTabSelected := class(TSXml).CurCodePageToUtf8(str);
End;
Property View read readXMLView write writeXMLView;
Function readXMLView();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('View'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLView);
End;
Function writeXMLView(str);
Begin
XMLView := class(TSXml).CurCodePageToUtf8(str);
End;
Property ZoomScale read readXMLZoomScale write writeXMLZoomScale;
Function readXMLZoomScale();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ZoomScale'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLZoomScale);
End;
Function writeXMLZoomScale(str);
Begin
XMLZoomScale := class(TSXml).CurCodePageToUtf8(str);
End;
Property ZoomScaleNormal read readXMLZoomScaleNormal write writeXMLZoomScaleNormal;
Function readXMLZoomScaleNormal();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ZoomScaleNormal'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLZoomScaleNormal);
End;
Function writeXMLZoomScaleNormal(str);
Begin
XMLZoomScaleNormal := class(TSXml).CurCodePageToUtf8(str);
End;
Property WorkbookViewId read readXMLWorkbookViewId write writeXMLWorkbookViewId;
Function readXMLWorkbookViewId();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('WorkbookViewId'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLWorkbookViewId);
End;
Function writeXMLWorkbookViewId(str);
Begin
XMLWorkbookViewId := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("ShowGridLines", "showGridLines", XMLShowGridLines, ""),("ShowRowColHeaders", "showRowColHeaders", XMLShowRowColHeaders, ""),("TabSelected", "tabSelected", XMLTabSelected, ""),("View", "view", XMLView, ""),("ZoomScale", "zoomScale", XMLZoomScale, ""),("ZoomScaleNormal", "zoomScaleNormal", XMLZoomScaleNormal, ""),("WorkbookViewId", "workbookViewId", XMLWorkbookViewId, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLShowGridLines;
XMLShowRowColHeaders;
XMLTabSelected;
XMLView;
XMLZoomScale;
XMLZoomScaleNormal;
XMLWorkbookViewId;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TPane
///////////////////////////////////////////////////////////////
type TPane=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pane');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property XSplit read readXMLXSplit write writeXMLXSplit;
Function readXMLXSplit();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('XSplit'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLXSplit);
End;
Function writeXMLXSplit(str);
Begin
XMLXSplit := class(TSXml).CurCodePageToUtf8(str);
End;
Property YSplit read readXMLYSplit write writeXMLYSplit;
Function readXMLYSplit();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('YSplit'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLYSplit);
End;
Function writeXMLYSplit(str);
Begin
XMLYSplit := class(TSXml).CurCodePageToUtf8(str);
End;
Property TopLeftCell read readXMLTopLeftCell write writeXMLTopLeftCell;
Function readXMLTopLeftCell();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('TopLeftCell'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTopLeftCell);
End;
Function writeXMLTopLeftCell(str);
Begin
XMLTopLeftCell := class(TSXml).CurCodePageToUtf8(str);
End;
Property ActivePane read readXMLActivePane write writeXMLActivePane;
Function readXMLActivePane();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ActivePane'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLActivePane);
End;
Function writeXMLActivePane(str);
Begin
XMLActivePane := class(TSXml).CurCodePageToUtf8(str);
End;
Property State read readXMLState write writeXMLState;
Function readXMLState();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('State'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLState);
End;
Function writeXMLState(str);
Begin
XMLState := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("XSplit", "xSplit", XMLXSplit, ""),("YSplit", "ySplit", XMLYSplit, ""),("TopLeftCell", "topLeftCell", XMLTopLeftCell, ""),("ActivePane", "activePane", XMLActivePane, ""),("State", "state", XMLState, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLXSplit;
XMLYSplit;
XMLTopLeftCell;
XMLActivePane;
XMLState;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TSelection
///////////////////////////////////////////////////////////////
type TSelection=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'selection');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Pane read readXMLPane write writeXMLPane;
Function readXMLPane();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Pane'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLPane);
End;
Function writeXMLPane(str);
Begin
XMLPane := class(TSXml).CurCodePageToUtf8(str);
End;
Property ActiveCell read readXMLActiveCell write writeXMLActiveCell;
Function readXMLActiveCell();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ActiveCell'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLActiveCell);
End;
Function writeXMLActiveCell(str);
Begin
XMLActiveCell := class(TSXml).CurCodePageToUtf8(str);
End;
Property Sqref read readXMLSqref write writeXMLSqref;
Function readXMLSqref();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Sqref'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLSqref);
End;
Function writeXMLSqref(str);
Begin
XMLSqref := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Pane", "pane", XMLPane, ""),("ActiveCell", "activeCell", XMLActiveCell, ""),("Sqref", "sqref", XMLSqref, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLPane;
XMLActiveCell;
XMLSqref;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TPageLayout
///////////////////////////////////////////////////////////////
type TPageLayout=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pageSetup');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("PaperSize", "paperSize", PaperSize, ""),("Scale", "scale", Scale, ""),("FitToWidth", "fitToWidth", FitToWidth, ""),("FitToHeight", "fitToHeight", FitToHeight, ""),("UseFirstPageNumber", "cellComments", UseFirstPageNumber, ""),("FirstPageNumber", "firstPageNumber", FirstPageNumber, ""),("PageOrder", "pageOrder", PageOrder, ""),("Orientation", "orientation", Orientation, ""),("BlackAndWhite", "blackAndWhite", BlackAndWhite, ""),("Draft", "draft", Draft, ""),("CellComments", "cellComments", CellComments, ""),("CellError", "errors", CellError, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
PaperSize;
Scale;
FitToWidth;
FitToHeight;
UseFirstPageNumber;
FirstPageNumber;
PageOrder;
Orientation;
BlackAndWhite;
Draft;
CellComments;
CellError;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TAppProperty
///////////////////////////////////////////////////////////////
type TAppProperty=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'Properties');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Application read readXMLApplication write writeXMLApplication;
Function readXMLApplication();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Application'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLApplication);
End;
Function writeXMLApplication(str);
Begin
XMLApplication := class(TSXml).CurCodePageToUtf8(str);
End;
Property DocSecurity read readXMLDocSecurity write writeXMLDocSecurity;
Function readXMLDocSecurity();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('DocSecurity'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLDocSecurity);
End;
Function writeXMLDocSecurity(str);
Begin
XMLDocSecurity := class(TSXml).CurCodePageToUtf8(str);
End;
Property ScaleCrop read readXMLScaleCrop write writeXMLScaleCrop;
Function readXMLScaleCrop();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ScaleCrop'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLScaleCrop);
End;
Function writeXMLScaleCrop(str);
Begin
XMLScaleCrop := class(TSXml).CurCodePageToUtf8(str);
End;
Property Manager read readXMLManager write writeXMLManager;
Function readXMLManager();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Manager'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLManager);
End;
Function writeXMLManager(str);
Begin
XMLManager := class(TSXml).CurCodePageToUtf8(str);
End;
Property Company read readXMLCompany write writeXMLCompany;
Function readXMLCompany();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Company'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCompany);
End;
Function writeXMLCompany(str);
Begin
XMLCompany := class(TSXml).CurCodePageToUtf8(str);
End;
Property LinksUpToDate read readXMLLinksUpToDate write writeXMLLinksUpToDate;
Function readXMLLinksUpToDate();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('LinksUpToDate'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLinksUpToDate);
End;
Function writeXMLLinksUpToDate(str);
Begin
XMLLinksUpToDate := class(TSXml).CurCodePageToUtf8(str);
End;
Property SharedDoc read readXMLSharedDoc write writeXMLSharedDoc;
Function readXMLSharedDoc();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('SharedDoc'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLSharedDoc);
End;
Function writeXMLSharedDoc(str);
Begin
XMLSharedDoc := class(TSXml).CurCodePageToUtf8(str);
End;
Property HyperlinkBase read readXMLHyperlinkBase write writeXMLHyperlinkBase;
Function readXMLHyperlinkBase();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('HyperlinkBase'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLHyperlinkBase);
End;
Function writeXMLHyperlinkBase(str);
Begin
XMLHyperlinkBase := class(TSXml).CurCodePageToUtf8(str);
End;
Property HyperlinksChanged read readXMLHyperlinksChanged write writeXMLHyperlinksChanged;
Function readXMLHyperlinksChanged();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('HyperlinksChanged'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLHyperlinksChanged);
End;
Function writeXMLHyperlinksChanged(str);
Begin
XMLHyperlinksChanged := class(TSXml).CurCodePageToUtf8(str);
End;
Property Version read readXMLVersion write writeXMLVersion;
Function readXMLVersion();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Version'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLVersion);
End;
Function writeXMLVersion(str);
Begin
XMLVersion := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Application','name':'Application','obj':XMLApplication,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'DocSecurity','name':'DocSecurity','obj':XMLDocSecurity,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'ScaleCrop','name':'ScaleCrop','obj':XMLScaleCrop,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Manager','name':'Manager','obj':XMLManager,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Company','name':'Company','obj':XMLCompany,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'LinksUpToDate','name':'LinksUpToDate','obj':XMLLinksUpToDate,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'SharedDoc','name':'SharedDoc','obj':XMLSharedDoc,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'HyperlinkBase','name':'HyperlinkBase','obj':XMLHyperlinkBase,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'HyperlinksChanged','name':'HyperlinksChanged','obj':XMLHyperlinksChanged,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Version','name':'AppVersion','obj':XMLVersion,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
XMLApplication;
XMLDocSecurity;
XMLScaleCrop;
XMLManager;
XMLCompany;
XMLLinksUpToDate;
XMLSharedDoc;
XMLHyperlinkBase;
XMLHyperlinksChanged;
XMLVersion;
End;
///////////////////////////////////////////////////////////////
/// TCoreProperty
///////////////////////////////////////////////////////////////
type TCoreProperty=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'cp:coreProperties');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Title read readXMLTitle write writeXMLTitle;
Function readXMLTitle();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Title'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTitle);
End;
Function writeXMLTitle(str);
Begin
XMLTitle := class(TSXml).CurCodePageToUtf8(str);
End;
Property Subject read readXMLSubject write writeXMLSubject;
Function readXMLSubject();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Subject'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLSubject);
End;
Function writeXMLSubject(str);
Begin
XMLSubject := class(TSXml).CurCodePageToUtf8(str);
End;
Property Creator read readXMLCreator write writeXMLCreator;
Function readXMLCreator();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Creator'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCreator);
End;
Function writeXMLCreator(str);
Begin
XMLCreator := class(TSXml).CurCodePageToUtf8(str);
End;
Property Keywords read readXMLKeywords write writeXMLKeywords;
Function readXMLKeywords();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Keywords'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLKeywords);
End;
Function writeXMLKeywords(str);
Begin
XMLKeywords := class(TSXml).CurCodePageToUtf8(str);
End;
Property Description read readXMLDescription write writeXMLDescription;
Function readXMLDescription();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Description'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLDescription);
End;
Function writeXMLDescription(str);
Begin
XMLDescription := class(TSXml).CurCodePageToUtf8(str);
End;
Property LastModifiedBy read readXMLLastModifiedBy write writeXMLLastModifiedBy;
Function readXMLLastModifiedBy();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('LastModifiedBy'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLastModifiedBy);
End;
Function writeXMLLastModifiedBy(str);
Begin
XMLLastModifiedBy := class(TSXml).CurCodePageToUtf8(str);
End;
Property LastPrinted read readXMLLastPrinted write writeXMLLastPrinted;
Function readXMLLastPrinted();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('LastPrinted'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLLastPrinted);
End;
Function writeXMLLastPrinted(str);
Begin
XMLLastPrinted := class(TSXml).CurCodePageToUtf8(str);
End;
Property Created read readXMLCreated write writeXMLCreated;
Function readXMLCreated();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Created'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCreated);
End;
Function writeXMLCreated(str);
Begin
XMLCreated := class(TSXml).CurCodePageToUtf8(str);
End;
Property Modified read readXMLModified write writeXMLModified;
Function readXMLModified();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Modified'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLModified);
End;
Function writeXMLModified(str);
Begin
XMLModified := class(TSXml).CurCodePageToUtf8(str);
End;
Property Category read readXMLCategory write writeXMLCategory;
Function readXMLCategory();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Category'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCategory);
End;
Function writeXMLCategory(str);
Begin
XMLCategory := class(TSXml).CurCodePageToUtf8(str);
End;
Property ContentStatus read readXMLContentStatus write writeXMLContentStatus;
Function readXMLContentStatus();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ContentStatus'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLContentStatus);
End;
Function writeXMLContentStatus(str);
Begin
XMLContentStatus := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Title','name':'dc:title','obj':XMLTitle,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Subject','name':'dc:subject','obj':XMLSubject,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Creator','name':'dc:creator','obj':XMLCreator,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Keywords','name':'cp:keywords','obj':XMLKeywords,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Description','name':'dc:description','obj':XMLDescription,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'LastModifiedBy','name':'cp:lastModifiedBy','obj':XMLLastModifiedBy,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'LastPrinted','name':'cp:lastPrinted','obj':XMLLastPrinted,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Created','name':'dcterms:created xsi:type="dcterms:W3CDTF"','obj':XMLCreated,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Modified','name':'dcterms:modified xsi:type="dcterms:W3CDTF"','obj':XMLModified,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Category','name':'cp:category','obj':XMLCategory,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'ContentStatus','name':'cp:contentStatus','obj':XMLContentStatus,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
XMLTitle;
XMLSubject;
XMLCreator;
XMLKeywords;
XMLDescription;
XMLLastModifiedBy;
XMLLastPrinted;
XMLCreated;
XMLModified;
XMLCategory;
XMLContentStatus;
End;
///////////////////////////////////////////////////////////////
/// TBr
///////////////////////////////////////////////////////////////
type TBr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:br');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Type", "w:type", Type, ""),("Clear", "w:left", Clear, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Type;
Clear;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwFont
///////////////////////////////////////////////////////////////
type TwFont=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:rFonts');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property eastAsia read readXMLeastAsia write writeXMLeastAsia;
Function readXMLeastAsia();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('eastAsia'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLeastAsia);
End;
Function writeXMLeastAsia(str);
Begin
XMLeastAsia := class(TSXml).CurCodePageToUtf8(str);
End;
Property eastAsiaTheme read readXMLeastAsiaTheme write writeXMLeastAsiaTheme;
Function readXMLeastAsiaTheme();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('eastAsiaTheme'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLeastAsiaTheme);
End;
Function writeXMLeastAsiaTheme(str);
Begin
XMLeastAsiaTheme := class(TSXml).CurCodePageToUtf8(str);
End;
Property hAnsi read readXMLhAnsi write writeXMLhAnsi;
Function readXMLhAnsi();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('hAnsi'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLhAnsi);
End;
Function writeXMLhAnsi(str);
Begin
XMLhAnsi := class(TSXml).CurCodePageToUtf8(str);
End;
Property hAnsiTheme read readXMLhAnsiTheme write writeXMLhAnsiTheme;
Function readXMLhAnsiTheme();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('hAnsiTheme'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLhAnsiTheme);
End;
Function writeXMLhAnsiTheme(str);
Begin
XMLhAnsiTheme := class(TSXml).CurCodePageToUtf8(str);
End;
Property hint read readXMLhint write writeXMLhint;
Function readXMLhint();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('hint'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLhint);
End;
Function writeXMLhint(str);
Begin
XMLhint := class(TSXml).CurCodePageToUtf8(str);
End;
Property ascii read readXMLascii write writeXMLascii;
Function readXMLascii();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ascii'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLascii);
End;
Function writeXMLascii(str);
Begin
XMLascii := class(TSXml).CurCodePageToUtf8(str);
End;
Property asciiTheme read readXMLasciiTheme write writeXMLasciiTheme;
Function readXMLasciiTheme();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('asciiTheme'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLasciiTheme);
End;
Function writeXMLasciiTheme(str);
Begin
XMLasciiTheme := class(TSXml).CurCodePageToUtf8(str);
End;
Property cs read readXMLcs write writeXMLcs;
Function readXMLcs();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('cs'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLcs);
End;
Function writeXMLcs(str);
Begin
XMLcs := class(TSXml).CurCodePageToUtf8(str);
End;
Property csTheme read readXMLcsTheme write writeXMLcsTheme;
Function readXMLcsTheme();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('csTheme'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLcsTheme);
End;
Function writeXMLcsTheme(str);
Begin
XMLcsTheme := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("eastAsia", "w:eastAsia", XMLeastAsia, "东亚字体"),("eastAsiaTheme", "w:eastAsiaTheme", XMLeastAsiaTheme, "东亚主题字体"),("hAnsi", "w:hAnsi", XMLhAnsi, "Unicode范围内的所有字符该范围不属于上面定义的三个类别之一字体."),("hAnsiTheme", "w:hAnsiTheme", XMLhAnsiTheme, "Unicode范围内的所有字符该范围不属于上面定义的三个类别之一主题字体. "),("hint", "w:hint", XMLhint, "指定用于设置当前运行中任何不明确字符格式的字体类型."),("ascii", "w:ascii", XMLascii, "ASCII range (0 - 127) 字体."),("asciiTheme", "w:asciiTheme", XMLasciiTheme, "ASCII range (0 - 127) 主题字体."),("cs", "w:cs", XMLcs, "字体格式化复杂脚本Unicode范围内的所有字符."),("csTheme", "w:csTheme", XMLcsTheme, "主题字体格式化复杂脚本Unicode范围内的所有字符. ")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLeastAsia;
XMLeastAsiaTheme;
XMLhAnsi;
XMLhAnsiTheme;
XMLhint;
XMLascii;
XMLasciiTheme;
XMLcs;
XMLcsTheme;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwrPr
///////////////////////////////////////////////////////////////
type TwrPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:rPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
rFont := new TwFont(self, 'w:rFonts');
Bdr := new TwBorder(self, 'w:bdr');
Shading := new TwShading(self, 'w:shd');
Del := new TOptInfo(self, 'w:del');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
rFont.InitRootNode(node);
Bdr.InitRootNode(node);
Shading.InitRootNode(node);
Del.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'rFont','name':rFont.NodeName,'obj':rFont,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwFont')
,('field':'Bdr','name':Bdr.NodeName,'obj':Bdr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwBorder')
,('field':'Shading','name':Shading.NodeName,'obj':Shading,'attrEx':'','nodeType':'','attrName':'', 'desc':'底纹', 'class':'TwShading')
,('field':'Bold','name':'w:b','obj':Bold,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'黑体', 'class':'')
,('field':'noProof','name':'w:noProof','obj':noProof,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'不检查拼写或语法)', 'class':'')
,('field':'Color','name':'w:color','obj':Color,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'字体颜色', 'class':'')
,('field':'bCs','name':'w:bCs','obj':bCs,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'黑体,适用于从右到左语言文本', 'class':'')
,('field':'Caps','name':'w:caps','obj':Caps,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'首字母大写', 'class':'')
,('field':'SmallCaps','name':'w:smallCaps','obj':SmallCaps,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'首字母小写', 'class':'')
,('field':'Emboss','name':'w:emboss','obj':Emboss,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'浮雕效果', 'class':'')
,('field':'Em','name':'w:em','obj':Em,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'强调标志的类型,取值:"comma", "dot", "circle", "underDot", "none"', 'class':'')
,('field':'Imprint','name':'w:imprint','obj':Imprint,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'刻雕效果', 'class':'')
,('field':'Vanish','name':'w:vanish','obj':Vanish,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'隐藏', 'class':'')
,('field':'Italic','name':'w:i','obj':Italic,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'斜体', 'class':'')
,('field':'ICs','name':'w:iCs','obj':ICs,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'斜体,适用于从右到左语言文本', 'class':'')
,('field':'Strike','name':'w:strike','obj':Strike,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'单个删除线', 'class':'')
,('field':'dStrike','name':'w:dstrike','obj':dStrike,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'两个删除线', 'class':'')
,('field':'kern','name':'w:kern','obj':kern,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'字体紧排', 'class':'')
,('field':'Sz','name':'w:sz','obj':Sz,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'字体大小', 'class':'')
,('field':'szCs','name':'w:szCs','obj':szCs,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'复杂脚本字体大小', 'class':'')
,('field':'Ligatures','name':'w14:ligatures','obj':Ligatures,'attrEx':'w14:val','nodeType':'','attrName':'', 'desc':'连字方式', 'class':'')
,('field':'U','name':'w:u','obj':U,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'下划线', 'class':'')
,('field':'UColor','name':'w:u','obj':UColor,'attrEx':'w:color','nodeType':'','attrName':'', 'desc':'下划线颜色', 'class':'')
,('field':'vertAlign','name':'w:vertAlign','obj':vertAlign,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'对齐方式.取值:"subscript", "superscript"', 'class':'')
,('field':'eastAsia','name':'w:lang','obj':eastAsia,'attrEx':'w:eastAsia','nodeType':'','attrName':'', 'desc':'处理使用东亚字符的运行内容时应使用的语言.', 'class':'')
,('field':'Lang','name':'w:lang','obj':Lang,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'处理使用拉丁字符的本次运行内容时用于检查拼写和语法的语言.', 'class':'')
,('field':'bidi','name':'w:lang','obj':bidi,'attrEx':'w:bidi','nodeType':'','attrName':'', 'desc':'处理使用复杂脚本字符的运行内容时应使用的语言.', 'class':'')
,('field':'Del','name':Del.NodeName,'obj':Del,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TOptInfo')
,('field':'StyleId','name':'w:rStyle','obj':StyleId,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'WebHidden','name':'w:webHidden','obj':WebHidden,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'disable', 'class':'')
,('field':'ContextualAlternates','name':'w14:cntxtAlts','obj':ContextualAlternates,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'对指定的字体启用上下文替代字', 'class':'')
,('field':'SnapToGrid','name':'w:snapToGrid','obj':SnapToGrid,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'是否忽略选定文本每行中的字符数', 'class':'')
,('field':'NumForm','name':'w14:numForm','obj':NumForm,'attrEx':'w14:val','nodeType':'','attrName':'', 'desc':'OpenType 字体的数字形式', 'class':'')
,('field':'NumSpacing','name':'w14:numSpacing','obj':NumSpacing,'attrEx':'w14:val','nodeType':'','attrName':'', 'desc':'字体的数字间距', 'class':'')
,('field':'OutLine','name':'w:outline','obj':OutLine,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'镂空字体', 'class':'')
,('field':'W','name':'w:w','obj':W,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'字体的缩放百分比取值0~600', 'class':'')
,('field':'Position','name':'w:position','obj':Position,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'文本相对于基准线的位置', 'class':'')
,('field':'Shadow','name':'w:shadow','obj':Shadow,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'阴影字体', 'class':'')
,('field':'Spacing','name':'w:spacing','obj':Spacing,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'字符间距', 'class':'')
) union ExtNodes;
End;
Property Name write writeName;
Function writeName(n);
Begin
SetName(n, false);
End;
Function SetName(n, isUtf8);
Begin
nName := n;
if not isUtf8 then
nName := class(TSXml).CurCodePageToUtf8(n);
rFont.XMLcs := nName;
rFont.XMLeastAsia := nName;
rFont.XMLhAnsi := nName;
rFont.XMLascii := nName;
End;
Property Size read readSize write writeSize;
Function writeSize(n);
Begin
Sz := n * 2;
End;
Function readSize();
Begin
return Value("Sz") / 2;
End;
//Attributes
//Nodes
rFont;
Bdr;
Shading;
Bold;
noProof;
Color;
bCs;
Caps;
SmallCaps;
Emboss;
Em;
Imprint;
Vanish;
Italic;
ICs;
Strike;
dStrike;
kern;
Sz;
szCs;
Ligatures;
U;
UColor;
vertAlign;
eastAsia;
Lang;
bidi;
Del;
StyleId;
WebHidden;
ContextualAlternates;
SnapToGrid;
NumForm;
NumSpacing;
OutLine;
W;
Position;
Shadow;
Spacing;
End;
///////////////////////////////////////////////////////////////
/// TNumPr
///////////////////////////////////////////////////////////////
type TNumPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:numPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Level','name':'w:ilvl','obj':Level,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'项目层级', 'class':'')
,('field':'numId','name':'w:numId','obj':numId,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'项目编号ID', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Level;
numId;
End;
///////////////////////////////////////////////////////////////
/// TTextBoxImpl
///////////////////////////////////////////////////////////////
type TTextBoxImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:txbxContent');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
P := new TParagraphImpl(self, 'P');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
P.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'P','name':P.NodeName,'obj':P,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TParagraphImpl')
) union ExtNodes;
End;
//Attributes
//Nodes
P;
End;
///////////////////////////////////////////////////////////////
/// TWHyperLinkImpl
///////////////////////////////////////////////////////////////
type TWHyperLinkImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:hyperlink');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Anchor", "w:anchor", Anchor, ""),("History", "w:history", History, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Anchor;
History;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwpPr
///////////////////////////////////////////////////////////////
type TwpPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:pPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
NumPr := new TNumPr(self, 'w:numPr');
Tabs := new TTabStops(self, 'w:tabs');
rPr := new TwrPr(self, 'w:rPr');
cnfStyle := new TwCnfStyle(self, 'w:cnfStyle');
Bdr := new TpBdr(self, 'w:pBdr');
Shading := new TwShading(self, 'w:shd');
SectPr := new TDocSectionImpl(self, 'w:sectPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
NumPr.InitRootNode(node);
Tabs.InitRootNode(node);
rPr.InitRootNode(node);
cnfStyle.InitRootNode(node);
Bdr.InitRootNode(node);
Shading.InitRootNode(node);
SectPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'StyleId','name':'w:pStyle','obj':StyleId,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'段落样式ID', 'class':'')
,('field':'NumPr','name':NumPr.NodeName,'obj':NumPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'项目编号、数字编号', 'class':'TNumPr')
,('field':'Alignment','name':'w:jc','obj':Alignment,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'左、右、居中和对齐', 'class':'')
,('field':'FirstLineChars','name':'w:ind','obj':FirstLineChars,'attrEx':'w:firstLineChars','nodeType':'','attrName':'', 'desc':'字符单位中的其他首行缩进', 'class':'')
,('field':'FirstLineIndent','name':'w:ind','obj':FirstLineIndent,'attrEx':'w:firstLine','nodeType':'','attrName':'', 'desc':'指定段落第一行缩进的相对差异的值', 'class':'')
,('field':'RightChars','name':'w:ind','obj':RightChars,'attrEx':'w:rightChars','nodeType':'','attrName':'', 'desc':'字符单位中的右缩进', 'class':'')
,('field':'RightIndent','name':'w:ind','obj':RightIndent,'attrEx':'w:right','nodeType':'','attrName':'', 'desc':'指定段落的右边距和右边距之间的间距', 'class':'')
,('field':'LeftChars','name':'w:ind','obj':LeftChars,'attrEx':'w:leftChars','nodeType':'','attrName':'', 'desc':'字符单位中的左缩进', 'class':'')
,('field':'LeftIndent','name':'w:ind','obj':LeftIndent,'attrEx':'w:left','nodeType':'','attrName':'', 'desc':'当前文档中第一段的左缩进值', 'class':'')
,('field':'StartIndent','name':'w:ind','obj':StartIndent,'attrEx':'w:start','nodeType':'','attrName':'', 'desc':'w:start 控制从左到右段落的左缩进或从右到左段落的右缩进w:end 控制另一边', 'class':'')
,('field':'EndIndent','name':'w:ind','obj':EndIndent,'attrEx':'w:end','nodeType':'','attrName':'', 'desc':'w:start 控制从左到右段落的左缩进或从右到左段落的右缩进w:end 控制另一边', 'class':'')
,('field':'HangingChars','name':'w:ind','obj':HangingChars,'attrEx':'w:hangingChars','nodeType':'','attrName':'', 'desc':'从字符单位的第一行中删除的缩进', 'class':'')
,('field':'Hanging','name':'w:ind','obj':Hanging,'attrEx':'w:hanging','nodeType':'','attrName':'', 'desc':'从第一行中删除的缩进', 'class':'')
,('field':'LineSpacingRule','name':'w:spacing','obj':LineSpacingRule,'attrEx':'w:lineRule','nodeType':'','attrName':'', 'desc':'该枚举指示 LineSpacing 应该被解释', 'class':'')
,('field':'LineSpacing','name':'w:spacing','obj':LineSpacing,'attrEx':'w:line','nodeType':'','attrName':'', 'desc':'当前文档中第一段的行距', 'class':'')
,('field':'AfterLines','name':'w:spacing','obj':AfterLines,'attrEx':'w:afterLines','nodeType':'','attrName':'', 'desc':'段落下方的间距(以行单位为单位)', 'class':'')
,('field':'SpaceAfter','name':'w:spacing','obj':SpaceAfter,'attrEx':'w:after','nodeType':'','attrName':'', 'desc':'当前文档中第一段的段后间距', 'class':'')
,('field':'SpaceAfterAuto','name':'w:spacing','obj':SpaceAfterAuto,'attrEx':'w:afterAutospacing','nodeType':'','attrName':'', 'desc':'自动设置指定段落的段后间距离设置该值为true时忽略SpaceAfter', 'class':'')
,('field':'BeforeLines','name':'w:spacing','obj':BeforeLines,'attrEx':'w:beforeLines','nodeType':'','attrName':'', 'desc':'段落上方的间距(以行单位为单位)行单位', 'class':'')
,('field':'SpaceBefore','name':'w:spacing','obj':SpaceBefore,'attrEx':'w:before','nodeType':'','attrName':'', 'desc':'当前文档中第一段的段前间距', 'class':'')
,('field':'SpaceBeforeAuto','name':'w:spacing','obj':SpaceBeforeAuto,'attrEx':'w:beforeAutospacing','nodeType':'','attrName':'', 'desc':'自动设置指定段落的段前距离设置该值为true时忽略SpaceBefore', 'class':'')
,('field':'OutlineLevel','name':'w:outlineLvl','obj':OutlineLevel,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'设置当前文档中第一段的大纲级别', 'class':'')
,('field':'KeepTogether','name':'w:keepLines','obj':KeepTogether,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'段落是否应保持完整且不应跨越页面边界', 'class':'')
,('field':'KeepWithNext','name':'w:keepNext','obj':KeepWithNext,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'该段是否应与下一段保持在同一页上', 'class':'')
,('field':'PageBreakBefore','name':'w:pageBreakBefore','obj':PageBreakBefore,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'该段该段出现在前一段之后的页面顶部', 'class':'')
,('field':'WidowControl','name':'w:widowControl','obj':WidowControl,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'当Word对文档重新分页时如果段落中的第一行和最后一行与段落的其余部分保持在同一页上', 'class':'')
,('field':'TextAlignment','name':'w:textAlignment','obj':TextAlignment,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'该值指示文本内容的水平对齐方式', 'class':'')
,('field':'AdjustRightInd','name':'w:adjustRightInd','obj':AdjustRightInd,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'使用文档网格时自动调整右缩进', 'class':'')
,('field':'SnapToGrid','name':'w:snapToGrid','obj':SnapToGrid,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'如果定义了文档网络,则对齐到网格', 'class':'')
,('field':'AutoSpaceDE','name':'w:autoSpaceDE','obj':AutoSpaceDE,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'自动调整拉丁语和东亚文本的间距', 'class':'')
,('field':'AutoSpaceDN','name':'w:autoSpaceDN','obj':AutoSpaceDN,'attrEx':'w:val','nodeType':'empty','attrName':'', 'desc':'自动调整东亚文本和数字的间距', 'class':'')
,('field':'Tabs','name':Tabs.NodeName,'obj':Tabs,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TTabStops')
,('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TwrPr')
,('field':'cnfStyle','name':cnfStyle.NodeName,'obj':cnfStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'段落条件格式此元素指定格式属性的已应用于此段落如果该段落包含在表格单元格的条件的表格样式的集。https://learn.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.wordprocessing.conditionalformatstyle?view=openxml-2.8.1', 'class':'TwCnfStyle')
,('field':'textFlow','name':'w:textFlow','obj':textFlow,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'Bdr','name':Bdr.NodeName,'obj':Bdr,'attrEx':'','nodeType':'','attrName':'', 'desc':'文字边框', 'class':'TpBdr')
,('field':'Collapsed','name':'w15:collapsed','obj':Collapsed,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'段落格式是否默认折叠', 'class':'')
,('field':'TopLinePunct','name':'w:topLinePunct','obj':TopLinePunct,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'行首标点符号是否改为半角字符', 'class':'')
,('field':'OverflowPunct','name':'w:overflowPunct','obj':OverflowPunct,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'是否启用悬挂式标点', 'class':'')
,('field':'Kinsoku','name':'w:kinsoku','obj':Kinsoku,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'是否应用东亚语言文字的换行规则', 'class':'')
,('field':'SuppressAutoHyphens','name':'w:suppressAutoHyphens','obj':SuppressAutoHyphens,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'段落不自动断字', 'class':'')
,('field':'SuppressLineNumbers','name':'w:suppressLineNumbers','obj':SuppressLineNumbers,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'取消段落的行号', 'class':'')
,('field':'MirrorIndents','name':'w:mirrorIndents','obj':MirrorIndents,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'是否左右缩进宽度相同', 'class':'')
,('field':'Bidi','name':'w:bidi','obj':Bidi,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'设置指定段落的读取次序而不改变其对齐方式', 'class':'')
,('field':'Shading','name':Shading.NodeName,'obj':Shading,'attrEx':'','nodeType':'','attrName':'', 'desc':'表头底纹', 'class':'TwShading')
,('field':'TextboxTightWrap','name':'w:textboxTightWrap','obj':TextboxTightWrap,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'文本环绕形状或文本框的紧密程度', 'class':'')
,('field':'WordWrap','name':'w:wordWrap','obj':WordWrap,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'是否在指定段落或文本框架的西文单词中间断字换行', 'class':'')
,('field':'SectPr','name':SectPr.NodeName,'obj':SectPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'文字边框', 'class':'TDocSectionImpl')
) union ExtNodes;
End;
//Attributes
//Nodes
StyleId;
NumPr;
Alignment;
FirstLineChars;
FirstLineIndent;
RightChars;
RightIndent;
LeftChars;
LeftIndent;
StartIndent;
EndIndent;
HangingChars;
Hanging;
LineSpacingRule;
LineSpacing;
AfterLines;
SpaceAfter;
SpaceAfterAuto;
BeforeLines;
SpaceBefore;
SpaceBeforeAuto;
OutlineLevel;
KeepTogether;
KeepWithNext;
PageBreakBefore;
WidowControl;
TextAlignment;
AdjustRightInd;
SnapToGrid;
AutoSpaceDE;
AutoSpaceDN;
Tabs;
rPr;
cnfStyle;
textFlow;
Bdr;
Collapsed;
TopLinePunct;
OverflowPunct;
Kinsoku;
SuppressAutoHyphens;
SuppressLineNumbers;
MirrorIndents;
Bidi;
Shading;
TextboxTightWrap;
WordWrap;
SectPr;
End;
///////////////////////////////////////////////////////////////
/// TcNvGraphicFramePr
///////////////////////////////////////////////////////////////
type TcNvGraphicFramePr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'wp:TcNvGraphicFramePr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'noChangeAspect','name':'a:graphicFrameLocks','obj':noChangeAspect,'attrEx':'noChangeAspect','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'xmlns','name':'a:graphicFrameLocks','obj':xmlns,'attrEx':'xmlns:a','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
noChangeAspect;
xmlns;
End;
///////////////////////////////////////////////////////////////
/// TnvPicPr
///////////////////////////////////////////////////////////////
type TnvPicPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pic:nvPicPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
CNvPr := new TCNvPr(self, 'pic:cNvPr');
CNvPicPr := new TcNvPicPr(self, 'xdr:cNvPicPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
CNvPr.InitRootNode(node);
CNvPicPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'CNvPr','name':CNvPr.NodeName,'obj':CNvPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TCNvPr')
,('field':'CNvPicPr','name':CNvPicPr.NodeName,'obj':CNvPicPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcNvPicPr')
,('field':'CNvSpPr','name':'xdr:cNvSpPr','obj':CNvSpPr,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
CNvPr;
CNvPicPr;
CNvSpPr;
End;
///////////////////////////////////////////////////////////////
/// TCNvPr
///////////////////////////////////////////////////////////////
type TCNvPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pic:cNvPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
ExtLst := new TExtLst(self, 'a:extLst');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
ExtLst.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("ID", "id", ID, ""),("Name", "name", Name, ""),("Descr", "descr", Descr, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'ExtLst','name':ExtLst.NodeName,'obj':ExtLst,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TExtLst')
) union ExtNodes;
End;
//Attributes
ID;
Name;
Descr;
//Nodes
ExtLst;
End;
///////////////////////////////////////////////////////////////
/// TExtLst
///////////////////////////////////////////////////////////////
type TExtLst=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:extLst');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Ext := new TAext(self, 'a:ext');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Ext.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Ext','name':Ext.NodeName,'obj':Ext,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TAext')
) union ExtNodes;
End;
//Attributes
//Nodes
Ext;
End;
///////////////////////////////////////////////////////////////
/// TAext
///////////////////////////////////////////////////////////////
type TAext=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:ext');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Uri", "uri", Uri, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Xmlns16','name':'a16:creationId','obj':Xmlns16,'attrEx':'xmlns:a16','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Id','name':'a16:creationId','obj':Id,'attrEx':'id','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
Uri;
//Nodes
Xmlns16;
Id;
End;
///////////////////////////////////////////////////////////////
/// TprstGeom
///////////////////////////////////////////////////////////////
type TprstGeom=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:prstGeom');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Prst", "prst", Prst, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'AvLst','name':'a:avLst','obj':AvLst,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
Prst;
//Nodes
AvLst;
End;
///////////////////////////////////////////////////////////////
/// TblipFill
///////////////////////////////////////////////////////////////
type TblipFill=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pic:blipFill');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Blip := new TBlip(self, 'a:blip');
Stretch := new TStretch(self, 'a:stretch');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Blip.InitRootNode(node);
Stretch.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Blip','name':Blip.NodeName,'obj':Blip,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBlip')
,('field':'Stretch','name':Stretch.NodeName,'obj':Stretch,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TStretch')
) union ExtNodes;
End;
//Attributes
//Nodes
Blip;
Stretch;
End;
///////////////////////////////////////////////////////////////
/// TwLine
///////////////////////////////////////////////////////////////
type TwLine=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:ln');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SolidFill := new TSolidFill(self, 'a:solidFill');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SolidFill.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'SolidFill','name':SolidFill.NodeName,'obj':SolidFill,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSolidFill')
) union ExtNodes;
End;
//Attributes
//Nodes
SolidFill;
End;
///////////////////////////////////////////////////////////////
/// TpicsPpr
///////////////////////////////////////////////////////////////
type TpicsPpr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pic:spPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
XFrm := new TXfrm(self, 'a:xfrm');
PrstGeom := new TprstGeom(self, 'a:prstGeom');
Line := new TwLine(self, 'a:ln');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
XFrm.InitRootNode(node);
PrstGeom.InitRootNode(node);
Line.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'XFrm','name':XFrm.NodeName,'obj':XFrm,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TXfrm')
,('field':'PrstGeom','name':PrstGeom.NodeName,'obj':PrstGeom,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TprstGeom')
,('field':'Line','name':Line.NodeName,'obj':Line,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwLine')
) union ExtNodes;
End;
//Attributes
//Nodes
XFrm;
PrstGeom;
Line;
End;
///////////////////////////////////////////////////////////////
/// TBlip
///////////////////////////////////////////////////////////////
type TBlip=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:blip');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Xmlns", "xmlns:r", Xmlns, ""),("Embed", "r:embed", Embed, ""),("Cstate", "cstate", Cstate, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Xmlns;
Embed;
Cstate;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TStretch
///////////////////////////////////////////////////////////////
type TStretch=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:stretch');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'FillRect','name':'a:fillRect','obj':FillRect,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
FillRect;
End;
///////////////////////////////////////////////////////////////
/// TRef
///////////////////////////////////////////////////////////////
type TRef=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:stretch');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
SchemeClr := new TScheme(self, 'a:schemeClr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
SchemeClr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("Idx", "idx", Idx, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'SchemeClr','name':SchemeClr.NodeName,'obj':SchemeClr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TScheme')
) union ExtNodes;
End;
//Attributes
Idx;
//Nodes
SchemeClr;
End;
///////////////////////////////////////////////////////////////
/// TScheme
///////////////////////////////////////////////////////////////
type TScheme=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:schemeClr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Val", "val", Val, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Shade','name':'a:shade','obj':Shade,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
Val;
//Nodes
Shade;
End;
///////////////////////////////////////////////////////////////
/// TXdrStyle
///////////////////////////////////////////////////////////////
type TXdrStyle=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:stretch');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
LnRef := new TRef(self, 'a:lnRef');
FillRef := new TRef(self, 'a:fillRef');
EffectRef := new TRef(self, 'a:effectRef');
FontRef := new TRef(self, 'a:fontRef');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
LnRef.InitRootNode(node);
FillRef.InitRootNode(node);
EffectRef.InitRootNode(node);
FontRef.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'LnRef','name':LnRef.NodeName,'obj':LnRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRef')
,('field':'FillRef','name':FillRef.NodeName,'obj':FillRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRef')
,('field':'EffectRef','name':EffectRef.NodeName,'obj':EffectRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRef')
,('field':'FontRef','name':FontRef.NodeName,'obj':FontRef,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRef')
) union ExtNodes;
End;
//Attributes
//Nodes
LnRef;
FillRef;
EffectRef;
FontRef;
End;
///////////////////////////////////////////////////////////////
/// TPic
///////////////////////////////////////////////////////////////
type TPic=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pic:pic');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
NvPicPr := new TnvPicPr(self, 'pic:nvPicPr');
BlipFill := new TblipFill(self, 'pic:blipFill');
SpPr := new TSpPr(self, 'pic:spPr');
Style := new TXdrStyle(self, 'xdr:style');
TxBody := new TTxPr(self, 'xdr:txBody');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
NvPicPr.InitRootNode(node);
BlipFill.InitRootNode(node);
SpPr.InitRootNode(node);
Style.InitRootNode(node);
TxBody.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("Macro", "macro", Macro, ""),("Textlink", "textlink", Textlink, ""),("Xmlns", "xmlns:pic", Xmlns, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'NvPicPr','name':NvPicPr.NodeName,'obj':NvPicPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TnvPicPr')
,('field':'BlipFill','name':BlipFill.NodeName,'obj':BlipFill,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TblipFill')
,('field':'SpPr','name':SpPr.NodeName,'obj':SpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSpPr')
,('field':'Style','name':Style.NodeName,'obj':Style,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TXdrStyle')
,('field':'TxBody','name':TxBody.NodeName,'obj':TxBody,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TTxPr')
) union ExtNodes;
End;
//Attributes
Macro;
Textlink;
Xmlns;
//Nodes
NvPicPr;
BlipFill;
SpPr;
Style;
TxBody;
End;
///////////////////////////////////////////////////////////////
/// TGraphicData
///////////////////////////////////////////////////////////////
type TGraphicData=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:graphicData');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Pic := new TPic(self, 'pic:pic');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Pic.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("uri", "uri", uri, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'C','name':'c:chart','obj':C,'attrEx':'xmlns:c','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'R','name':'c:chart','obj':R,'attrEx':'xmlns:r','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Rid','name':'c:chart','obj':Rid,'attrEx':'r:id','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Pic','name':Pic.NodeName,'obj':Pic,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TPic')
) union ExtNodes;
End;
//Attributes
uri;
//Nodes
C;
R;
Rid;
Pic;
End;
///////////////////////////////////////////////////////////////
/// TGraphic
///////////////////////////////////////////////////////////////
type TGraphic=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'a:graphic');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
GraphicData := new TGraphicData(self, 'a:graphicData');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
GraphicData.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("xmlns", "xmlns:a", xmlns, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'GraphicData','name':GraphicData.NodeName,'obj':GraphicData,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TGraphicData')
) union ExtNodes;
End;
//Attributes
xmlns;
//Nodes
GraphicData;
End;
///////////////////////////////////////////////////////////////
/// TwInline
///////////////////////////////////////////////////////////////
type TwInline=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'wp:inline');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
cNvGraphicFramePr := new TcNvGraphicFramePr(self, 'wp:cNvGraphicFramePr');
Graphic := new TGraphic(self, 'a:graphic');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
cNvGraphicFramePr.InitRootNode(node);
Graphic.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("distT", "distT", distT, ""),("distB", "distB", distB, ""),("distL", "distL", distL, ""),("distR", "distR", distR, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'cx','name':'wp:extent','obj':cx,'attrEx':'cx','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'cy','name':'wp:extent','obj':cy,'attrEx':'cy','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'l','name':'wp:effectExtent','obj':l,'attrEx':'l','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'t','name':'wp:effectExtent','obj':t,'attrEx':'t','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'r','name':'wp:effectExtent','obj':r,'attrEx':'r','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'b','name':'wp:effectExtent','obj':b,'attrEx':'b','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'ID','name':'wp:docPr','obj':ID,'attrEx':'id','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Name','name':'wp:docPr','obj':Name,'attrEx':'name','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Descr','name':'wp:docPr','obj':Descr,'attrEx':'descr','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'cNvGraphicFramePr','name':cNvGraphicFramePr.NodeName,'obj':cNvGraphicFramePr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TcNvGraphicFramePr')
,('field':'Graphic','name':Graphic.NodeName,'obj':Graphic,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TGraphic')
) union ExtNodes;
End;
//Attributes
distT;
distB;
distL;
distR;
//Nodes
cx;
cy;
l;
t;
r;
b;
ID;
Name;
Descr;
cNvGraphicFramePr;
Graphic;
End;
///////////////////////////////////////////////////////////////
/// TwDrawing
///////////////////////////////////////////////////////////////
type TwDrawing=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:drawing');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
WInline := new TwInline(self, 'wp:inline');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
WInline.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'WInline','name':WInline.NodeName,'obj':WInline,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwInline')
) union ExtNodes;
End;
//Attributes
//Nodes
WInline;
End;
///////////////////////////////////////////////////////////////
/// TText
///////////////////////////////////////////////////////////////
type TText=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:t');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Space", "xml:space", Space, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Text','name':'Text','obj':Text,'attrEx':'','nodeType':'tcdata','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
Space;
//Nodes
Text;
End;
///////////////////////////////////////////////////////////////
/// TRunImpl
///////////////////////////////////////////////////////////////
type TRunImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:r');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
rPr := new TwrPr(self, 'w:rPr');
Br := new TBr(self, 'w:br');
Drawing := new TwDrawing(self, 'w:drawing');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
rPr.InitRootNode(node);
Br.InitRootNode(node);
Drawing.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("xmlns", "xmlns:w", xmlns, ""),("rsidR", "w:rsidR", rsidR, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'字体属性', 'class':'TwrPr')
,('field':'fldCharType','name':'w:fldChar','obj':fldCharType,'attrEx':'w:fldCharType','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Dirty','name':'w:fldChar','obj':Dirty,'attrEx':'w:dirty','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'InstrText','name':'w:instrText','obj':InstrText,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'InstrTextSpace','name':'w:instrText','obj':InstrTextSpace,'attrEx':'xml:space','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Tab','name':'w:tab','obj':Tab,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'Br','name':Br.NodeName,'obj':Br,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBr')
,('field':'T','name':'w:t','obj':T,'attrEx':'','nodeType':'pcdata','attrName':'', 'desc':'', 'class':'')
,('field':'Space','name':'w:t','obj':Space,'attrEx':'xml:space','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Drawing','name':Drawing.NodeName,'obj':Drawing,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwDrawing')
,('field':'FootnoteReference','name':'w:footnoteReference','obj':FootnoteReference,'attrEx':'w:id','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Separator','name':'w:separator','obj':Separator,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
,('field':'ContinuationSeparator','name':'w:continuationSeparator','obj':ContinuationSeparator,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
xmlns;
rsidR;
//Nodes
rPr;
fldCharType;
Dirty;
InstrText;
InstrTextSpace;
Tab;
Br;
T;
Space;
Drawing;
FootnoteReference;
Separator;
ContinuationSeparator;
End;
///////////////////////////////////////////////////////////////
/// TFootnoteImpl
///////////////////////////////////////////////////////////////
type TFootnoteImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:footnote');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Type", "w:type", Type, ""),("Id", "w:id", Id, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Type;
Id;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TFootnoteBody
///////////////////////////////////////////////////////////////
type TFootnoteBody=class(NodeInfo, TFootnotes)
Function Create(); overload;
Begin
Create(nil, 'w:footnote');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TBookMark
///////////////////////////////////////////////////////////////
type TBookMark=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:bookmarkStart');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("name", "w:name", name, ""),("id", "w:id", id, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
name;
id;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TFldSimple
///////////////////////////////////////////////////////////////
type TFldSimple=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:fldSimple');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Run := new TRun(self, 'w:r');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Run.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("instr", "w:instr", instr, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Run','name':Run.NodeName,'obj':Run,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRun')
) union ExtNodes;
End;
//Attributes
instr;
//Nodes
Run;
End;
///////////////////////////////////////////////////////////////
/// TParagraphImpl
///////////////////////////////////////////////////////////////
type TParagraphImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:p');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
pPr := new TwpPr(self, 'w:pPr');
markStart := new TBookMark(self, 'w:bookmarkStart');
Run := new TRun(self, 'w:r');
markEnd := new TBookMark(self, 'w:bookmarkEnd');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
pPr.InitRootNode(node);
markStart.InitRootNode(node);
Run.InitRootNode(node);
markEnd.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'pPr','name':pPr.NodeName,'obj':pPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'段落格式', 'class':'TwpPr')
,('field':'markStart','name':markStart.NodeName,'obj':markStart,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBookMark')
,('field':'Run','name':Run.NodeName,'obj':Run,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRun')
,('field':'markEnd','name':markEnd.NodeName,'obj':markEnd,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TBookMark')
) union ExtNodes;
End;
//Attributes
//Nodes
pPr;
markStart;
Run;
markEnd;
End;
///////////////////////////////////////////////////////////////
/// TwBody
///////////////////////////////////////////////////////////////
type TwBody=class(NodeInfo, TDocumentBody)
Function Create(); overload;
Begin
Create(nil, 'w:body');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
ps := array();
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'ps','name':'w:p','obj':ps,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TParagraphImpl')
) union ExtNodes;
End;
//Attributes
//Nodes
ps;
End;
///////////////////////////////////////////////////////////////
/// TOptInfo
///////////////////////////////////////////////////////////////
type TOptInfo=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:cellDel');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Author read readXMLAuthor write writeXMLAuthor;
Function readXMLAuthor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Author'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLAuthor);
End;
Function writeXMLAuthor(str);
Begin
XMLAuthor := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Author", "w:author", XMLAuthor, "作者"),("Date", "w:date", Date, "修改日期"),("ID", "w:id", ID, "disable")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLAuthor;
Date;
ID;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TRevisionImpl
///////////////////////////////////////////////////////////////
type TRevisionImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:del');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Author read readXMLAuthor write writeXMLAuthor;
Function readXMLAuthor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Author'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLAuthor);
End;
Function writeXMLAuthor(str);
Begin
XMLAuthor := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Author", "w:author", XMLAuthor, "作者"),("Date", "w:date", Date, "修改日期"),("ID", "w:id", ID, "disable")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLAuthor;
Date;
ID;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TDocCommentImpl
///////////////////////////////////////////////////////////////
type TDocCommentImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:comment');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
P := new TParagraphImpl(self, 'w:p');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
P.InitRootNode(node);
End;
Property Author read readXMLAuthor write writeXMLAuthor;
Function readXMLAuthor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Author'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLAuthor);
End;
Function writeXMLAuthor(str);
Begin
XMLAuthor := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Author", "w:author", XMLAuthor, "作者"),("Date", "w:date", Date, "修改日期"),("ID", "w:id", ID, "disable")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'P','name':P.NodeName,'obj':P,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TParagraphImpl')
) union ExtNodes;
End;
//Attributes
XMLAuthor;
Date;
ID;
//Nodes
P;
End;
///////////////////////////////////////////////////////////////
/// TCol
///////////////////////////////////////////////////////////////
type TCol=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:cols');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("W", "w:w", W, "Column Width"),("space", "w:space", space, "Space Before Following Column")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
W;
space;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TColsImpl
///////////////////////////////////////////////////////////////
type TColsImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:cols');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
col := array();
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("equalWidth", "w:equalWidth", equalWidth, "Equal Column Widths"),("num", "w:num", num, "Number of Equal Width Columns"),("sep", "w:sep", sep, "Draw Line Between Columns"),("space", "w:space", space, "Spacing Between Equal Width Columns")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'col','name':'w:col','obj':col,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'Column Definitions', 'class':'TCol')
) union ExtNodes;
End;
//Attributes
equalWidth;
num;
sep;
space;
//Nodes
col;
End;
///////////////////////////////////////////////////////////////
/// TPageMargin
///////////////////////////////////////////////////////////////
type TPageMargin=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:pgMar');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("gutter", "w:gutter", gutter, "当前节中每页的页边距."),("footer", "w:footer", footer, "指定从页面底部边缘到页脚底部边缘的距离(以二十分之一点为单位)."),("header", "w:header", header, "指定从页面上边缘到页眉上边缘的距离(以二十分之一为单位)."),("left", "w:left", left, "指定页面左边缘与此文档文本范围左边缘之间的距离(以点的二十分之一为单位)."),("bottom", "w:bottom", bottom, "指定主文档的文本页边距底部与本节中所有页面的页面底部之间的距离(以二十分之一为单位)."),("right", "w:right", right, "指定页面右边缘与此文档文本范围右边缘之间的距离(以点的二十分之一为单位)."),("top", "w:top", top, "指定主文档的文本页边距顶部与本节中所有页面的页面顶部之间的距离(以二十分之一为单位).")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
gutter;
footer;
header;
left;
bottom;
right;
top;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TDocGrid
///////////////////////////////////////////////////////////////
type TDocGrid=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:docGrid');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("charSpace", "w:charSpace", charSpace, "字符间距"),("charSize", "w:charSize", charSize, "文档网格字符间距"),("linePitch", "w:linePitch", linePitch, "文档网格线间距"),("Type", "w:type", Type, "文档网格线类型")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
charSpace;
charSize;
linePitch;
Type;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TReference
///////////////////////////////////////////////////////////////
type TReference=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:headerReference');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Type", "w:type", Type, ""),("ID", "r:id", ID, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Type;
ID;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TPageBorders
///////////////////////////////////////////////////////////////
type TPageBorders=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:pgBorders');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Top := new TwBorder(self, 'w:top');
Left := new TwBorder(self, 'w:left');
Bottom := new TwBorder(self, 'w:bottom');
Right := new TwBorder(self, 'w:right');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Top.InitRootNode(node);
Left.InitRootNode(node);
Bottom.InitRootNode(node);
Right.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("offsetFrom", "w:offsetFrom", offsetFrom, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Top','name':Top.NodeName,'obj':Top,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'Left','name':Left.NodeName,'obj':Left,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'Bottom','name':Bottom.NodeName,'obj':Bottom,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'Right','name':Right.NodeName,'obj':Right,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
) union ExtNodes;
End;
//Attributes
offsetFrom;
//Nodes
Top;
Left;
Bottom;
Right;
End;
///////////////////////////////////////////////////////////////
/// TPage
///////////////////////////////////////////////////////////////
type TPage=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:pgSz');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Code", "w:code", Code, "纸张类型(指定打印机特定的纸张代码)."),("Height", "w:h", Height, "当前节中所有页面的高度(以二十分之一点为单位)."),("Width", "w:w", Width, "此属性表示当前节中所有页面的宽度(以二十分之一为单位)."),("Orient ", "w:orient ", Orient , "指定此节中所有页面的方向.")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Code;
Height;
Width;
Orient ;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TDocSectionImpl
///////////////////////////////////////////////////////////////
type TDocSectionImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:sectPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Header := new TReference(self, 'w:headerReference');
Footer := new TReference(self, 'w:footerReference');
cols := new TCols(self, 'w:cols');
docGrid := new TDocGrid(self, 'w:docGrid');
pgMar := new TPageMargin(self, 'w:pgMar');
Page := new TPage(self, 'w:pgSz');
Borders := new TPageBorders(self, 'w:pgBorders');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Header.InitRootNode(node);
Footer.InitRootNode(node);
cols.InitRootNode(node);
docGrid.InitRootNode(node);
pgMar.InitRootNode(node);
Page.InitRootNode(node);
Borders.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Header','name':Header.NodeName,'obj':Header,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TReference')
,('field':'Footer','name':Footer.NodeName,'obj':Footer,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TReference')
,('field':'bidi','name':'w:bidi','obj':bidi,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'章节从右到左的布局', 'class':'')
,('field':'cols','name':cols.NodeName,'obj':cols,'attrEx':'','nodeType':'','attrName':'', 'desc':'Column Definitions', 'class':'TCols')
,('field':'docGrid','name':docGrid.NodeName,'obj':docGrid,'attrEx':'','nodeType':'','attrName':'', 'desc':'Document Grid', 'class':'TDocGrid')
,('field':'pgMar','name':pgMar.NodeName,'obj':pgMar,'attrEx':'','nodeType':'','attrName':'', 'desc':'Page Margin设置', 'class':'TPageMargin')
,('field':'Page','name':Page.NodeName,'obj':Page,'attrEx':'','nodeType':'','attrName':'', 'desc':'页面设置', 'class':'TPage')
,('field':'Borders','name':Borders.NodeName,'obj':Borders,'attrEx':'','nodeType':'','attrName':'', 'desc':'页面边框属性', 'class':'TPageBorders')
,('field':'titlePg','name':'w:titlePg','obj':titlePg,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'第一页是否有不同的页眉和页脚.', 'class':'')
,('field':'vAlign','name':'w:vAlign','obj':vAlign,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'当前章节,文本上下边距的垂直对齐方式.', 'class':'')
,('field':'Type','name':'w:type','obj':Type,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'当前节的类型(指定当前节的内容相对于上一节的放置方式).', 'class':'')
,('field':'textDirection','name':'w:textDirection','obj':textDirection,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'此节的文本方向.', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Header;
Footer;
bidi;
cols;
docGrid;
pgMar;
Page;
Borders;
titlePg;
vAlign;
Type;
textDirection;
End;
///////////////////////////////////////////////////////////////
/// TcellMerge
///////////////////////////////////////////////////////////////
type TcellMerge=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:cellMerge');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Author read readXMLAuthor write writeXMLAuthor;
Function readXMLAuthor();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Author'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLAuthor);
End;
Function writeXMLAuthor(str);
Begin
XMLAuthor := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("Author", "w:author", XMLAuthor, ""),("Date", "w:date", Date, ""),("ID", "w:id", ID, ""),("vmerge", "w:vmerge", vmerge, "垂直合并设置。"),("vmergeOrig", "w:vmergeOrig", vmergeOrig, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLAuthor;
Date;
ID;
vmerge;
vmergeOrig;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwTcPr
///////////////////////////////////////////////////////////////
type TwTcPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tcPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Shading := new TwShading(self, 'w:shd');
cnfStyle := new TwCnfStyle(self, 'w:cnfStyle');
CellMar := new TTblCellMar(self, 'w:tcMar');
Borders := new TwTblBorders(self, 'w:tcBorders');
Del := new TOptInfo(self, 'w:cellDel');
Ins := new TOptInfo(self, 'w:cellIns');
cellMerge := new TcellMerge(self, 'w:cellMerge');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Shading.InitRootNode(node);
cnfStyle.InitRootNode(node);
CellMar.InitRootNode(node);
Borders.InitRootNode(node);
Del.InitRootNode(node);
Ins.InitRootNode(node);
cellMerge.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Width','name':'w:tcW','obj':Width,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'表格单元格宽度', 'class':'')
,('field':'Type','name':'w:tcW','obj':Type,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'宽度属性的单位。此属性用于定义表格的各种属性,包括:单元格间距、首选宽度和表格边距。', 'class':'')
,('field':'Shading','name':Shading.NodeName,'obj':Shading,'attrEx':'','nodeType':'','attrName':'', 'desc':'表头底纹', 'class':'TwShading')
,('field':'cnfStyle','name':cnfStyle.NodeName,'obj':cnfStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'此表格单元的条件表格样式格式设置属性集。', 'class':'TwCnfStyle')
,('field':'CellMar','name':CellMar.NodeName,'obj':CellMar,'attrEx':'','nodeType':'','attrName':'', 'desc':'单元格边距设置', 'class':'TTblCellMar')
,('field':'Borders','name':Borders.NodeName,'obj':Borders,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwTblBorders')
,('field':'gridSpan','name':'w:gridSpan','obj':gridSpan,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'当前表单元格所跨的网格列', 'class':'')
,('field':'hideMark','name':'w:hideMark','obj':hideMark,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'忽略行高度计算中的单元格结尾标记', 'class':'')
,('field':'hmerge','name':'w:hmerge','obj':hmerge,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'水平合并单元格', 'class':'')
,('field':'noWrap','name':'w:noWrap','obj':noWrap,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'不换行单元格内容', 'class':'')
,('field':'tcFitText','name':'w:tcFitText','obj':tcFitText,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'调整单元格内的文本', 'class':'')
,('field':'textDirection','name':'w:textDirection','obj':textDirection,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'表格单元格文本文字方向', 'class':'')
,('field':'Del','name':Del.NodeName,'obj':Del,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TOptInfo')
,('field':'Ins','name':Ins.NodeName,'obj':Ins,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TOptInfo')
,('field':'cellMerge','name':cellMerge.NodeName,'obj':cellMerge,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TcellMerge')
,('field':'vAlign','name':'w:vAlign','obj':vAlign,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'表格单元格垂直对齐', 'class':'')
,('field':'vmerge','name':'w:vmerge','obj':vmerge,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'垂直合并单元格', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Width;
Type;
Shading;
cnfStyle;
CellMar;
Borders;
gridSpan;
hideMark;
hmerge;
noWrap;
tcFitText;
textDirection;
Del;
Ins;
cellMerge;
vAlign;
vmerge;
End;
///////////////////////////////////////////////////////////////
/// TwTc
///////////////////////////////////////////////////////////////
type TwTc=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tc');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
TcPr := new TwTcPr(self, 'w:tcPr');
P := new TParagraphImpl(self, 'w:p');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
TcPr.InitRootNode(node);
P.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'TcPr','name':TcPr.NodeName,'obj':TcPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwTcPr')
,('field':'P','name':P.NodeName,'obj':P,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TParagraphImpl')
) union ExtNodes;
End;
//Attributes
//Nodes
TcPr;
P;
End;
///////////////////////////////////////////////////////////////
/// TwTrPr
///////////////////////////////////////////////////////////////
type TwTrPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:trPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
cnfStyle := new TwCnfStyle(self, 'w:cnfStyle');
Del := new TOptInfo(self, 'w:del');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
cnfStyle.InitRootNode(node);
Del.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Height','name':'w:trHeight','obj':Height,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'行高', 'class':'')
,('field':'Rule','name':'w:trHeight','obj':Rule,'attrEx':'w:hRule','nodeType':'','attrName':'', 'desc':'如果Rule的值为自动则应根据其内容的高度自动确定表行的高度忽略Height值如果Rule的值至少为least则表行的高度应至少为Height属性的值如果Rule的值是精确的那么表行的高度应该正好是Height属性的值。', 'class':'')
,('field':'Alignment','name':'w:jc','obj':Alignment,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'对齐方式left、right、center', 'class':'')
,('field':'CantSplit','name':'w:cantSplit','obj':CantSplit,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'表行不能跨页分隔', 'class':'')
,('field':'cnfStyle','name':cnfStyle.NodeName,'obj':cnfStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'表行条件格式', 'class':'TwCnfStyle')
,('field':'gridAfter','name':'w:gridAfter','obj':gridAfter,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'最后一个单元格后的网格列', 'class':'')
,('field':'gridBefore','name':'w:gridBefore','obj':gridBefore,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'第一个单元格之前的网格列', 'class':'')
,('field':'hidden','name':'w:hidden','obj':hidden,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'隐藏表行标记', 'class':'')
,('field':'tblHeader','name':'w:tblHeader','obj':tblHeader,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'在每个新页面上重复表行', 'class':'')
,('field':'Del','name':Del.NodeName,'obj':Del,'attrEx':'','nodeType':'','attrName':'', 'desc':'disable', 'class':'TOptInfo')
) union ExtNodes;
End;
//Attributes
//Nodes
Height;
Rule;
Alignment;
CantSplit;
cnfStyle;
gridAfter;
gridBefore;
hidden;
tblHeader;
Del;
End;
///////////////////////////////////////////////////////////////
/// TwCnfStyle
///////////////////////////////////////////////////////////////
type TwCnfStyle=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:cnfStyle');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Val", "w:val", Val, ""),("FirstRow", "w:firstRow", FirstRow, "首行"),("LastRow", "w:lastRow", LastRow, "末行"),("FirstColumn", "w:firstColumn", FirstColumn, "首列"),("LastColumn", "w:lastColumn", LastColumn, "末列"),("OddVBand", "w:oddVBand", OddVBand, "奇条带列"),("EvenVBand", "w:evenVBand", EvenVBand, "偶条带列"),("OddHBand", "w:oddHBand", OddHBand, "奇条带行"),("EvenHBand", "w:evenHBand", EvenHBand, "偶条带行"),("FirstRowFirstColumn", "w:firstRowFirstColumn", FirstRowFirstColumn, "左上角单元格"),("FirstRowLastColumn", "w:firstRowLastColumn", FirstRowLastColumn, "右上角单元格"),("LastRowFirstColumn", "w:lastRowFirstColumn", LastRowFirstColumn, "左下角单元格"),("LastRowLastColumn", "w:lastRowLastColumn", LastRowLastColumn, "右下角单元格")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Val;
FirstRow;
LastRow;
FirstColumn;
LastColumn;
OddVBand;
EvenVBand;
OddHBand;
EvenHBand;
FirstRowFirstColumn;
FirstRowLastColumn;
LastRowFirstColumn;
LastRowLastColumn;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwShading
///////////////////////////////////////////////////////////////
type TwShading=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:shd');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Val", "w:val", Val, "指定用于将图案颜色覆盖在此段落底纹的背景色上的图案。此图案由应用于背景底纹颜色上的遮罩组成,以获得应显示图案颜色的位置。."),("Color", "w:color", Color, "前景颜色: RRGGBB format or auto"),("Fill", "w:fill", Fill, "背景颜色: RRGGBB format or auto"),("ThemeColor", "w:themeColor", ThemeColor, "前景主题颜色: theme color"),("ThemeFill", "w:themeFill", ThemeFill, "背景主题颜色: theme color"),("ThemeFillShade", "w:themeFillShade", ThemeFillShade, "阴影颜色: theme color"),("ThemeFillTint", "w:themeFillTint", ThemeFillTint, "tint 主题填充颜色."),("ThemeShade", "w:themeShade", ThemeShade, "主题阴影颜色."),("ThemeTint", "w:themeTint", ThemeTint, "tint主题阴影颜色.")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Val;
Color;
Fill;
ThemeColor;
ThemeFill;
ThemeFillShade;
ThemeFillTint;
ThemeShade;
ThemeTint;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TTblCellMar
///////////////////////////////////////////////////////////////
type TTblCellMar=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblCellMar');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Top','name':'w:top','obj':Top,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'表格单元格上边距,指定宽度属性的值.', 'class':'')
,('field':'TopType','name':'w:top','obj':TopType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'宽度属性的单位auto自动确定的宽度、dxa点的二十分之一宽度nil无宽度pct百分之五十宽度', 'class':'')
,('field':'Left','name':'w:left','obj':Left,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'表格单元格左边距,指定宽度属性的值.', 'class':'')
,('field':'LeftType','name':'w:left','obj':LeftType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'宽度属性的单位auto自动确定的宽度、dxa点的二十分之一宽度nil无宽度pct百分之五十宽度', 'class':'')
,('field':'Bottom','name':'w:bottom','obj':Bottom,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'表格单元格底边距,指定宽度属性的值..', 'class':'')
,('field':'BottomType','name':'w:bottom','obj':BottomType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'宽度属性的单位auto自动确定的宽度、dxa点的二十分之一宽度nil无宽度pct百分之五十宽度', 'class':'')
,('field':'Right','name':'w:right','obj':Right,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'表格单元格右边距,指定宽度属性的值..', 'class':'')
,('field':'RightType','name':'w:right','obj':RightType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'宽度属性的单位auto自动确定的宽度、dxa点的二十分之一宽度nil无宽度pct百分之五十宽度', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Top;
TopType;
Left;
LeftType;
Bottom;
BottomType;
Right;
RightType;
End;
///////////////////////////////////////////////////////////////
/// TTblPrEx
///////////////////////////////////////////////////////////////
type TTblPrEx=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblPrEx');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Borders := new TwTblBorders(self, 'w:tblBorders');
Shading := new TwShading(self, 'w:shd');
CellMar := new TTblCellMar(self, 'w:tblCellMar');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Borders.InitRootNode(node);
Shading.InitRootNode(node);
CellMar.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Alignment','name':'w:jc','obj':Alignment,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Borders','name':Borders.NodeName,'obj':Borders,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwTblBorders')
,('field':'Shading','name':Shading.NodeName,'obj':Shading,'attrEx':'','nodeType':'','attrName':'', 'desc':'表头底纹', 'class':'TwShading')
,('field':'CellMar','name':CellMar.NodeName,'obj':CellMar,'attrEx':'','nodeType':'','attrName':'', 'desc':'单元格边距设置', 'class':'TTblCellMar')
,('field':'CellSpacing','name':'w:tblCellSpacing','obj':CellSpacing,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'CellSpacingType','name':'w:tblCellSpacing','obj':CellSpacingType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Indent','name':'w:tblInd','obj':Indent,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'IndentType','name':'w:tblInd','obj':IndentType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Autofit','name':'w:tblLayout','obj':Autofit,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Val','name':'w:tblLook','obj':Val,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'NoVBand','name':'w:tblLook','obj':NoVBand,'attrEx':'w:noVBand','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'NoHBand','name':'w:tblLook','obj':NoHBand,'attrEx':'w:noHBand','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'LastRow','name':'w:tblLook','obj':LastRow,'attrEx':'w:lastRow','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'LastColumn','name':'w:tblLook','obj':LastColumn,'attrEx':'w:lastColumn','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'FirstRow','name':'w:tblLook','obj':FirstRow,'attrEx':'w:firstRow','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'FirstColumn','name':'w:tblLook','obj':FirstColumn,'attrEx':'w:firstColumn','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'Width','name':'w:tblW','obj':Width,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'WidthType','name':'w:tblW','obj':WidthType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
Alignment;
Borders;
Shading;
CellMar;
CellSpacing;
CellSpacingType;
Indent;
IndentType;
Autofit;
Val;
NoVBand;
NoHBand;
LastRow;
LastColumn;
FirstRow;
FirstColumn;
Width;
WidthType;
End;
///////////////////////////////////////////////////////////////
/// TwTr
///////////////////////////////////////////////////////////////
type TwTr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
tblPrEx := new TTblPrEx(self, 'w:tblPrEx');
TrPr := new TwTrPr(self, 'w:trPr');
Tc := array();
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
tblPrEx.InitRootNode(node);
TrPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'tblPrEx','name':tblPrEx.NodeName,'obj':tblPrEx,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TTblPrEx')
,('field':'TrPr','name':TrPr.NodeName,'obj':TrPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwTrPr')
,('field':'Tc','name':'w:tc','obj':Tc,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TwTc')
) union ExtNodes;
End;
//Attributes
//Nodes
tblPrEx;
TrPr;
Tc;
End;
///////////////////////////////////////////////////////////////
/// TwBorder
///////////////////////////////////////////////////////////////
type TwBorder=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:top');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Val", "w:val", Val, "指定边框样式."),("Color", "w:color", Color, "边框颜色."),("ThemeColor", "w:themeColor", ThemeColor, "边框主题颜色."),("ThemeTint", "w:themeTint", ThemeTint, "指定应用于此边框实例提供的主题颜色(如果有)的色调值."),("Size", "w:sz", Size, "边框宽度."),("Frame", "w:frame", Frame, "指定是否应修改指定的边框,以通过将边框外观从离文本最近的边缘反转到离文本最远的边缘来创建框架效果."),("Shadow", "w:shadow", Shadow, "边框阴影."),("Space", "w:space", Space, "放置此边框的间距偏移."),("ThemeShade", "w:themeShade", ThemeShade, "边框阴影的主题颜色."),("bar", "w:bar", bar, "边框属性")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Val;
Color;
ThemeColor;
ThemeTint;
Size;
Frame;
Shadow;
Space;
ThemeShade;
bar;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwTblBorders
///////////////////////////////////////////////////////////////
type TwTblBorders=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblBorders');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Top := new TwBorder(self, 'w:top');
Left := new TwBorder(self, 'w:left');
Bottom := new TwBorder(self, 'w:bottom');
Right := new TwBorder(self, 'w:right');
InsideH := new TwBorder(self, 'w:insideH');
InsideV := new TwBorder(self, 'w:insideV');
tr2bl := new TwBorder(self, 'w:tr2bl');
tl2br := new TwBorder(self, 'w:tl2br');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Top.InitRootNode(node);
Left.InitRootNode(node);
Bottom.InitRootNode(node);
Right.InitRootNode(node);
InsideH.InitRootNode(node);
InsideV.InitRootNode(node);
tr2bl.InitRootNode(node);
tl2br.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Top','name':Top.NodeName,'obj':Top,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'Left','name':Left.NodeName,'obj':Left,'attrEx':'','nodeType':'','attrName':'', 'desc':'左边框属性', 'class':'TwBorder')
,('field':'Bottom','name':Bottom.NodeName,'obj':Bottom,'attrEx':'','nodeType':'','attrName':'', 'desc':'底边框属性', 'class':'TwBorder')
,('field':'Right','name':Right.NodeName,'obj':Right,'attrEx':'','nodeType':'','attrName':'', 'desc':'右边框属性', 'class':'TwBorder')
,('field':'InsideH','name':InsideH.NodeName,'obj':InsideH,'attrEx':'','nodeType':'','attrName':'', 'desc':'水平边框属性', 'class':'TwBorder')
,('field':'InsideV','name':InsideV.NodeName,'obj':InsideV,'attrEx':'','nodeType':'','attrName':'', 'desc':'垂直边框属性', 'class':'TwBorder')
,('field':'tr2bl','name':tr2bl.NodeName,'obj':tr2bl,'attrEx':'','nodeType':'','attrName':'', 'desc':'右上对角线属性', 'class':'TwBorder')
,('field':'tl2br','name':tl2br.NodeName,'obj':tl2br,'attrEx':'','nodeType':'','attrName':'', 'desc':'左下对角线属性', 'class':'TwBorder')
) union ExtNodes;
End;
//Attributes
//Nodes
Top;
Left;
Bottom;
Right;
InsideH;
InsideV;
tr2bl;
tl2br;
End;
///////////////////////////////////////////////////////////////
/// TwTblpPr
///////////////////////////////////////////////////////////////
type TwTblpPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblpPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("bottomFromText", "w:bottomFromText ", bottomFromText, "指定当前浮动表与该浮动表下方段落中文本顶部之间应保持的最小距离。"),("horizAnchor", "w:horizAnchor", horizAnchor, "指定水平定位的基础对象。"),("leftFromText", "w:leftFromText", leftFromText, "指定当前浮动表与该浮动表左侧段落中文本边缘之间应保持的最小距离。"),("rightFromText", "w:rightFromText", rightFromText, "指定当前浮动表与该浮动表右侧段落中文本边缘之间应保持的最小距离。"),("tblpX", "w:tblpX", tblpX, "指定浮动表的绝对水平位置。此绝对位置是相对于horzAnchor属性为此浮动表指定的水平定位点指定的。"),("tblpXSpec", "w:tblpXSpec", tblpXSpec, "指定浮动表的相对水平位置。此相对位置是相对于此浮动表的horizAnchor属性指定的水平定位点指定的。"),("tblpY", "w:tblpY", tblpY, "指定浮动表的绝对垂直位置。此绝对位置是相对于此浮动表的vertAnchor属性指定的垂直锚点指定的。"),("tblpYSpec", "w:tblpYSpec", tblpYSpec, "指定浮动表的相对垂直位置。此相对位置是相对于此浮动表的vertAnchor属性指定的垂直锚点指定的。"),("topFromText", "w:topFromText", topFromText, "指定当前浮动表与该浮动表上方段落中文本底部边缘之间应保持的最小距离。"),("vertAnchor", "w:vertAnchor", vertAnchor, "指定应根据其计算tblpY属性中的垂直定位的基础对象。")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
bottomFromText;
horizAnchor;
leftFromText;
rightFromText;
tblpX;
tblpXSpec;
tblpY;
tblpYSpec;
topFromText;
vertAnchor;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwTblPr
///////////////////////////////////////////////////////////////
type TwTblPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Shading := new TwShading(self, 'w:shd');
Borders := new TwTblBorders(self, 'w:tblBorders');
CellMar := new TTblCellMar(self, 'w:tblCellMar');
tblpPr := new TwTblpPr(self, 'w:tblpPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
Shading.InitRootNode(node);
Borders.InitRootNode(node);
CellMar.InitRootNode(node);
tblpPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'StyleID','name':'w:tblStyle','obj':StyleID,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'样式ID', 'class':'')
,('field':'Width','name':'w:tblW','obj':Width,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'表格宽度', 'class':'')
,('field':'WidthType','name':'w:tblW','obj':WidthType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'宽度属性的单位。如"auto"表示根据内容调整,此时需要设置"width=0"; "pct"是按比例设置转换比例是50, 10%时候需要width为500; "dxa"表示自定义宽度此时width单位是twips即1cm=567twips', 'class':'')
,('field':'Val','name':'w:tblLook','obj':Val,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'表格条件格式样式:表格样式最多可以指定六种不同的可选条件格式,如首行、尾行、首列、尾列等16进制short', 'class':'')
,('field':'NoVBand','name':'w:tblLook','obj':NoVBand,'attrEx':'w:noVBand','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'NoHBand','name':'w:tblLook','obj':NoHBand,'attrEx':'w:noHBand','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'LastRow','name':'w:tblLook','obj':LastRow,'attrEx':'w:lastRow','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'LastColumn','name':'w:tblLook','obj':LastColumn,'attrEx':'w:lastColumn','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'FirstRow','name':'w:tblLook','obj':FirstRow,'attrEx':'w:firstRow','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'FirstColumn','name':'w:tblLook','obj':FirstColumn,'attrEx':'w:firstColumn','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'Shading','name':Shading.NodeName,'obj':Shading,'attrEx':'','nodeType':'','attrName':'', 'desc':'表头底纹', 'class':'TwShading')
,('field':'bidiVisual','name':'w:bidiVisual','obj':bidiVisual,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'从右到左可视化表格', 'class':'')
,('field':'Alignment','name':'w:jc','obj':Alignment,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'当前文本边距的对齐方式left、right、center', 'class':'')
,('field':'Indent','name':'w:tblInd','obj':Indent,'attrEx':'w:w','nodeType':'','attrName':'', 'desc':'文档中当前表格前缘之前的缩进(从左到右表格中的左边缘,从右到左表格中的右边缘)。', 'class':'')
,('field':'IndentType','name':'w:tblInd','obj':IndentType,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'约定Indent值的的单位如果忽略此属性则其值应假定为dxa二十分之一点。', 'class':'')
,('field':'Borders','name':Borders.NodeName,'obj':Borders,'attrEx':'','nodeType':'','attrName':'', 'desc':'表格边框属性', 'class':'TwTblBorders')
,('field':'Autofit','name':'w:tblLayout','obj':Autofit,'attrEx':'w:type','nodeType':'','attrName':'', 'desc':'布局该表内容的算法。当表格显示在文档中时,可以使用固定宽度或自动调整(取值"autofit")布局算法来显示表格。如果省略了该元素,则该元素的值应假定为自动。', 'class':'')
,('field':'CellMar','name':CellMar.NodeName,'obj':CellMar,'attrEx':'','nodeType':'','attrName':'', 'desc':'单元格边距设置', 'class':'TTblCellMar')
,('field':'Overlap','name':'w:tblOverlap ','obj':Overlap,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'当前表是否允许其他浮动表重叠其范围。如果指定,则不应进行任何调整,以防止其属性通常会导致其重叠的表格在显示时重叠。如果关闭,则应根据需要调整表格,以防止它们在显示时重叠,方法是根据需要调整浮动表格属性。', 'class':'')
,('field':'tblpPr','name':tblpPr.NodeName,'obj':tblpPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'浮动表设置', 'class':'TwTblpPr')
) union ExtNodes;
End;
//Attributes
//Nodes
StyleID;
Width;
WidthType;
Val;
NoVBand;
NoHBand;
LastRow;
LastColumn;
FirstRow;
FirstColumn;
Shading;
bidiVisual;
Alignment;
Indent;
IndentType;
Borders;
Autofit;
CellMar;
Overlap;
tblpPr;
End;
///////////////////////////////////////////////////////////////
/// TwGridCol
///////////////////////////////////////////////////////////////
type TwGridCol=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:gridCol');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("W", "w:w", W, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
W;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TwTblGrid
///////////////////////////////////////////////////////////////
type TwTblGrid=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblGrid');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
GridCol := array();
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'GridCol','name':'w:gridCol','obj':GridCol,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TwGridCol')
) union ExtNodes;
End;
//Attributes
//Nodes
GridCol;
End;
///////////////////////////////////////////////////////////////
/// TTableImpl
///////////////////////////////////////////////////////////////
type TTableImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tbl');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
TblPr := new TwTblPr(self, 'w:tblPr');
TblGrid := new TwTblGrid(self, 'w:tblGrid');
TR := array();
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
TblPr.InitRootNode(node);
TblGrid.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'TblPr','name':TblPr.NodeName,'obj':TblPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwTblPr')
,('field':'TblGrid','name':TblGrid.NodeName,'obj':TblGrid,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwTblGrid')
,('field':'TR','name':'w:tr','obj':TR,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TwTr')
) union ExtNodes;
End;
//Attributes
//Nodes
TblPr;
TblGrid;
TR;
End;
///////////////////////////////////////////////////////////////
/// TCorePropertiesImpl
///////////////////////////////////////////////////////////////
type TCorePropertiesImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:p');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TPictureImpl
///////////////////////////////////////////////////////////////
type TPictureImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:p');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
pPr := new TwpPr(self, 'w:pPr');
Run := new TRunImpl(self, 'w:r');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
pPr.InitRootNode(node);
Run.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'pPr','name':pPr.NodeName,'obj':pPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TwpPr')
,('field':'Run','name':Run.NodeName,'obj':Run,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TRunImpl')
) union ExtNodes;
End;
//Attributes
//Nodes
pPr;
Run;
End;
///////////////////////////////////////////////////////////////
/// TpBdr
///////////////////////////////////////////////////////////////
type TpBdr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:pBdr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
top := new TwBorder(self, 'w:top');
left := new TwBorder(self, 'w:left');
bottom := new TwBorder(self, 'w:bottom');
right := new TwBorder(self, 'w:right');
Between := new TwBorder(self, 'w:between');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
top.InitRootNode(node);
left.InitRootNode(node);
bottom.InitRootNode(node);
right.InitRootNode(node);
Between.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'top','name':top.NodeName,'obj':top,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'left','name':left.NodeName,'obj':left,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'bottom','name':bottom.NodeName,'obj':bottom,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'right','name':right.NodeName,'obj':right,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
,('field':'Between','name':Between.NodeName,'obj':Between,'attrEx':'','nodeType':'','attrName':'', 'desc':'边框属性', 'class':'TwBorder')
) union ExtNodes;
End;
//Attributes
//Nodes
top;
left;
bottom;
right;
Between;
End;
///////////////////////////////////////////////////////////////
/// TLatentStyle
///////////////////////////////////////////////////////////////
type TLatentStyle=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:lsdException');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Name", "w:name", Name, ""),("Count", "w:count", Count, ""),("defLockedState", "w:defLockedState", defLockedState, ""),("defQFormat", "w:defQFormat", defQFormat, ""),("defSemiHidden", "w:defSemiHidden", defSemiHidden, ""),("defUIPriority", "w:defUIPriority", defUIPriority, ""),("defUnhideWhenUsed", "w:defUnhideWhenUsed", defUnhideWhenUsed, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Name;
Count;
defLockedState;
defQFormat;
defSemiHidden;
defUIPriority;
defUnhideWhenUsed;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TtblStylePr
///////////////////////////////////////////////////////////////
type TtblStylePr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tblStylePr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
pPr := new TwpPr(self, 'w:pPr');
rPr := new TwrPr(self, 'w:rPr');
TrPr := new TwTrPr(self, 'w:trPr');
TblPr := new TwTblPr(self, 'w:tblPr');
TcPr := new TwTcPr(self, 'w:tcPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
pPr.InitRootNode(node);
rPr.InitRootNode(node);
TrPr.InitRootNode(node);
TblPr.InitRootNode(node);
TcPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'pPr','name':pPr.NodeName,'obj':pPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'段落格式', 'class':'TwpPr')
,('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'字体属性', 'class':'TwrPr')
,('field':'TrPr','name':TrPr.NodeName,'obj':TrPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'表格行属性', 'class':'TwTrPr')
,('field':'TblPr','name':TblPr.NodeName,'obj':TblPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'表格样式', 'class':'TwTblPr')
,('field':'TcPr','name':TcPr.NodeName,'obj':TcPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'单元格属性', 'class':'TwTcPr')
) union ExtNodes;
End;
//Attributes
//Nodes
pPr;
rPr;
TrPr;
TblPr;
TcPr;
End;
///////////////////////////////////////////////////////////////
/// TDocxStyleImpl
///////////////////////////////////////////////////////////////
type TDocxStyleImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:style');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
TblStyle := new TtblStylePr(self, 'w:tblStylePr');
pPr := new TwpPr(self, 'w:pPr');
rPr := new TwrPr(self, 'w:rPr');
TrPr := new TwTrPr(self, 'w:trPr');
TblPr := new TwTblPr(self, 'w:tblPr');
TcPr := new TwTcPr(self, 'w:tcPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
TblStyle.InitRootNode(node);
pPr.InitRootNode(node);
rPr.InitRootNode(node);
TrPr.InitRootNode(node);
TblPr.InitRootNode(node);
TcPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("StyleID", "w:styleId", StyleID, "样式ID数字或字符串。"),("Default", "w:default", Default, "是否缺省样式,如缺省段落、缺省表格样式"),("wType", "w:type", wType, "样式类型paragraph、chartacter、table"),("CustomStyle ", "w:customStyle ", CustomStyle , "disable")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Name','name':'w:name','obj':Name,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'样式名称', 'class':'')
,('field':'Aliases','name':'w:aliases','obj':Aliases,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'样式别名.', 'class':'')
,('field':'AutoRedefine','name':'w:autoRedefine','obj':AutoRedefine,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'文本变动时,是否自动修改样式.', 'class':'')
,('field':'BasedOn','name':'w:basedOn','obj':BasedOn,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'样式继承.', 'class':'')
,('field':'Hidden','name':'w:hidden','obj':Hidden,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'隐藏样式', 'class':'')
,('field':'Link','name':'w:link','obj':Link,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'链接样式', 'class':'')
,('field':'Locked','name':'w:locked','obj':Locked,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'是否阻止使用此样式.', 'class':'')
,('field':'Next','name':'w:b','obj':Next,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'下一段落样式', 'class':'')
,('field':'Personal','name':'w:personal','obj':Personal,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'指定在电子邮件上下文中使用父样式时,默认情况下使用父样式来格式化来自一个或多个用户的所有邮件文本', 'class':'')
,('field':'PersonalCompose','name':'w:personalCompose','obj':PersonalCompose,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'指定在电子邮件上下文中使用父样式时,默认情况下可以使用父样式来格式化电子邮件中的新邮件文本', 'class':'')
,('field':'PersonalReply','name':'w:personalReply','obj':PersonalReply,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'生成新答复时,默认情况下可以使用父样式来格式化电子邮件中的现有邮件文本', 'class':'')
,('field':'QFormat','name':'w:qFormat','obj':QFormat,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'是否将此样式视为主要样式', 'class':'')
,('field':'TblStyle','name':TblStyle.NodeName,'obj':TblStyle,'attrEx':'','nodeType':'','attrName':'', 'desc':'表格样式', 'class':'TtblStylePr')
,('field':'pPr','name':pPr.NodeName,'obj':pPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'段落格式', 'class':'TwpPr')
,('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'字体属性', 'class':'TwrPr')
,('field':'TrPr','name':TrPr.NodeName,'obj':TrPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'表格行属性', 'class':'TwTrPr')
,('field':'TblPr','name':TblPr.NodeName,'obj':TblPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'表格样式', 'class':'TwTblPr')
,('field':'TcPr','name':TcPr.NodeName,'obj':TcPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'单元格样式', 'class':'TwTcPr')
,('field':'Rsid','name':'w:rsid','obj':Rsid,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'SemiHidden','name':'w:semiHidden','obj':SemiHidden,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'是否在主用户界面中隐藏此样式.', 'class':'')
,('field':'UiPriority','name':'w:uiPriority','obj':UiPriority,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'使用该优先级以升序对所有可用样式进行排序.', 'class':'')
,('field':'UnhideWhenUsed','name':'w:unhideWhenUsed','obj':UnhideWhenUsed,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'当文档内容使用此样式时,是否应删除半隐藏属性.', 'class':'')
) union ExtNodes;
End;
//Attributes
StyleID;
Default;
wType;
CustomStyle ;
//Nodes
Name;
Aliases;
AutoRedefine;
BasedOn;
Hidden;
Link;
Locked;
Next;
Personal;
PersonalCompose;
PersonalReply;
QFormat;
TblStyle;
pPr;
rPr;
TrPr;
TblPr;
TcPr;
Rsid;
SemiHidden;
UiPriority;
UnhideWhenUsed;
End;
///////////////////////////////////////////////////////////////
/// TDocPartObj
///////////////////////////////////////////////////////////////
type TDocPartObj=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:docPartObj');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'docPartGallery','name':'w:docPartGallery','obj':docPartGallery,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'docPartUnique','name':'w:docPartUnique','obj':docPartUnique,'attrEx':'','nodeType':'empty','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
//Nodes
docPartGallery;
docPartUnique;
End;
///////////////////////////////////////////////////////////////
/// TSdtPr
///////////////////////////////////////////////////////////////
type TSdtPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:sdtPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
rPr := new TwrPr(self, 'w:rPr');
docPartObj := new TDocPartObj(self, 'w:docPartObj');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
rPr.InitRootNode(node);
docPartObj.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'字体属性', 'class':'TwrPr')
,('field':'ID','name':'w:id','obj':ID,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'docPartObj','name':docPartObj.NodeName,'obj':docPartObj,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TDocPartObj')
) union ExtNodes;
End;
//Attributes
//Nodes
rPr;
ID;
docPartObj;
End;
///////////////////////////////////////////////////////////////
/// TSdtEndPr
///////////////////////////////////////////////////////////////
type TSdtEndPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:sdtEndPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
rPr := new TwrPr(self, 'w:rPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
rPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'字体属性', 'class':'TwrPr')
) union ExtNodes;
End;
//Attributes
//Nodes
rPr;
End;
///////////////////////////////////////////////////////////////
/// TSdtContent
///////////////////////////////////////////////////////////////
type TSdtContent=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:sdtContent');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TTableContentImpl
///////////////////////////////////////////////////////////////
type TTableContentImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:sdt');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
sdtPr := new TSdtPr(self, 'w:sdtPr');
sdtEndPr := new TSdtEndPr(self, 'w:sdtEndPr');
sdtContent := new TSdtContent(self, 'w:sdtContent');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
sdtPr.InitRootNode(node);
sdtEndPr.InitRootNode(node);
sdtContent.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'sdtPr','name':sdtPr.NodeName,'obj':sdtPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSdtPr')
,('field':'sdtEndPr','name':sdtEndPr.NodeName,'obj':sdtEndPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSdtEndPr')
,('field':'sdtContent','name':sdtContent.NodeName,'obj':sdtContent,'attrEx':'','nodeType':'','attrName':'', 'desc':'', 'class':'TSdtContent')
) union ExtNodes;
End;
//Attributes
//Nodes
sdtPr;
sdtEndPr;
sdtContent;
End;
///////////////////////////////////////////////////////////////
/// TTabStopsImpl
///////////////////////////////////////////////////////////////
type TTabStopsImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tabs');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Tabs := array();
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'Tabs','name':'w:tab','obj':Tabs,'attrEx':'','nodeType':'','attrName':'','arrObj':'array', 'desc':'', 'class':'TTabStop')
) union ExtNodes;
End;
//Attributes
//Nodes
Tabs;
End;
///////////////////////////////////////////////////////////////
/// TTabStop
///////////////////////////////////////////////////////////////
type TTabStop=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:tab');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Val", "w:val", Val, "Specifies the type of custom tab stop, which determines the behavior of the tab stop and the alignment which shall be applied to text entered at the current custom tab stop."),("leader", "w:leader", leader, "Specifies the character which shall be used to fill in the space created by a tab which ends at this custom tab stop. This character shall be repeated as required to completely fill the tab spacing generated by the tab character."),("Position", "w:pos", Position, "Specifies the position of the current custom tab stop with respect to the current page margins. ")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Val;
leader;
Position;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TNumber
///////////////////////////////////////////////////////////////
type TNumber=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:num');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("numId", "w:numId", numId, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'abstractNumId','name':'w:abstractNumId','obj':abstractNumId,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
numId;
//Nodes
abstractNumId;
End;
///////////////////////////////////////////////////////////////
/// TLevel
///////////////////////////////////////////////////////////////
type TLevel=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:lvl');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
pPr := new TwpPr(self, 'w:pPr');
rPr := new TwrPr(self, 'w:rPr');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
pPr.InitRootNode(node);
rPr.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("ilvl", "w:ilvl", ilvl, "内容是否包含小数。"),("tentative", "w:tentative", tentative, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'start','name':'w:start','obj':start,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'给定编号级别定义中父编号级别使用的编号的起始值。', 'class':'')
,('field':'numFmt','name':'w:numFmt','obj':numFmt,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'编号类型(单极、多级、项目编号等)。', 'class':'')
,('field':'lvlText','name':'w:lvlText','obj':lvlText,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'编号文本内容格式,如(%1.%2.%3.%4。', 'class':'')
,('field':'lvlJc','name':'w:lvlJc','obj':lvlJc,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'', 'class':'')
,('field':'pPr','name':pPr.NodeName,'obj':pPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'段落格式', 'class':'TwpPr')
,('field':'rPr','name':rPr.NodeName,'obj':rPr,'attrEx':'','nodeType':'','attrName':'', 'desc':'字体属性', 'class':'TwrPr')
) union ExtNodes;
End;
//Attributes
ilvl;
tentative;
//Nodes
start;
numFmt;
lvlText;
lvlJc;
pPr;
rPr;
End;
///////////////////////////////////////////////////////////////
/// TNumStyleImpl
///////////////////////////////////////////////////////////////
type TNumStyleImpl=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'w:abstractNum');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
lvl := new TLevel(self, 'w:lvl');
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
lvl.InitRootNode(node);
End;
Function GetAttrs(); override;
Begin
return array(("abstractNumId", "w:abstractNumId", abstractNumId, "latentStyles编号ID(编号段落的外观和行为)")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'nsid','name':'w:nsid','obj':nsid,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'disable', 'class':'')
,('field':'multiLevelType','name':'w:multiLevelType','obj':multiLevelType,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'编号类型', 'class':'')
,('field':'tmpl','name':'w:tmpl','obj':tmpl,'attrEx':'w:val','nodeType':'','attrName':'', 'desc':'该元素指定了一个唯一的十六进制代码,该代码可用于确定应用程序用户界面中显示该抽象编号定义的位置。', 'class':'')
,('field':'lvl','name':lvl.NodeName,'obj':lvl,'attrEx':'','nodeType':'','attrName':'', 'desc':'编号级别的外观和行为', 'class':'TLevel')
) union ExtNodes;
End;
//Attributes
abstractNumId;
//Nodes
nsid;
multiLevelType;
tmpl;
lvl;
End;
///////////////////////////////////////////////////////////////
/// TExcelTable
///////////////////////////////////////////////////////////////
type TExcelTable=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'table');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Xmlns", "xmlns", Xmlns, ""),("Mc", "xmlns:mc", Mc, ""),("Ignorable", "mc:Ignorable", Ignorable, ""),("Xr", "xmlns:xr", Xr, ""),("Xr3", "xmlns:xr3", Xr3, ""),("Id", "id", Id, ""),("Name", "name", Name, ""),("DisplayName", "displayName", DisplayName, ""),("Ref", "ref", Ref, ""),("HeaderRowCount", "HeaderRowCount", HeaderRowCount, ""),("TotalsRowShown", "totalsRowShown", TotalsRowShown, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return array(('field':'AutoFilter','name':'autoFilter','obj':AutoFilter,'attrEx':'ref','nodeType':'','attrName':'', 'desc':'', 'class':'')
) union ExtNodes;
End;
//Attributes
Xmlns;
Mc;
Ignorable;
Xr;
Xr3;
Id;
Name;
DisplayName;
Ref;
HeaderRowCount;
TotalsRowShown;
//Nodes
AutoFilter;
End;
///////////////////////////////////////////////////////////////
/// TTableStyle
///////////////////////////////////////////////////////////////
type TTableStyle=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'tableStyleInfo');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Name", "tableName", Name, ""),("TableStyle", "name", TableStyle, ""),("ShowFirstColumn", "showFirstColumn", ShowFirstColumn, ""),("ShowLastColumn", "showLastColumn", ShowLastColumn, ""),("ShowRowStripes", "showRowStripes", ShowRowStripes, ""),("ShowColumnStripes", "showColumnStripes", ShowColumnStripes, ""),("HeaderRowCount", "HeaderRowCount", HeaderRowCount, ""),("TotalsRowShown", "totalsRowShown", TotalsRowShown, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
Property TableName read Name write writeName;
Function writeName(n);
Begin
Name := class(TSXml).CurCodePageToUtf8(n);
End;
//Attributes
Name;
TableStyle;
ShowFirstColumn;
ShowLastColumn;
ShowRowStripes;
ShowColumnStripes;
HeaderRowCount;
TotalsRowShown;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TBreak
///////////////////////////////////////////////////////////////
type TBreak=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'brk');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
Max := 16383;
Man := 1;
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Id", "id", Id, ""),("Max", "max", Max, ""),("Man", "man", Man, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Id;
Max;
Man;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TProtect
///////////////////////////////////////////////////////////////
type TProtect=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'sheetProtection');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Function GetAttrs(); override;
Begin
return array(("Password", "password", Password, ""),("AlgorithmName", "algorithmName", AlgorithmName, ""),("HashValue", "hashValue", HashValue, ""),("SaltValue", "saltValue", SaltValue, ""),("SpinCount", "spinCount", SpinCount, ""),("Sheet", "sheet", Sheet, ""),("EditObjects", "objects", EditObjects, ""),("EditScenarios", "scenarios", EditScenarios, ""),("FormatCells", "formatCells", FormatCells, ""),("FormatColumns", "formatColumns", FormatColumns, ""),("FormatRows", "formatRows", FormatRows, ""),("InsertColumns", "insertColumns", InsertColumns, ""),("InsertRows", "insertRows", InsertRows, ""),("InsertHyperlinks", "insertHyperlinks", InsertHyperlinks, ""),("DeleteColumns", "deleteColumns", DeleteColumns, ""),("DeleteRows", "deleteRows", DeleteRows, ""),("SelectLockedCells", "selectLockedCells", SelectLockedCells, ""),("Sort", "sort", Sort, ""),("AutoFilter", "autoFilter", AutoFilter, ""),("PivotTables", "pivotTables", PivotTables, ""),("SelectUnLockedCells", "selectUnlockedCells", SelectUnLockedCells, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
Password;
AlgorithmName;
HashValue;
SaltValue;
SpinCount;
Sheet;
EditObjects;
EditScenarios;
FormatCells;
FormatColumns;
FormatRows;
InsertColumns;
InsertRows;
InsertHyperlinks;
DeleteColumns;
DeleteRows;
SelectLockedCells;
Sort;
AutoFilter;
PivotTables;
SelectUnLockedCells;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TCalcPr
///////////////////////////////////////////////////////////////
type TCalcPr=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'calcPr');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property CalCId read readXMLCalCId write writeXMLCalCId;
Function readXMLCalCId();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('CalCId'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCalCId);
End;
Function writeXMLCalCId(str);
Begin
XMLCalCId := class(TSXml).CurCodePageToUtf8(str);
End;
Property CalcMode read readXMLCalcMode write writeXMLCalcMode;
Function readXMLCalcMode();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('CalcMode'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCalcMode);
End;
Function writeXMLCalcMode(str);
Begin
XMLCalcMode := class(TSXml).CurCodePageToUtf8(str);
End;
Property RefMode read readXMLRefMode write writeXMLRefMode;
Function readXMLRefMode();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('RefMode'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLRefMode);
End;
Function writeXMLRefMode(str);
Begin
XMLRefMode := class(TSXml).CurCodePageToUtf8(str);
End;
Property Iterate read readXMLIterate write writeXMLIterate;
Function readXMLIterate();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Iterate'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLIterate);
End;
Function writeXMLIterate(str);
Begin
XMLIterate := class(TSXml).CurCodePageToUtf8(str);
End;
Property IterateCount read readXMLIterateCount write writeXMLIterateCount;
Function readXMLIterateCount();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('IterateCount'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLIterateCount);
End;
Function writeXMLIterateCount(str);
Begin
XMLIterateCount := class(TSXml).CurCodePageToUtf8(str);
End;
Property IterateDelta read readXMLIterateDelta write writeXMLIterateDelta;
Function readXMLIterateDelta();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('IterateDelta'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLIterateDelta);
End;
Function writeXMLIterateDelta(str);
Begin
XMLIterateDelta := class(TSXml).CurCodePageToUtf8(str);
End;
Property CalcOnSave read readXMLCalcOnSave write writeXMLCalcOnSave;
Function readXMLCalcOnSave();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('CalcOnSave'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLCalcOnSave);
End;
Function writeXMLCalcOnSave(str);
Begin
XMLCalcOnSave := class(TSXml).CurCodePageToUtf8(str);
End;
Property FullPrecision read readXMLFullPrecision write writeXMLFullPrecision;
Function readXMLFullPrecision();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('FullPrecision'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLFullPrecision);
End;
Function writeXMLFullPrecision(str);
Begin
XMLFullPrecision := class(TSXml).CurCodePageToUtf8(str);
End;
Property ConCurrentCalc read readXMLConCurrentCalc write writeXMLConCurrentCalc;
Function readXMLConCurrentCalc();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ConCurrentCalc'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLConCurrentCalc);
End;
Function writeXMLConCurrentCalc(str);
Begin
XMLConCurrentCalc := class(TSXml).CurCodePageToUtf8(str);
End;
Property ConCurrentManualCount read readXMLConCurrentManualCount write writeXMLConCurrentManualCount;
Function readXMLConCurrentManualCount();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ConCurrentManualCount'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLConCurrentManualCount);
End;
Function writeXMLConCurrentManualCount(str);
Begin
XMLConCurrentManualCount := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
return array(("CalCId", "calcId", XMLCalCId, ""),("CalcMode", "calcMode", XMLCalcMode, ""),("RefMode", "refMode", XMLRefMode, ""),("Iterate", "iterate", XMLIterate, ""),("IterateCount", "iterateCount", XMLIterateCount, ""),("IterateDelta", "iterateDelta", XMLIterateDelta, ""),("CalcOnSave", "calcOnSave", XMLCalcOnSave, ""),("FullPrecision", "fullPrecision", XMLFullPrecision, ""),("ConCurrentCalc", "conCurrentCalc", XMLConCurrentCalc, ""),("ConCurrentManualCount", "conCurrentManualCount", XMLConCurrentManualCount, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
return ExtNodes;
End;
//Attributes
XMLCalCId;
XMLCalcMode;
XMLRefMode;
XMLIterate;
XMLIterateCount;
XMLIterateDelta;
XMLCalcOnSave;
XMLFullPrecision;
XMLConCurrentCalc;
XMLConCurrentManualCount;
//Nodes
End;
///////////////////////////////////////////////////////////////////////////////////////////
///DOCX文档实现
Type TRange = Class
Function Create();overload;
Begin
Create(nil);
End;
Function Create(t);overload;
Begin
//array(("pNode":nodeObj, "pIndex":p, "rNode":nodeObj, "rIndex":r))
Init(t);
End;
Function Init(t);
Begin
RunArr_ := t;
End;
///清除全部选中内容
Function Clear();
Begin
_clear(0);//清除全部w:r
End;
Property Font read readFont;
Function readFont();
Begin
if ifNil(rPr_) then
rPr_ := new TwrPr();
return rPr_;
End;
Property Text read readText write writeText;
Function readText();
Begin
return _text(RunArr_);
End;
Function writeText(txt);
Begin
r := RunArr_[0:0,:];
_clear(1);//只保留第1段
run := new TRun(r[0]['rNode']);
run.SetText(txt);
return r;
End;
///应用字体样式
Function Apply();
Begin
if not ifObj(rPr_) then return;
arr := rPr_.Marshal();
if length(arr['attributes']) or length(arr['children']) then Begin
for i:=0 to length(RunArr_)-1 do Begin
rPr := class(TSXml).GetNode(RunArr_[i]['rNode'], 'w:rPr', 'first');
class(TSXml).UpdateNode(rPr, arr['attributes'], arr['children']);
End;
End;
End;
Function _clear(first);
Begin
for i:=first to length(RunArr_)-1 do Begin
pNode := RunArr_[i]['pNode'];
pNode.DeleteChild(RunArr_[i]['rNode']);
rNode := pNode.FirstChildElement('w:r');
if not ifObj(rNode) then
pNode.Parent().DeleteChild(pNode);
End;
End;
rPr_;//字体格式
RunArr_;
End;
Type DocObject = Class
Function Create();
Begin
pageNo_ := 0;
linePos_ := 0.;
End;
Function Name();
Begin
return name_;
End;
///修改属性,包括样式、边框、底纹、字体等
Function Apply();virtual;
Begin
End;
///前一个对象
Function Prev();virtual;
Begin
return _next_prev_Impl(node_.PrevElement(name_));
End;
///下一个对象
Function Next();virtual;
Begin
return _next_prev_Impl(node_.NextElement(name_));
End;
///添加批注
///objTDocComment对象
///返回:成功 true
Function AddComment(obj);
Begin
id := obj.ID;
r := _split_range(obj.sPos, obj.SelectLength);
cnt := length(r);
if cnt then Begin
rNode := r[0]['rNode'];
beg := rNode.Parent().InsertBeforeChild(rNode, 'element', 'w:commentRangeStart');
beg.SetAttribute('w:id', id);
rNode := r[cnt-1]['rNode'];
eNode := rNode.Parent().InsertAfterChild(rNode, 'element', 'w:commentRangeEnd');
eNode.SetAttribute('w:id', id);
r := rNode.Parent().InsertAfterChild(eNode, 'element', 'w:r');
cr := r.InsertFirstChild('element', 'w:commentReference');
cr.SetAttribute('w:id', id);
return true;
End;
return false;
End;
///修订插入
///objTRevision对象
///返回:成功 true
Function AddRevision(obj);
Begin
obj.NodeName := 'w:ins';
obj.name_ := obj.NodeName;
r := _split_range(obj.sPos, 0);
if length(r) then Begin
rNode := r[length(r)-1]['rNode'];
node := rNode.Parent().InsertAfterChild(rNode, obj.Marshal());
End
else Begin
pPr := node_.FirstChildElement('w:pPr');
if ifObj(pPr) then
node := node_.InsertAfterChild(pPr, obj.Marshal());
else
node := node_.InsertFirstChild(obj.Marshal());
rNode := node.NextElement('w:r');
End;
if ifObj(rNode) then Begin
data := rNode.Marshal();
node2 := node.InsertFirstChild(data[0]);
End
else Begin
node2 := node.InsertEndChild('element', 'w:r');
End;
run := new TRun(node2);
run.SetText(obj.InsText_, true);
obj.Init(node);
return true;
End;
///修订删除
///objTRevision对象
///返回:成功 true失败 false
Function DelRevision(obj);
Begin
r := _split_range(obj.sPos, obj.SelectLength);
for i:=0 to length(r)-1 do Begin
rNode := r[i]['rNode'];
delNode := rNode.Parent().InsertAfterChild(rNode, obj.Marshal());
rXml := string(rNode.Data());
rXml := ReplaceStr(rXml, '<w:t>', '<w:delText>');
delNode.InsertFirstChild(rXml);
rNode.Parent().DeleteChild(rNode);
End;
return length(r);
End;
Function _next_prev_Impl(n);
Begin
if ifObj(n) then Begin
case name_ of
'w:p':
p := new TParagraph(p);
'w:tbl':
p := new TTable(n);
'w:r':
p := new TRun(n);
'w:del','w:ins':
p := new TRevision(n);
End;
if ifObj(p) then Begin
p.name_ := name;
p.node_ := n;
End;
End;
return p;
End;
///文本内容
Function Text();virtual;
Begin
r := TextArray();
return _text(r);
End;
//所有文字信息(包括位置信息)
//返回table(包括w:r节点)
Function TextArray();virtual;
Begin
r := array();
node := node_.FirstChildElement('w:r');
while ifObj(node) do Begin
r[ind]['pNode'] := node_;
r[ind]['pIndex'] := -1;
r[ind]['rNode'] := node;
r[ind]['rIndex'] := ind;
ind++;
node := node.NextElement('w:r');
End;
return r;
End;
///段落中插入文字
Function AddText(sPos, txt);
Begin
if sPos < 0 then Begin //段落后追加
lastNode := node_.LastChild('w:r');
if ifObj(lastNode) then Begin
rNode := _duplicate_r(lastNode);
End
else Begin
rNode := node_.InsertEndChild('element','w:r');
p := new TParagraph(node_);
p.CopyRunFormat(false, rNode);
End;
run := new TRun(rNode);
run.SetText(txt);
t := array(('pNode':node_, 'pIndex':-1, 'rNode':rNode, 'rIndex':-1));
return new TRange(t);
End;
obj := new TRevision();
obj.sPos := sPos;
obj.InsText := txt;
AddRevision(obj);//插入文字
t := obj.Accept();
return new TRange(t);
End;
///返回TRange对象,TBody、TParagraph、TCell全部内容
Function Range();overload;
Begin
t := TextArray();
if not istable(t) then
return nil;
return new TRange(t);
End;
///sPos起始位置
///rangeLength内容长度
///返回TRange对象此函数非只读执行此函数会重新调整段落中TRun结构
Function Range(sPos, rangeLength);overload;
Begin
t := _split_range(sPos, rangeLength);
if not istable(t) then
return nil;
return new TRange(t);
End;
///返回文档中的位置
Function Node();
Begin
return node_;
End;
Function _split_range(sPos, rangeLength);
Begin
t := array();
if not ifInt(sPos) or not ifInt(rangeLength) or sPos < 0 then
return t;
r := TextArray();
rSize := 0;
for i:=0 to length(r)-1 do Begin
run := new TRun(r[i]['rNode']);
txt := run.Text();
if class(TSXml).IsUtf8() then
txt := UTF8ToAnsi(txt);
txtLen := lengthW(txt);
if rangeLength >= 0 and sPos + rangeLength <= rSize then Begin
return t;
End;
if rangeLength = 0 then Begin //w:ins情况
if sPos >= txtLen + rSize then Begin //前
rSize += txtLen;
t[0] := r[i];
End
else Begin //一分为二,取头部
if sPos = rSize then
return t;//正好文档开头
t[0] := r[i];
r2 := _duplicate_r(r[i]['rNode']);
_adjust_r(r[i]['rNode'], 0, sPos - rSize);
_adjust_r(r2, sPos - rSize, txtLen);
return t;
End;
End
else Begin //w:del情况
if rangeLength < 0 or (sPos <= rSize and sPos + rangeLength >= rSize + txtLen) then Begin //包含全部w:r
t[ length(t) ] := r[i];
rSize += txtLen;
End
else if sPos >= txtLen + rSize then Begin //前
rSize += txtLen;
End
else if sPos >= rSize and sPos < rSize + txtLen and sPos + rangeLength >= rSize + txtLen then Begin //一分为二,取尾部
if sPos = rSize then Begin //正好整个run
t[ length(t) ] := r[i];
End
else Begin //一分为二,取尾部
r2 := _duplicate_r(r[i]['rNode']);
_adjust_r(r[i]['rNode'], 0, sPos - rSize);
_adjust_r(r2, sPos - rSize, txtLen);
tmp := r[i];
tmp['rNode'] := r2;
tmp['rIndex'] := r[i]['rIndex'] + 1;
t[ length(t) ] := tmp;
End;
rSize += txtLen;
End
else if sPos + rangeLength <= rSize + txtLen then Begin
if sPos + rangeLength = rSize + txtLen then Begin //正好整个run
t[ length(t) ] := r[i];
End
else if sPos <= rSize then Begin //一分为二,取头部
t[ length(t) ] := r[i];
r2 := _duplicate_r(r[i]['rNode']);
_adjust_r(r[i]['rNode'], 0, rangeLength - (rSize - sPos));
_adjust_r(r2, rangeLength - (rSize - sPos), txtLen);
End
else Begin //一分为三,取中间
r2 := _duplicate_r(r[i]['rNode']);
r3 := _duplicate_r(r2);
_adjust_r(r[i]['rNode'], 0, sPos - rSize);
_adjust_r(r2, sPos - rSize, rangeLength);
_adjust_r(r3, sPos - rSize + rangeLength, txtLen);
tmp := r[i];
tmp['rNode'] := r2;
tmp['rIndex'] := r[i]['rIndex'] + 1;
t[0] := tmp;
End;
rSize += txtLen;
return t;
End
End;
End;
return t;
End;
//复制w:r节点
Function _duplicate_r(node);
Begin
data := node.Marshal();
return node.Parent().InsertAfterChild(node, data[0]);
End;
//调整w:r节点
Function _adjust_r(node, sPos, rangeLength);
Begin
rSize := 0;
ePos := sPos + rangeLength;
delT := array();
tNode := node.FirstChildElement('w:t');
while ifObj(tNode) do Begin
txt := UTF8ToAnsi(tNode.GetText());
txtLen := lengthW(txt);
if sPos >= rSize + txtLen then Begin //删除头部文字
delT[cnt++] := tNode;
rSize += txtLen;
End
else if sPos >= rSize and sPos < rSize + txtLen and ePos <= rSize + txtLen then Begin //只取中间文字
if sPos <> rSize or ePos <> rSize + txtLen then Begin //文字内容有变化
mCnt := ePos - sPos;
if sPos = rSize then
nStr := leftstr(txt, mCnt);
else if ePos = rSize + txtLen then
nStr := rightstr(txt, mCnt);
else
nStr := midstr(txt, sPos - rSize + 1, mCnt);
tNode.SetValue(AnsiToUTF8(nStr));
End;
rSize += txtLen;
End
else if sPos >= rSize and sPos < rSize + txtLen and ePos > rSize + txtLen then Begin //只取尾巴文字
if sPos <> rSize then Begin //文字内容有变化
mCnt := txtLen - (sPos - rSize);
nStr := rightstr(txt, mCnt);
tNode.SetValue(AnsiToUTF8(nStr));
End;
End
else if sPos < rSize and ePos >= rSize + txtLen then Begin //取值范围
rSize += txtLen;
End
else Begin //删除尾部文字
delT[cnt++] := tNode;
End
rSize += txtLen;
tNode := tNode.NextElement('w:t');
End;
for i:=0 to length(delT)-1 do
node.DeleteChild(delT[i]);
End;
node_;
name_:string;
pageNo_; //页码
linePos_; //行位置
End;
Type TRevision = Class(DocObject, TRevisionImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Init(node);
End;
Function Init(node);
Begin
node_ := node;
name_ := 'w:del';
if ifObj(node_) then Begin
name_ := node_.GetName();
paragraph_ := new TParagraph(node_);
End;
Date := class(TSXml).GetDatetimeStr(now());
Class(TRevisionImpl).Create(nil, name_);
InitRootNode(node);
End;
Property InsText read readInsText write writeInsText;
Function readInsText();
Begin
return class(TSXml).Utf8ToCurCodePage(InsText_);
End;
Function writeInsText(txt);
Begin
InsText_ := class(TSXml).CurCodePageToUtf8(txt);
End;
///修订类型
///返回string, 删除:'del'、添加:'ins'
Function Act();
Begin
return name_ = 'w:del' ? 'del' : 'ins';
End;
///文字内容
Function Text();override;
Begin
return paragraph_.Text();
End;
///接受修订
Function Accept();
Begin
if name_ = 'w:del' then Begin
node_.Parent().DeleteChild(node_);
return nil;
End;
r := array();
//w:ins
runs := paragraph_.GetRuns();
node := node_;
for i:=0 to length(runs)-1 do Begin
rData := runs[i].node_.Marshal();
node := node.Parent().InsertAfterChild(node, rData[0]);//接受修订,复制<w:r>...</w:r>
r[length(r)] := array('pNode':node.Parent(), 'pIndex':-1, 'rNode':node, 'rInde':-1);
End;
node_.Parent().DeleteChild(node_);
return r;
End;
///拒绝修订
Function Reject();
Begin
if name_ = 'w:ins' then Begin
node_.Parent().DeleteChild(node_);
return;
End;
//w:del
runs := paragraph_.GetRuns();
node := node_;
for i:=0 to length(runs)-1 do Begin
rXml := string(runs[i].node_.Data());
rXml := ReplaceStr(rXml, '<w:delText>', '<w:t>');
node := node.Parent().InsertAfterChild(node, rXml);//接受修订,复制<w:r>...</w:r>
End;
node_.Parent().DeleteChild(node_);
End;
paragraph_;
CommentID:integer;
sPos:integer;
SelectLength:integer;
InsText_:string;
End;
Type TDocComment = Class(TDocCommentImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
node_ := node;
name_ := 'w:comment';
Date := class(TSXml).GetDatetimeStr(now());
Class(TDocCommentImpl).Create(nil, name_);
InitRootNode(node);
End;
///批注文字内容
Function Text();
Begin
txt := '';
rCnt := 0;
for i:= 0 to length(commentsArray_)-1 do Begin
if commentsArray_[i]['Name'] := 'w:r' then Begin
if rCnt and commentsArray_[i]['pIndex'] <> commentsArray_[i-1]['pIndex'] then
txt += '\n';
run := new TRun(commentsArray_[i]['rNode']);
txt += run.Text();
rCnt ++;
End;
End;
return txt;
End;
///删除批注
Function Delete();
Begin
commentsArray_[0]['pNode'].DeleteChild( commentsArray_[0]['rNode'] );
cnt := length(commentsArray_) - 1;
r := commentsArray_[cnt]['rNode'].Next('w:r');
if ifObj(r) then Begin
commentReference := r.FirstChildElement('w:commentReference');
if ifObj(commentReference) then Begin
r.DeleteChild( commentReference );
End;
End;
commentsArray_[cnt]['pNode'].DeleteChild( commentsArray_[cnt]['rNode'] );
if not ifObj(r.FirstChildElement()) then Begin
r.Parent().DeleteChild( r );
End;
End;
CommentID:integer;
sPos:integer;
SelectLength:integer;
commentsArray_;
End;
Type TDocComments = Class
Function Create(t);
Begin
commentsArray_ := t;
hash_ := sselect distinct ['ID'] from commentsArray_ where ['ID'] >= 0 end;
End;
///文档中全部的批注信息个数
Function Count();
Begin
return length(hash_);
End;
///文档中指定批注信息
///index第index个批注信息
///返回TDocComment对象
Function Comment(index);overload;
Begin
if index < 0 or index >= length(hash_) then
return nil;
id := hash_[index];
r := select thisrowindex as 'Index' from commentsArray_ where ['ID'] = id end;
if not istable(r) or length(r) <> 2 then
return nil;
t := select * from commentsArray_ where thisrowindex <= r[1]['Index'] and thisrowindex >= r[0]['Index'] end;
o := new TDocComment();
o.commentsArray_ := t;
o.CommentID := t[0]['ID'];
return o;
End;
hash_;
commentsArray_;
End;
//w:pPr
// 'w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore',
// 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers',
// 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku',
// 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE',
// 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid',
// 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents',
// 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment',
// 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle',
// 'w:rPr', 'w:sectPr', 'w:pPrChange'
//w:p
Type TWHyperLink = Class(TWHyperLinkImpl)
Function AddRun(txt, newLine);
Begin
o := new TRun();
//o.Parent := self;
NewChildNode( array("field":"", "name":"w:r", "obj":o, "attrEx":"", "nodeType":"") );
if txt then
o.SetText(txt);
if newLine then
o.Br.Type := '';
return o;
End;
End;
Type TParagraph = Class(DocObject, TParagraphImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Init(node);
End;
Function Init(node);
Begin
node_ := node;
name_ := 'w:p';
Class(TParagraphImpl).Create(nil, 'w:p');
InitRootNode(node);
End;
Function Root(); override;
Begin
return node_;
End;
Property Format read readFormat;
Function readFormat();
Begin
return pPr;
End;
Property Font read readFont;
Function readFont();
Begin
return pPr.rPr;
End;
///修改段落
Function Apply(); override;
Begin
arr := Marshal();
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
CopyRunFormat(false, nil);
End;
///修改段落内容
///返回TRun对象
Function SetText(str);
Begin
t := GetRuns();
for i:=1 to length(t)-1 do Begin
node_.DeleteChild(t[i].node_);
End;
if length(t) then
rNode := t[0].node_;
else
rNode := node_.InsertEndChild('element', 'w:r');
run := new TRun(rNode);
run.SetText(str);
return rNode;
End;
///制表位TTabStops对象
///返回TTabStops对象
//<w:tabs>
// <w:tab w:val="left" w:pos="2160" />
// <w:tab w:val="left" w:pos="5040" />
//</w:tabs>
Function TabStops();
Begin
node := class(TSXml).GetNode(node_, 'w:pPr/w:tabs');
if not ifObj(node) then
return nil;
return new TTabStops(node);
End;
Function setParagraphText(rNode, tNode, txt);
Begin
if not ifObj(tNode) then Begin
tNode := rNode.FirstChildElement('w:t');
if not ifObj(tNode) then
tNode := rNode.InsertFirstChild('element', 'w:t', txt);
End
else
tNode.SetValue(txt);
End;
///所有TRun对象列表
///返回TRun对象列表
Function GetRuns();
Begin
t := array();//TRun Array
node := node_.FirstChildElement('w:r');
while ifObj(node) do Begin
n := node;
name := node.GetName();
node := node.NextElement('w:r');
if name = 'w:r' then Begin
run := new TRun(n);
End
else if name = 'w:ins' then Begin
r := n.FirstChildElement('w:r');
if not ifObj(r) then continue;
run := new TRun(r);
End
else
continue;
t[ length(t) ] := run;
End;
return t;
End;
///TRun对象
///返回TRun对象
Function GetRun(i);
Begin
runs := GetRuns();
if i < 0 or i >= length(runs) then
return nil;
return runs[i];
End;
///段落中添加内容
///返回TRun对象
Function AddRun(txt, newLine);
Begin
o := new TRun();
//o.Parent := self;
NewChildNode( array("field":"", "name":"w:r", "obj":o, "attrEx":"", "nodeType":"") );
if txt then
o.SetText(txt);
if newLine then
o.Br.Type := '';
return o;
End;
///段落添加<w:hyperlink>
///返回TWHyperLink
Function AddHyperLink();
Begin
o := new TWHyperLink();
NewChildNode( array("field":"", "name":"w:r", "obj":o, "attrEx":"", "nodeType":"") );
return o;
End;
///在段落对象后面追加TRun对象
///返回TRun对象
Function AppendRun();overload;
Begin
node := node_.InsertEndChild('element','w:r');
node.InsertFirstChild('element', 'w:rPr');
return new TRun(node);
End;
///在段落某个TRun对象之后添加TRun对象
///runTRun对象
///返回TRun对象
Function AppendRun(run);overload;
Begin
node := run.NodeUri <> '' ? class(TSXml).GetNode(run.Root(), run.NodeUri) : run.Root();
node := node_.InsertAfterChild(run.Root(), 'element','w:r');
node.InsertFirstChild('element', 'w:rPr');
return new TRun(node);
End;
///在段落对象开头添加TRun对象
///返回TRun对象
Function PrependRun();overload;
Begin
node := node_.FirstChildElement('w:r');
node := node_.InsertBeforeChild(node, 'element', 'w:r');
node.InsertFirstChild('element', 'w:rPr');
return new TRun(node);
End;
///在段落某个TRun对象之前添加TRun对象
///runTRun对象
///返回TRun对象
Function PrependRun(run);overload;
Begin
node := node_.InsertBeforeChild(run.Root(), 'element', 'w:r');
node.InsertFirstChild('element', 'w:rPr');
return new TRun(node);
End;
///段落中全部的修改标记(修订删除、修订插入)
///返回TRevision对象列表array(TRevision...);
Function Revisions();overload;
Begin
return getDocumentObjects(node_, array('w:del', 'w:ins'));
End;
///段落指定修改标记(修订删除、修订插入)
///index第index个修改标记
///返回TRevision对象
Function Revisions(index);overload;
Begin
return getDocumentObject(node_, array('w:del', 'w:ins'), index);
End;
///段落中所有文本框
///返回TTextBox对象数组
Function TextBoxs();overload;
Begin
r := array();
runs := GetRuns();
for i:=0 to length(runs)-1 do Begin
node := class(TSXml).GetNode(runs[i].node_, 'mc:AlternateContent/mc:Fallback/w:pict/v:shape/v:textbox/w:txbxContent');
if ifObj(node) then Begin
nodeEx := class(TSXml).GetNode(runs[i].node_, 'mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx/w:txbxContent');
box := new TTextBox(node);
box.Init(node_, nodeEx);
r[length(r)] := box;
End
else Begin
node := class(TSXml).GetNode(runs[i].node_, 'w:pict/v:shape/v:textbox/w:txbxContent');
if ifObj(node) then Begin
box := new TTextBox(node);
box.Init(node_, nil);
r[length(r)] := box;
End;
End;
End;
return r;
End;
///段落中指定文本框
///index第index个文本框
///返回TTextBox对象
Function TextBoxs(index);overload;
Begin
r := TextBoxs();
if index >= 0 and index < length(r) then
return r[index];
return nil;
End;
///清除段落格式、字体格式
Function ClearFormat();
Begin
pPr := node_.FirstChildElement('w:pPr');
//清除段落格式
if ifObj(pPr) then
node_.DeleteChild(pPr);
//清除字体格式
runs := GetRuns();
for i:=0 to length(runs)-1 do Begin
runs[i].ClearFormat();
End;
End;
///添加BookMark
///返回BookMark的名称string
Function AddBookMark(bookMarkID);
Begin
pPr := node_.FirstChildElement('w:pPr');
if ifObj(pPr) then
markStart := node_.InsertAfterChild(pPr, 'element', 'w:bookmarkStart');
else
markStart := node_.InsertFirstChild('element', 'w:bookmarkStart');
name := '_Toc' $ bookMarkID;
markStart.SetAttribute('w:name', name);
markStart.SetAttribute('w:id', bookMarkID);
markEnd := node_.InsertEndChild('element', 'w:bookmarkEnd');
markEnd.SetAttribute('w:id', bookMarkID);
return name;
End;
///判断是否为空段落
///返回: bool
Function Empty();
Begin
if ifObj(node_) then
begin
if ifObj(node_.FirstChildElement("w:r")) then return false;
sub_node := node_.FirstChildElement();
if not ifObj(sub_node) then return true;
// 兼容wps
sub_node2 := sub_node.NextElement();
if sub_node.GetName() = 'w:bookmarkStart' and ifObj(sub_node2) and sub_node2.GetName() = 'w:bookmarkEnd' then
return true;
// 兼容word
if sub_node.GetName() = 'w:pPr' and not ifObj(sub_node2) then
return true;
end
return false;
End;
///获取当前段落的上一个段落
///返回TParagraph对象
Function PrevParagraph();
Begin
if ifObj(node_) then
begin
node := node_.PrevElement('w:p');
return ifObj(node) ? new TParagraph(node) : nil;
end
End;
Function CopyRunFormat(del, toRunNode);
Begin
rPr := class(TSXml).GetNode(node_, 'w:pPr/w:rPr');
dom := ifObj(rPr) ? rPr.Marshal() : array();
if ifObj(toRunNode) then Begin
_copyRunFormat(toRunNode, dom, del);
return;
End;
//复制到所有run
runs := GetRuns();
for i:=0 to length(runs)-1 do
_copyRunFormat(runs[i].node_, dom, del);
End;
//不能复用TRun::CopyFontFormat(),该函数是完全替换字体属性
//本函数是追加、修改字体属性
Function _copyRunFormat(toRunNode, dom, del);
Begin
tNode := toRunNode.FirstChildElement('w:t');
rPr2 := toRunNode.FirstChildElement('w:rPr');
if del and ifObj(rPr2) then
rPr2.node_.DeleteChildren();
else if ifObj(tNode) and not ifObj(rPr2) then
rPr2 := class(TSXml).GetNode(toRunNode, 'w:rPr', 'first');
if istable(dom) and ifObj(rPr2) then
class(TSXml).UpdateNode(rPr2, dom[0]['attributes'], dom[0]['children']);
End;
End;
//w:tabs
Type TTabStops = Class(DocObject, TTabStopsImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Class(TTabStopsImpl).Create(nil, 'w:tabs');
tabArr := array();
if ifObj(node) then Begin
parent_ := node.Parent();
node_ := node;
n := node_.FirstChildElement('w:tab');
while ifObj(n) do Begin
tab := new TTabStop();
tabArr[ length(tabArr) ] := array("field":"TTabStop", "name":"w:tab", "obj":tab, "attrEx":"", "nodeType":"", "node":n);
n := n.NextElement();
End;
Tabs := tabArr;
InitRootNode(node);
End;
End;
Function Create(parentObj, name);overload;
Begin
Class(TTabStopsImpl).Create(parentObj, name);
tabArr := array();
End;
///删除制表符
///indinteger索引
Function Clear(ind);
Begin
if ind>=0 and ind < length(Tabs) then Begin
if ifObj(Tabs[i]['node']) then
node_.DeleteChild(Tabs[i]['node']);
Tabs := select * from Tabs where thisrowindex <> ind end;
End;
End;
///添加制表符
///indinteger索引
///tabTTabStop对象
Function Add(ind, tab);
Begin
a := array("field":"TTabStop", "name":"w:tab", "obj":tab, "attrEx":"", "nodeType":"", "node":nil);
if ind = 0 then Begin
if ifObj(node_) then
a['node'] := node_.InsertFirstChild('element', 'w:tab');
Tabs := array(a) union Tabs;
End
else if ind < 0 or ind >= length(Tabs) then Begin
if ifObj(node_) then
a['node'] := node_.InsertEndChild('element', 'w:tab');
Tabs union= array(a);
End
else Begin
node := Tabs[length(Tabs)-1]['node'];
if length(Tabs) and ifObj(node) then
a['node'] := node_.InsertAfterChild(node, 'element', 'w:tab');
arr := Tabs[:ind-1,:];
arr[ length(arr) ] := a;
b := Tabs[ind:,:];
Tabs := arr union b;
End;
if ifObj(a['node']) then Begin
arr := tab.Marshal();
class(TSXml).UpdateNode(a['node'], arr['attributes'], arr['children']);
End;
return tab;
End;
///获取制表符
///返回TTabStop对象
Function Get(ind);
Begin
if ind >= 0 or ind < length(Tabs) then
return Tabs[ind]['obj'];
return nil;
End;
///获取全部制表符列表
///返回TTabStop对象列表array(TTab...)
Function TabStops();
Begin
return sselect ['obj'] from Tabs end;
End;
///刷新制表符
Function Flush();
Begin
if ifObj(node_) then Begin
for i:=0 to length(Tabs)-1 do Begin
arr := Tabs[i]['obj'].Marshal();
class(TSXml).UpdateNode(Tabs[i]['node'], arr['attributes'], arr['children']);
End;
End;
End;
End;
//w:r
Type TRun = Class(DocObject, TRunImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Init(node);
End;
Function Create(pNode, name);overload;
Begin
Class(TRunImpl).Create(nil, 'w:r');
End;
Function Init(node);
Begin
node_ := node;
name_ := 'w:r';
Class(TRunImpl).Create(nil, 'w:r');
InitRootNode(node);
End;
Property Font read readFont;
Function readFont();
Begin
return rPr;
End;
///应用格式
Function Apply(); override;
Begin
arr := Marshal();
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
End;
///添加tab
Function AddTab();
Begin
n := node_.InsertFirstChild('element', 'w:tab');
End;
///添加文字
///[isUtf8]可选参数当前字符集是否utf8缺省false
Function AddText(txt, isUtf8);
Begin
str := txt;
if not isUtf8 and not class(TSXml).IsUtf8() then
str := class(TSXml).CurCodePageToUtf8(txt);
if ifObj(node_) then Begin
_insertText(str, false);
return;
End;
lines := str2array(str,'\n');
T := lines[0];
if _preserve(T) then
Space := 'preserve';
for i:=1 to length(lines)-1 do Begin
NewChildNode( array("field":"", "name":"w:br", "obj":1, "attrEx":"", "nodeType":"empty") );
NewChildNode( array("field":"", "name":"w:t", "obj":lines[i], "attrEx":"", "nodeType":"pcdata") );
if _preserve(lines[i]) then
NewChildNode( array("field":"", "name":"w:t", "obj":'preserve', "attrEx":"xml:space", "nodeType":"") );
End;
End;
///修改文字
///[isUtf8]可选参数当前字符集是否utf8缺省false
Function SetText(txt, isUtf8);
Begin
str := txt;
if not isUtf8 and not class(TSXml).IsUtf8() then
str := class(TSXml).CurCodePageToUtf8(txt);
if ifObj(node_) then Begin
ClearText();//删除原来文字
_insertText(str, false);//添加文字
return;
End;
ExtNodes := array();
T := nil;
AddText(str, true);
End;
Function _insertText(txt, first);
Begin
lines := str2array(txt,'\n');
for i:=0 to length(lines)-1 do Begin
t := TrimRight(lines[i]);
if i=0 then Begin
if first then
tNode := node_.InsertFirstChild('element', 'w:t', t);
else
tNode := node_.InsertEndChild('element', 'w:t', t);
End
else Begin
tNode := node_.InsertAfterChild(tNode, 'element', 'w:br');//换行符号
tNode := node_.InsertAfterChild(tNode, 'element', 'w:t', t);
End;
End;
End;
///文字内容
Function Text();override;
Begin
txt := '';
tNode := node_.FirstChildElement();
while ifObj(tNode) do Begin
name := tNode.GetName();
if name = 'w:t' or name = 'w:delText' then
txt += tNode.GetText();
//if name = 'w:br' then
// txt += '\n';
tNode := tNode.NextElement();
End;
if not class(TSXml).IsUtf8() then
return class(TSXml).Utf8ToCurCodePage(txt);
return txt;
End;
///清除字体格式
Function ClearFormat();
Begin
rpr_node := node_.FirstChildElement('w:rPr');
if ifObj(rpr_node) then
node_.DeleteChild(rpr_node);
End;
Function CopyFontFormat(fromRun);
Begin
ClearFormat();
rpr_node := fromRun.node_.FirstChildElement('w:rPr');
if not ifObj(rpr_node) then
return;
data := rpr_node.Marshal();
node_.InsertFirstChild(data[0]);
End;
///清除全部文字内容
Function ClearText();
Begin
if ifObj(node_) then Begin
n := node_.FirstChildElement('w:t');
while ifObj(n) do Begin
next := n.NextElement('w:t');
node_.DeleteChild(n);
n := next;
End;
End;
End;
End;
Type TPicture = Class(DocObject, TPictureImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Init(node);
End;
Function Init(node);
Begin
node_ := node;
name_ := 'w:p';
Width := 0.;
Height := Width;
Class(TPictureImpl).Create(nil, 'w:p');
InitRootNode(node);
End;
Property Format read readFormat;
Function readFormat();
Begin
return Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr;
End;
///修改图片格式
///[docx]:当前文档对象,为空指当前文档
Function Apply(docx); override;
Begin
document := docx;
if not ifObj(document) then Begin
document := TOfficeApi().GetDocument();
if not ifObj(document) then
return;
End;
arr := Marshal();
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
if ifBinary(Image) then Begin //修改图片内容
node := class(TSXml).GetNode(node_,'w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:blip');
if ifObj(node) then
rid := node.GetAttribute('r:embed');
xml := document.Zip().Get('word/_rels/document.xml.rels');
picFileName := class(TSXml).FindRelationshipTarget(xml, rid);
if ifstring(picFileName) then Begin
pic := document.Zip().Get('word/' + picFileName);
if ifObj(pic) then
pic.Data := Image;
End;
End;
End;
Function ScaledDimensions(image);
Begin
ETU := 360045;//1cm单位
maxX := 17.0;//水平方向17cm
maxY := 23.0;//垂直方向23cm
imageW := image.Width() / 28.346 * ETU;
imageH := image.Height() / 28.346 * ETU;
if Width <= 0 and Height <= 0 then Begin //图像缺省大小
widthVal := imageW;
heightVal := imageH;
End
else Begin //用户设置了图片尺寸
widthVal := ETU * Width;
heightVal := ETU * Height;
if Width <= 0 and imageH and imageW then Begin //按照图片比例自动缩放
scaling_factor := imageW / imageH;
widthVal := round(heightVal * scaling_factor);
End;
if Height <= 0 and imageH and imageW then Begin //按照图片比例自动缩放
scaling_factor := imageW / imageH;
heightVal := round(widthVal / scaling_factor);
End;
End;
//缺省大小用户没有设置尺寸同时TSImage也没有识别图片尺寸
if widthVal = 0 and heightVal = 0 then
widthVal := 15 * ETU;
if widthVal = 0 then
widthVal := heightVal * 2;
if heightVal = 0 then
heightVal := widthVal / 3;
//缩放
ratio := 1;
if widthVal > maxX * ETU then
ratio := maxX * ETU / widthVal;
if heightVal > maxY * ETU then Begin
r2 := maxY * ETU / heightVal;
if r2 < ratio then
ratio := r2;
End;
if ratio < 1 then Begin
heightVal *= ratio;
widthVal *= ratio;
End;
//println('w={}-{},maxx={}, h={}-{},maxh={},ratio={}',integer(imageW),integer(widthVal),15 * ETU, integer(imageH),integer(heightVal),23 * ETU,ratio);
return array(integer(widthVal), integer(heightVal));
End;
Image;//图片内容Binary
Descr;
Width;//厘米
Height;//厘米
End;
Type TChart = Class(TChartImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Class(TChartImpl).Create(nil, 'w:p');
pNode := node;
self.C := true;
InitRootNode(node);
End;
Function Init(docx, node, cNode);
Begin
pNode := node;
if not ifObj(cNode) then
return;
IsWord_ := docx.IsWord();
rId := cNode.GetAttribute('r:id');
relsObj := docx.Zip().Get('word/_rels/document.xml.rels');
Target := class(TSXml).FindRelationshipTarget(relsObj, rId);
if ifNil(Target) then
return;
chartFileName := getChartFileName(Target);
xmlObj := docx.Zip().Get(chartFileName);
if not ifObj(xmlObj) then
return;
plotAreaNode := class(TSXml).GetNode(xmlObj, 'c:chartSpace/c:chart/c:plotArea');
if ifObj(plotAreaNode) then Begin
child := plotAreaNode.FirstChildElement();
while ifObj(child) do Begin
nodename := child.GetName();
if rightstr(nodename,5) = 'Chart' then Begin
if leftstr(nodename,2) = 'c:' then
self.C := true;
ChartNode := child;
break;
End;
child := child.NextElement();
End;
End;
End;
Function Serialize(isWord);
Begin
Plotarea := TOfficeObj('TPlotarea');
Plotarea.Layout := true;
isWord_ := isWord;
Type := lowercase(Type);
case Type of
'area','areastacked','areapercentstacked','area3d','area3dstacked','area3dpercentstacked','bar','barstacked','barpercentstacked',
'bar3dclustered','bar3dstacked','bar3dpercentstacked','bar3dconeclustered','bar3dconestacked','bar3dconepercentstacked',
'bar3dpyramidclustered','bar3dpyramidstacked','bar3dpyramidpercentstacked','bar3dcylinderclustered','bar3dcylinderstacked',
'bar3dcylinderpercentstacked','col','colstacked','colpercentstacked','col3d','col3dclustered','col3dstacked','col3dpercentstacked',
'col3dcone','col3dconeclustered','col3dconestacked','col3dconepercentstacked','col3dpyramid','col3dpyramidclustered',
'col3dpyramidstacked','col3dpyramidpercentstacked','col3dcylinder','col3dcylinderclustered','col3dcylinderstacked',
'col3dcylinderpercentstacked','bubble','bubble3d':
drawBaseChart(Plotarea);
'doughnut':
Begin
drawExtChart(Plotarea, 'c:doughnutChart');
Plotarea.chart.HoleSize := 75;
End
'line':
drawLineChart(Plotarea);
'pie3d':
drawExtChart(Plotarea, 'c:pie3DChart');
'pie':
drawExtChart(Plotarea, 'c:pieChart');
'pieofpiechart':
Begin
drawExtChart(Plotarea, 'ofPieChart');
Plotarea.chart.OfPieType := 'pie';
End
'barofpiechart':
Begin
drawExtChart(Plotarea, 'c:ofPieChart');
Plotarea.chart.OfPieType := 'bar';
End
'radar':
drawRadarChart(Plotarea);
'scatter':
drawScatterChart(Plotarea);
'surface3d','wireframesurface3d':
drawSurface3DChart(Plotarea, 'c:surface3DChart');
'contour','wireframecontour':
drawSurface3DChart(Plotarea, 'c:surfaceChart');
End;
Plotarea.SpPr.noFill := true;
Plotarea.SpPr.Ln.noFill := true;
Plotarea.SpPr.EffectLst := true;
End;
///添加图表Series数据
Function AddSeries(Name, Categories, Value);
Begin
SerName := name;
catArr := Categories;
if not class(TSXml).IsUtf8() then Begin
if name and ifstring(name) then
SerName := class(TSXml).CurCodePageToUtf8(name);
if ifstring(catArr) then
catArr := class(TSXml).CurCodePageToUtf8(catArr);
else if istable(catArr) then Begin
for i:=0 to length(catArr)-1 do Begin
if ifstring(catArr[i]) then
catArr[i] := class(TSXml).CurCodePageToUtf8(catArr[i]);
End;
End;
End;
Series union= array(("Name":SerName,"Categories":catArr,"Values":Value));
return length(Series);
End;
///清除图表Series数据
Function ClearSeries();
Begin
Series := array();
End;
///删除图表Series数据
Function RemoveSeries(i);
Begin
cnt := length(Series);
if i < 0 or i >= cnt then
return length(Series);
tmp := Series[:i-1,:];
tmp union= Series[i+1:,:];
Series := tmp;
return length(Series);
End;
Function NewExcelFile();
Begin
Excel := new TSExcelFile();
[err, errmsg] := Excel.NewFile();
if err then
Excel := nil;
End;
///更新图表
Function Apply(docx);
Begin
if not ifObj(ChartNode) then
return;
if ifstring(Title) and Title <> '' then
UpdateTitle(class(TSXml).CurCodePageToUtf8(Title));
//不同的图表,数据区较复杂
if not istable(Series) then return;
ser := self.C ? 'c:ser' : 'ser';
serNode := ChartNode.FirstChildElement(ser);
if not ifObj(serNode) then return;//没有缺省数据
//存在Excel扩展数据文件
node := xmlObj.FirstChildElement('c:chartSpace').FirstChildElement('c:externalData');
if ifObj(node) then Begin
rId := node.GetAttribute('r:id');
fName := ExtractFileName(chartFileName);
rels := 'word/charts/_rels/' + fName + '.rels';
chartId := leftstr(fName, length(fName) - 4);
chartId := rightstr(chartId, length(chartId) - 5);
relsObj := docx.Zip().Get(rels);
if ifObj(relsObj) then Begin
target := class(TSXml).FindRelationshipTarget(relsObj, rId);//../embeddings/Workbook2.xlsx
excelFileName := ReplaceStr(target, '..','word');
excelObj := docx.Zip().Get(excelFileName);
if ifObj(excelObj) then
NewExcelFile();
End;
End;
//更新数据区
dom := serNode.Marshal();
for i:=0 to length(Series)-1 do Begin
if i then
serNode := serNode.InsertAfterChild(serNode, dom[0]);
removeOldSer(serNode);
ser := TOfficeObj('TSer');
ser.IDx := i;
ser.Ord := i;
setTx(ser.Tx.StrRef, Series[i]['Name'], i);
n := serNode.FirstChildElement('c:cat');
if ifObj(n) then Begin
_setCat(ser.Cat, i);
_setVal(ser.Val, i);
End;
n := serNode.FirstChildElement('c:xVal');
if ifObj(n) then Begin
_setCat(ser.XVal, i);
_setVal(ser.YVal, i);
End;
updData := ser.Marshal();
class(TSXml).UpdateNode(serNode, updData['attributes'], updData['children']);
End;
//删除多余的<c:ser>
node := serNode.NextElement(ser);
while ifObj(node) do Begin
ChartNode.DeleteChild(node);
node := serNode.NextElement(ser);
End;
//修改内嵌的excel文件
AddExcelFile(docx, xmlObj, chartId);
End;
Function removeOldSer(node);
Begin
task := array('c:tx','c:cat','c:val','c:xVal','c:xYal');
for i:=0 to length(task)-1 do begin
n := node.FirstChildElement(task[i]);
if ifObj(n) then
n.DeleteChildren();
End;
End;
Function AddExcelFile(docx, chartXml, chartId);
Begin
//内嵌excel数据文件
if not ifObj(Excel) then
return;
[err, data] := Excel.Zip().Save2Mem();
if err then
return;
rId := 'rId1';
workBook := 'embeddings/Workbook1.xlsx';
fileCnt := 1 + vselect countof( ['FileName'] ) from docx.Zip().Files() where AnsiStartsText('word/embeddings/Workbook', ['FileName']) end;
ctXml := docx.Zip().Get('[Content_Types].xml');
class(TSXml).AddDefaultContentType(ctXml, 'xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
externalDataNode := chartXml.FirstChildElement('c:chartSpace').FirstChildElement('c:externalData');
if not ifObj(externalDataNode) then
chartXml.FirstChildElement('c:chartSpace').InsertEndChild('<c:externalData r:id="rId1"><c:autoUpdate val="0"/></c:externalData>');
else Begin
rId := externalDataNode.GetAttribute('r:id');
End;
rels := 'word/charts/_rels/chart' $ chartId $ '.xml.rels';
relsObj := docx.Zip().Get(rels);
if not ifObj(relsObj) then Begin
rId := 'rId1';
xmlStr := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Target="../embeddings/Workbook1.xlsx" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/package" Id="rId1"/>
</Relationships>';
docx.Zip().Add(rels, xmlStr);
if fileCnt > 1 then Begin
workBook := 'embeddings/Workbook' $ fileCnt $ '.xlsx';
relsObj := docx.Zip().Get(rels);
node := relsObj.FirstChildElement('Relationships').FirstChildElement('Relationship');
node.SetAttribute('Target', '../' + workBook);
End;
End
else Begin
target := class(TSXml).FindRelationshipTarget(relsObj, rId);
if ifNil(target) then Begin
[maxRid, tg, id] := class(TSXml).FindRelationshipRid(relsObj,'');
if fileCnt > 1 then
workBook := 'embeddings/Workbook' $ fileCnt $ '.xlsx';
maxRid ++;
class(TSXml).AddRelationshipRid(relsObj, '../' + workBook, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package', 'rId' $ maxRid, nil);
End
else
workBook := ReplaceStr(target, '../', '');
End;
xlsx := docx.Zip().Get('word/' + workBook);
if ifObj(xlsx) then
xlsx.Data := data; //更新xlsx文件
else
docx.Zip().Add('word/' + workBook, data); //添加xlsx文件
End;
///修改图表标题
Function UpdateTitle(t);
Begin
task := array('c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:t', 'pcdata', t);
class(TSXml).SetNodeValue(ChartNode.Root(), task);
End;
///显示数据表
///bbool型是否显示数据表
Function ShowDataTable(b);
Begin
if not ifObj(plotAreaNode) then
return;
node := plotAreaNode.FirstChildElement('c:dTable');
if ifObj(node) then
plotAreaNode.DeleteChild(node);
if not b then
return;
xmlStr := '<c:dTable>
<c:showHorzBorder val="1" />
<c:showVertBorder val="1" />
<c:showOutline val="1" />
<c:showKeys val="1" />
<c:txPr>
<a:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="ellipsis" vert="horz" wrap="square" anchor="ctr" anchorCtr="1" />
<a:lstStyle />
<a:p>
<a:pPr>
<a:defRPr lang="zh-CN" sz="1000" b="0" i="0" u="none" strike="noStrike" kern="1200" baseline="0">
<a:solidFill>
<a:schemeClr val="tx1" />
</a:solidFill>
<a:latin typeface="+mn-lt" />
<a:ea typeface="+mn-ea" />
<a:cs typeface="+mn-cs" />
</a:defRPr>
</a:pPr>
</a:p>
</c:txPr>
</c:dTable>';
plotAreaNode.InsertEndChild(xmlStr);
End;
private
Function getChartFileName(f);
Begin
if leftstr(f,5) = 'word/' then
return f;
if leftstr(f,3) = '../' then
return 'word/' + f[4:];
if f[1] = '/' then
return f[2:];
if leftstr(f,7) = 'charts/' then
return 'word/' + f;
return f;
End;
Function updateValue(task);
Begin
for i:=0 to length(task)-1 do Begin
if not C then
task[i][0] := ReplaceStr(task[i][0], 'c:', '');
class(TSXml).SetNodeValue(xmlObj_, task[i]);
End;
End;
Function getLegendPosition(t);
Begin
m := array("bottom": "b",
"left": "l",
"right": "r",
"top": "t",
"top_right": "tr");
return m[t];
End;
Function drawSurface3DChart(o, name);
Begin
o.chart.NodeName := name;
setChartSer(o);
o.chart.Axid := 754001152;
o.chart.Axid2 := 753999904;
o.chart.Axid3 := 832256642;
setCatAx(o.CatAx);
setValAx(o.ValAx);
setSerAx(o.SerAx);
if Type in array( 'wireframesurface3d', 'wireframecontour' ) then
o.chart.Wireframe := true;
End;
Function drawScatterChart(o);
Begin
o.chart.NodeName := 'c:scatterChart';
o.chart.ScatterStyle := 'smoothMarker';
o.chart.VaryColors := false;
setChartSer(o);
setDLbls(o.chart.DLbls);
o.chart.Axid := 754001152;
o.chart.Axid2 := 753999904;
setCatAx(o.CatAx);
setValAx(o.ValAx);
End;
Function drawRadarChart(o);
Begin
o.chart.NodeName := 'c:radarChart';
o.chart.RadarStyle := 'marker';
o.chart.VaryColors := false;
setChartSer(o);
setDLbls(o.chart.DLbls);
o.chart.Axid := 754001152;
o.chart.Axid2 := 753999904;
setCatAx(o.CatAx);
setValAx(o.ValAx);
End;
Function drawExtChart(o, name);
Begin
o.chart.NodeName := name;
o.chart.VaryColors := VaryColors;
setChartSer(o);
setDLbls(o.chart.DLbls);
End;
Function drawLineChart(o);
Begin
o.chart.NodeName := 'c:lineChart';
o.chart.Grouping := getGrouping(Type);
o.chart.VaryColors := false;
setChartSer(o);
setDLbls(o.chart.DLbls);
o.chart.Smooth := false;
o.chart.Axid := 754001152;
o.chart.Axid2 := 753999904;
setCatAx(o.CatAx);
setValAx(o.ValAx);
End;
Function drawBaseChart(o);
Begin
o.chart.BarDir := getBarDir(Type);
o.chart.Grouping := getGrouping(Type);
o.chart.VaryColors := VaryColors;
o.chart.Overlap := getVaryColors(Type);
o.chart.Axid := 754001152;
o.chart.Axid2 := 753999904;
o.chart.NodeName := getChartName(Type);
setChartSer(o);
o.chart.Shape := getSharp(Type);
setDLbls(o.chart.DLbls);
setCatAx(o.CatAx);
setValAx(o.ValAx);
End;
Function setSerAx(SerAx);
Begin
SerAx.AxID := 832256642;
SerAx.Scaling.Max := YAxis.Max;
SerAx.Scaling.Min := YAxis.Min;
SerAx.Scaling.Orientation := YAxis.ReverseOrder ? 'maxMin' : 'minMax';
SerAx.Del := YAxis.None;
SerAx.AxPos := XAxis.ReverseOrder ? 't' : 'b';
SerAx.TickLblPos := 'nextTo';
drawPlotAreaSpPr(SerAx.SpPr);
drawPlotAreaTxPr(SerAx.TxPr);
SerAx.CrossAx := 753999904;
End;
Function setCatAx(CatAx);
Begin
CatAx.AxID := 754001152;
CatAx.Scaling.Max := XAxis.Max;
CatAx.Scaling.Min := XAxis.Min;
CatAx.Scaling.Orientation := XAxis.ReverseOrder ? 'maxMin' : 'minMax';
CatAx.Del := 0;//XAxis.None;
CatAx.AxPos := XAxis.ReverseOrder ? 't' : 'b';
CatAx.NumFmt.FormatCode := 'General';
CatAx.NumFmt.SourceLinked := true;
CatAx.MajorTickMark := 'none';
CatAx.MinorTickMark := 'none';
CatAx.TickLblPos := 'nextTo';
drawPlotAreaSpPr(CatAx.SpPr);
drawPlotAreaTxPr(CatAx.TxPr);
CatAx.CrossAx := 753999904;
CatAx.Crosses := 'autoZero';
CatAx.Auto := true;
CatAx.LblAlgn := 'ctr';
CatAx.LblOffset := 100;
CatAx.NoMultiLvlLbl := false;
if XAxis.MajorGridlines then
drawPlotAreaSpPr(CatAx.MajorGridlines.SpPr);
if XAxis.MinorGridlines then
drawPlotAreaSpPr(CatAx.MinorGridlines.SpPr);
if XAxis.TickLabelSkip then
CatAx.TickLabelSkip := XAxis.TickLabelSkip;
End;
Function setValAx(ValAx);
Begin
ValAx.AxID := 753999904;
ValAx.Scaling.Max := YAxis.Max;
ValAx.Scaling.Min := YAxis.Min;
if ifint(YAxis.LogBase) and YAxis.LogBase >= 2 and YAxis.LogBase <= 1000 then
ValAx.Scaling.LogBase := YAxis.LogBase;
ValAx.Scaling.Orientation := YAxis.ReverseOrder ? 'maxMin' : 'minMax';
ValAx.Del := YAxis.None;
ValAx.AxPos := YAxis.ReverseOrder ? 'r' : 'l';
ValAx.NumFmt.FormatCode := chartValAxNumFmtFormatCode(Type);
ValAx.NumFmt.SourceLinked := true;
ValAx.MajorTickMark := 'none';
ValAx.MinorTickMark := 'none';
ValAx.TickLblPos := 'nextTo';
drawPlotAreaSpPr(ValAx.SpPr);
drawPlotAreaTxPr(ValAx.TxPr);
ValAx.CrossAx := 754001152;
ValAx.Crosses := 'autoZero';
ValAx.CrossBetween := chartValAxCrossBetween(Type);
if XAxis.MajorGridlines then
drawPlotAreaSpPr(ValAx.MajorGridlines.SpPr);
if XAxis.MinorGridlines then
drawPlotAreaSpPr(ValAx.MinorGridlines.SpPr);
ValAx.MajorUnit := YAxis.MajorUnit;
if Type in array('contour', 'wireframecontour') then
ValAx.TickLblPos := 'none';
End;
Function chartValAxCrossBetween(t);
Begin
m := array(
'area': 'midCat',
'areastacked': 'midCat',
'areapercentstacked': 'midCat',
'area3d': 'midCat',
'area3dstacked': 'midCat',
'area3dpercentstacked': 'midCat',
'bar': 'between',
'barstacked': 'between',
'barpercentstacked': 'between',
'bar3dclustered': 'between',
'bar3dstacked': 'between',
'bar3dpercentstacked': 'between',
'bar3dconeclustered': 'between',
'bar3dconestacked': 'between',
'bar3dconepercentstacked': 'between',
'bar3dpyramidclustered': 'between',
'bar3dpyramidstacked': 'between',
'bar3dpyramidpercentstacked': 'between',
'bar3dcylinderclustered': 'between',
'bar3dcylinderstacked': 'between',
'bar3dcylinderpercentstacked': 'between',
'col': 'between',
'colstacked': 'between',
'colpercentstacked': 'between',
'col3d': 'between',
'col3dclustered': 'between',
'col3dstacked': 'between',
'col3dpercentstacked': 'between',
'col3dcone': 'between',
'col3dconeclustered': 'between',
'col3dconestacked': 'between',
'col3dconepercentstacked': 'between',
'col3dpyramid': 'between',
'col3dpyramidclustered': 'between',
'col3dpyramidstacked': 'between',
'col3dpyramidpercentstacked': 'between',
'col3dcylinder': 'between',
'col3dcylinderclustered': 'between',
'col3dcylinderstacked': 'between',
'col3dcylinderpercentstacked': 'between',
'doughnut': 'between',
'line': 'between',
'pie': 'between',
'pie3d': 'between',
'pieofpiechart': 'between',
'barofpiechart': 'between',
'radar': 'between',
'scatter': 'between',
'surface3d': 'midCat',
'wireframesurface3d': 'midCat',
'contour': 'midCat',
'wireframecontour': 'midCat',
'bubble': 'midCat',
'bubble3d': 'midCat');
return m[t];
End;
Function chartValAxNumFmtFormatCode(t);
Begin
m := array(
'area': 'General',
'areastacked': 'General',
'areapercentstacked': '0%',
'area3d': 'General',
'area3dstacked': 'General',
'area3dpercentstacked': '0%',
'bar': 'General',
'barstacked': 'General',
'barpercentstacked': '0%',
'bar3dclustered': 'General',
'bar3dstacked': 'General',
'bar3dpercentstacked': '0%',
'bar3dconeclustered': 'General',
'bar3dconestacked': 'General',
'bar3dconepercentstacked': '0%',
'bar3dpyramidclustered': 'General',
'bar3dpyramidstacked': 'General',
'bar3dpyramidpercentstacked': '0%',
'bar3dcylinderclustered': 'General',
'bar3dcylinderstacked': 'General',
'bar3dcylinderpercentstacked': '0%',
'col': 'General',
'colstacked': 'General',
'colpercentstacked': '0%',
'col3d': 'General',
'col3dclustered': 'General',
'col3dstacked': 'General',
'col3dpercentstacked': '0%',
'col3dcone': 'General',
'col3dconeclustered': 'General',
'col3dconestacked': 'General',
'col3dconepercentstacked': '0%',
'col3dpyramid': 'General',
'col3dpyramidclustered': 'General',
'col3dpyramidstacked': 'General',
'col3dpyramidpercentstacked': '0%',
'col3dcylinder': 'General',
'col3dcylinderclustered': 'General',
'col3dcylinderstacked': 'General',
'col3dcylinderpercentstacked': '0%',
'doughnut': 'General',
'line': 'General',
'pie': 'General',
'pie3d': 'General',
'pieofpiechart': 'General',
'barofpiechart': 'General',
'radar': 'General',
'scatter': 'General',
'surface3d': 'General',
'wireframesurface3d': 'General',
'contour': 'General',
'wireframecontour': 'General',
'bubble': 'General',
'bubble3d': 'General');
return m[t];
End;
Function drawPlotAreaTxPr(TxPr);
Begin
TxPr.BodyPr.Rot := -60000000;
TxPr.BodyPr.SpcFirstLastPara := true;
TxPr.BodyPr.VertOverflow := 'ellipsis';
TxPr.BodyPr.Vert := 'horz';
TxPr.BodyPr.Wrap := 'square';
TxPr.BodyPr.Anchor := 'ctr';
TxPr.BodyPr.AnchorCtr := true;
TxPr.P.PPr.DefRPr.Sz := 900;
TxPr.P.PPr.DefRPr.Bold := false;
TxPr.P.PPr.DefRPr.Italic := false;
TxPr.P.PPr.DefRPr.U := 'none';
TxPr.P.PPr.DefRPr.Strike := 'noStrike';
TxPr.P.PPr.DefRPr.Kern := 1200;
TxPr.P.PPr.DefRPr.Baseline := 0;
TxPr.P.PPr.DefRPr.SolidFill.SchemeClr.Val := 'tx1';
TxPr.P.PPr.DefRPr.SolidFill.SchemeClr.LumMod := 15000;
TxPr.P.PPr.DefRPr.SolidFill.SchemeClr.LumOff := 85000;
TxPr.P.PPr.DefRPr.Latin.Typeface := '+mn-lt';
TxPr.P.PPr.DefRPr.Ea.Typeface := '+mn-ea';
TxPr.P.PPr.DefRPr.Cs.Typeface := '+mn-cs';
TxPr.P.EndParaRPr.Lang := 'en-US';
End;
Function drawPlotAreaSpPr(SpPr);
Begin
SpPr.Ln.W := 9525;
SpPr.Ln.Cap := 'flat';
SpPr.Ln.Cmpd := 'sng';
SpPr.Ln.Algn := 'ctr';
SpPr.Ln.SolidFill.SchemeClr.Val := 'tx1';
SpPr.Ln.SolidFill.SchemeClr.LumMod := 15000;
SpPr.Ln.SolidFill.SchemeClr.LumOff := 85000;
End;
Function setChartSer(o);
Begin
SerArr := array();
for i:=0 to length(Series)-1 do Begin
ser := TOfficeObj('TSer');
SerArr union= array(('name':'c:ser','obj':ser,'attrEx':'','nodeType':'','attrName':''));
ser.IDx := i + Ord;
ser.Ord := i + Ord;
setTx(ser.Tx.StrRef, Series[i]['Name'], i);
setSpPr(ser.SpPr, i);
setMarker(ser.Marker, i);
setDpt(ser, i);
//setDLbls(ser.DLbls);
//ser.Dlbls.Del := 1;
//ser.InvertIfNegative := false;
setCat(ser.Cat, i);
setVal(ser.Val, i);
setXVal(ser.XVal, i);
setYVal(ser.YVal, i);
setBubbleSize(ser.BubbleSize, i);
setBubble3D(ser, i);
End;
o.chart.Ser := SerArr;
End;
Function _setExcelCellVal(cell, v);
Begin
//v is utf8
if ifObj(Excel) then Begin
Excel.SetCellValue('Sheet1', cell, class(TSXml).Utf8ToCurCodePage(v));
End;
End;
Function setTx(strRef, name, i);
Begin
if not IsWord_ then Begin
strRef.F := name;
return;
End;
[err, col] := ColumnNumberToName(i + 2);
strRef.F := 'Sheet1!$' $ col $ '$1';
strRef.strCache.ptCount := 1;
strRef.strCache.pt.IDx := 0;
strRef.strCache.pt.V := name;
_setExcelCellVal(col $ '1', name);
End;
Function setBubble3D(ser, i);
Begin
if Type <> 'bubble3d' then return;
ser.Bubble3D := true;
End;
Function setBubbleSize(BubbleSize, i);
Begin
if not (Type in array('bubble', 'bubble3d')) then return;
_setVal(BubbleSize, i);
End;
Function setYVal(Val, i);
Begin
if not (Type in array('scatter', 'bubble', 'bubble3d')) then return;
_setVal(Val, i);
End;
Function setXVal(xVal, i);
Begin
if not (Type in array('scatter')) then return;
_setCat(xVal, i);
End;
Function setVal(Val, ind);
Begin
if Type in array('scatter', 'bubble', 'bubble3d') then return;
_setVal(Val, ind);
End;
Function _setVal(Val, ind);
Begin
data := Series[ind]['Values'];
if ifstring(data) then
Val.NumRef.F := data; //excel图表Sheet1!$C$2:$C$6
else if istable(data) then Begin //word 图表
cnt := length(data);
//[err, axis] := ColumnNumberToName(2 * ind + 2);
[err, axis] := ColumnNumberToName(ind + 2);
Val.NumRef.F := format('Sheet1!$%s$2:$%s$%d', axis, axis, cnt+1);
Val.NumRef.NumCache.PtCount := cnt;
Val.NumRef.NumCache.formatCode := 'General';
for i:=0 to cnt-1 do Begin
Tpt := TOfficeObj('Tpt');
Tpt.IDx := i;
Tpt.V := data[i];
//[err,cell] := CoordinatesToCellName(2*ind+2, i+2);
[err,cell] := CoordinatesToCellName(ind+2, i+2);
_setExcelCellVal(cell, data[i]);
Val.NumRef.NumCache.NewChildNode( array("field":"", "name":"c:pt", "obj":Tpt, "attrEx":"", "nodeType":"") );
End;
End;
End;
Function setCat(Cat, ind);
Begin
if Type in array('scatter', 'bubble', 'bubble3d') then return;
_setCat(Cat, ind);
End;
Function _setCat(Cat, ind);
Begin
Categories := Series[ind]['Categories'];
if ifstring(Categories) then
cat.StrRef.F := Categories; //excel图表Sheet1!$A$2:$A$6
else if istable(Categories) then Begin //word 图表
cnt := length(Categories);
//[err, axis] := ColumnNumberToName(2 * ind + 1);
cat.StrRef.F := format('Sheet1!$A$2:$A$%d', cnt+1);
cat.StrRef.StrCache.PtCount := cnt;
for i:=0 to cnt-1 do Begin
Tpt := TOfficeObj('Tpt');
Tpt.IDx := i;
Tpt.V := Categories[i];
[err,cell] := CoordinatesToCellName(2*ind+1, i+2);
if ind = 0 then
_setExcelCellVal(cell, Tpt.V);
cat.StrRef.StrCache.NewChildNode( array("field":"", "name":"c:pt", "obj":Tpt, "attrEx":"", "nodeType":"") );
End;
End;
End;
Function setDLbls(DLbls);
Begin
if Type in array('scatter','surface3d', 'wireframesurface3d', 'contour', 'wireframecontour', 'bubble', 'bubble3d') then
return;
DLbls.ShowLegendKey := ShowLegendKey;
DLbls.ShowVal := ShowVal;
DLbls.ShowCatName := ShowCatName;
DLbls.ShowSerName := ShowSerName;
DLbls.ShowBubbleSize := ShowBubbleSize;
DLbls.ShowPercent := ShowPercent;
DLbls.ShowLeaderLines := ShowLeaderLines;
End;
Function setDpt(o, ind);
Begin
if not (Type in array('pie','pie3d')) then return;
data := Series[ind]['Values'];
if ifstring(data) then Begin
o.Dpt.IDx := 0;
o.Dpt.Bubble3D := false;
setPieSppr(o.Dpt.Sppr);
End
else if istable(data) then Begin
cnt := length(data);
r := array();
for i:=0 to cnt-1 do Begin
dpt := TOfficeObj('TDpt');
dpt.IDx := i;
dpt.Bubble3D := false;
if i=0 then
setPieSppr(dpt.sPpr);
r[length(r)] := array('name':'c:dPt','obj':dpt,'attrEx':'','nodeType':'','attrName':'');
End;
o.DptEx := r;
End;
End;
Function setPieSppr(sPpr);
Begin
SpPr.SolidFill.SchemeClr.Val := 'accent1';
SpPr.Ln.W := 25400;
SpPr.Ln.Cap := 'rnd';
SpPr.Ln.SolidFill.SchemeClr.Val := 'lt1';
SpPr.Sp3D.ContourW := 25400;
SpPr.Sp3D.ContourClr.SchemeClr.Val := 'lt1';
End;
Function setMarker(Marker, i);
Begin
if not (Type in array('scatter', 'line')) then return;
if Type = 'scatter' then
Marker.Symbol := 'circle';
Marker.Size := 5;
if ifstring(Series[i]['Symbol']) then
Marker.Symbol := Series[i]['Symbol'];
if ifint(Series[i]['Size']) then
Marker.Size := Series[i]['Size'];
if i < 6 then Begin
marker.SpPr.SolidFill.SchemeClr.Val := 'accent' $ (i + 1);
Marker.SpPr.Ln.W := 9252;
Marker.SpPr.Ln.SolidFill.SchemeClr.Val := 'accent' $ (i + 1);
End;
End;
Function setSppr(SpPr, i);
Begin
if Type = 'line' then Begin
SpPr.Ln.algn := 'ctr';
SpPr.Ln.cmpd := 'sng';
SpPr.Ln.cap := 'rnd';
SpPr.Ln.W := 8000;
//SpPr.Ln.NoFill := true;
SpPr.Ln.prstDash := 'solid';
SpPr.Ln.round := true;
SpPr.Ln.SolidFill.SchemeClr.Val := 'accent' $ ((Ord+i)%6+1);
return;
End;
if Type = 'scatter' then Begin
w := Series[i]['LineWidth'];
SpPr.Ln.W := 0.25 > w || w > 999 ? 25400 : 12700 * w;
SpPr.Ln.Cap := 'rnd';
SpPr.Ln.SolidFill.SchemeClr.Val := 'accent' $ ((Ord+i)%6+1);
return;
End;
End;
Function getSharp(t);
Begin
m := array(
'bar3dconeclustered': 'cone',
'bar3dconestacked': 'cone',
'bar3dconepercentstacked': 'cone',
'bar3dpyramidclustered': 'pyramid',
'bar3dpyramidstacked': 'pyramid',
'bar3dpyramidpercentstacked': 'pyramid',
'bar3dcylinderclustered': 'cylinder',
'bar3dcylinderstacked': 'cylinder',
'bar3dcylinderpercentstacked': 'cylinder',
'col3dcone': 'cone',
'col3dconeclustered': 'cone',
'col3dconestacked': 'cone',
'col3dconepercentstacked': 'cone',
'col3dpyramid': 'pyramid',
'col3dpyramidclustered': 'pyramid',
'col3dpyramidstacked': 'pyramid',
'col3dpyramidpercentstacked': 'pyramid',
'col3dcylinder': 'cylinder',
'col3dcylinderclustered': 'cylinder',
'col3dcylinderstacked': 'cylinder',
'col3dcylinderpercentstacked': 'cylinder');
return m[t];
End;
Function getChartName(t);
Begin
m := array(
'area': 'areaChart',
'areastacked': 'areaChart',
'areapercentstacked': 'areaChart',
'area3d': 'area3DChart',
'area3dstacked': 'area3DChart',
'area3dpercentstacked': 'area3DChart',
'bar': 'barChart',
'barstacked': 'barChart',
'barpercentstacked': 'barChart',
'bar3dclustered': 'bar3DChart',
'bar3dstacked': 'bar3DChart',
'bar3dpercentstacked': 'bar3DChart',
'bar3dconeclustered': 'bar3DChart',
'bar3dconestacked': 'bar3DChart',
'bar3dconepercentstacked': 'bar3DChart',
'bar3dpyramidclustered': 'bar3DChart',
'bar3dpyramidstacked': 'bar3DChart',
'bar3dpyramidpercentstacked': 'bar3DChart',
'bar3dcylinderclustered': 'bar3DChart',
'bar3dcylinderstacked': 'bar3DChart',
'bar3dcylinderpercentstacked': 'bar3DChart',
'col': 'barChart',
'colstacked': 'barChart',
'colpercentstacked': 'barChart',
'col3d': 'bar3DChart',
'col3dclustered': 'bar3DChart',
'col3dstacked': 'bar3DChart',
'col3dpercentstacked': 'bar3DChart',
'col3dcone': 'bar3DChart',
'col3dconeclustered': 'bar3DChart',
'col3dconestacked': 'bar3DChart',
'col3dconepercentstacked': 'bar3DChart',
'col3dpyramid': 'bar3DChart',
'col3dpyramidclustered': 'bar3DChart',
'col3dpyramidstacked': 'bar3DChart',
'col3dpyramidpercentstacked': 'bar3DChart',
'col3dcylinder': 'bar3DChart',
'col3dcylinderclustered': 'bar3DChart',
'col3dcylinderstacked': 'bar3DChart',
'col3dcylinderpercentstacked': 'bar3DChart',
'bubble': 'bubbleChart',
'bubble3d': 'bubbleChart');
return 'c:' $ m[t];
End;
Function getVaryColors(t);
Begin
m := array(
'barstacked': 100,
'barpercentstacked': 100,
'colstacked': 100,
'colpercentstacked': 100
);
return m[t];
End;
Function getGrouping(t);
Begin
m := array(
'area': 'standard',
'areastacked': 'stacked',
'areapercentstacked': 'percentStacked',
'area3d': 'standard',
'area3dstacked': 'stacked',
'area3dpercentstacked': 'percentStacked',
'bar': 'clustered',
'barstacked': 'stacked',
'barpercentstacked': 'percentStacked',
'bar3dclustered': 'clustered',
'bar3dstacked': 'stacked',
'bar3dpercentstacked': 'percentStacked',
'bar3dconeclustered': 'clustered',
'bar3dconestacked': 'stacked',
'bar3dconepercentstacked': 'percentStacked',
'bar3dpyramidclustered': 'clustered',
'bar3dpyramidstacked': 'stacked',
'bar3dpyramidpercentstacked': 'percentStacked',
'bar3dcylinderclustered': 'clustered',
'bar3dcylinderstacked': 'stacked',
'bar3dcylinderpercentstacked': 'percentStacked',
'col': 'clustered',
'colstacked': 'stacked',
'colpercentstacked': 'percentStacked',
'col3d': 'standard',
'col3dclustered': 'clustered',
'col3dstacked': 'stacked',
'col3dpercentstacked': 'percentStacked',
'col3dcone': 'standard',
'col3dconeclustered': 'clustered',
'col3dconestacked': 'stacked',
'col3dconepercentstacked': 'percentStacked',
'col3dpyramid': 'standard',
'col3dpyramidclustered': 'clustered',
'col3dpyramidstacked': 'stacked',
'col3dpyramidpercentstacked': 'percentStacked',
'col3dcylinder': 'standard',
'col3dcylinderclustered': 'clustered',
'col3dcylinderstacked': 'stacked',
'col3dcylinderpercentstacked': 'percentStacked',
'line': 'standard');
return m[t];
End;
Function getBarDir(t);
Begin
m := array(
'bar': 'bar',
'barstacked': 'bar',
'barpercentstacked': 'bar',
'bar3dclustered': 'bar',
'bar3dstacked': 'bar',
'bar3dpercentstacked': 'bar',
'bar3dconeclustered': 'bar',
'bar3dconestacked': 'bar',
'bar3dconepercentstacked': 'bar',
'bar3dpyramidclustered': 'bar',
'bar3dpyramidstacked': 'bar',
'bar3dpyramidpercentstacked': 'bar',
'bar3dcylinderclustered': 'bar',
'bar3dcylinderstacked': 'bar',
'bar3dcylinderpercentstacked': 'bar',
'col': 'col',
'colstacked': 'col',
'colpercentstacked': 'col',
'col3d': 'col',
'col3dclustered': 'col',
'col3dstacked': 'col',
'col3dpercentstacked': 'col',
'col3dcone': 'col',
'col3dconestacked': 'col',
'col3dconeclustered': 'col',
'col3dconepercentstacked': 'col',
'col3dpyramid': 'col',
'col3dpyramidclustered': 'col',
'col3dpyramidstacked': 'col',
'col3dpyramidpercentstacked': 'col',
'col3dcylinder': 'col',
'col3dcylinderclustered': 'col',
'col3dcylinderstacked': 'col',
'col3dcylinderpercentstacked': 'col',
'line': 'standard');
return m[t];
End;
isWord_;
End;
Type TPageLine = Class
Function Create(w);
Begin
Width := w;
Init();
End;
Function Init();
Begin
MaxLineHeight := 0;
CurrentLine := 0;
txt_ := '';
End;
Function Add(ch, rowHeight, rPr);
Begin
newLine := false;
txt := txt_;
[charW, cnt] := _getCharWidth(ch, rPr);
if CurrentLine + charW > Width then Begin
mh := MaxLineHeight;
Init(); //新行
newLine := true;
End;
CurrentLine += charW;
if rowHeight > MaxLineHeight then
MaxLineHeight := rowHeight;
return array(newLine, mh, cnt, txt);
End;
Function _getCharWidth(ch, rPr);
Begin
iChar := ord(ch);
cnt := iChar > 127 ? 2 : 1;
ratio := cnt=1 ? 0.5 : 1;
if ifObj(rPr) then Begin
size := max(rPr.Size, rPr.szCs);
if size=0 then size := 21;
return array(size * 10 * ratio, cnt);
End;
return array(210 * ratio, cnt); //默认五号字
End;
Width:integer;
MaxLineHeight:integer;
CurrentLine:integer;
txt_:string;
End;
//页面设置
Type TSectPr = Class
Function Create(docx, node);
Begin
docx_ := docx;
PageNo := 1;
LinePos := 0;
PageHash := array();
ContentArr := array();
if ifObj(node) then
Init(node);
End;
Function Init(node);
Begin
pgSz := node.FirstChildElement('w:pgSz');
if ifObj(pgSz) then Begin
w := pgSz.GetAttribute('w:w');
h := pgSz.GetAttribute('w:h');
End;
pgMar := node.FirstChildElement('w:pgMar');
if ifObj(pgMar) then Begin
left := pgMar.GetAttribute('w:left');
right := pgMar.GetAttribute('w:right');
top := pgMar.GetAttribute('w:top');
bottom := pgMar.GetAttribute('w:bottom');
End;
PageWidth := Class(TSXml).SafeStrToIntDef(w, 11906)-Class(TSXml).SafeStrToIntDef(left,1800)-Class(TSXml).SafeStrToIntDef(right,1800);
PageHeight := Class(TSXml).SafeStrToIntDef(h, 16838)-Class(TSXml).SafeStrToIntDef(top,1440)-Class(TSXml).SafeStrToIntDef(bottom,1440);
docGrid := node.FirstChildElement('w:docGrid');
LinePitch := ifObj(docGrid) ? Class(TSXml).SafeStrToIntDef(docGrid.GetAttribute('w:linePitch'), 312) : 312;
PageLine := new TPageLine(PageWidth);
if istable(ContentArr) then Begin //计算当前章节页码
//w:p;w:tbl
for i:=0 to length(ContentArr)-1 do Begin
[startPage,PageNo,LinePos] := _CalcPage(ContentArr[i]['obj'], PageNo, LinePos);//计算段落、表格、文本框、图片、形状等的页面及大小
if ContentArr[i]['mark'] >= 0 then
PageHash[ ContentArr[i]['mark'] ] := startPage;//记录页面
End;
//下一章节
PageNo ++;
ContentArr := array();
LinePos := 0;
End;
End;
Function Append(p);
Begin
ContentArr[ length(ContentArr) ] := array('obj':p, 'mark':-1);
End;
Function Mark(ind);
Begin
if istable(ContentArr) then
ContentArr[ length(ContentArr)-1 ]['mark'] := ind;
End;
Function GetPageNo(ind);
Begin
if ifInt(PageHash[ind]) then
return PageHash[ind];
return PageNo;
End;
//计算页面
Function _CalcPage(obj, page, lpos, more);
Begin
startPage := page;
curPageNo := page;
curLinePos := lpos;
case obj.Name() of
'w:p':
[startPage, pgNo, line] := _CalcParagraphPage(obj, curPageNo, curLinePos, more);
'w:tbl':
[startPage, pgNo, line] := _CalcTablePage(obj, curPageNo, curLinePos);
End;
return array(startPage, pgNo, line);
End;
//段落
Function _CalcParagraphPage(p, page, lpos, more);
Begin
startPage := page;
curPageNo := page;
curLinePos := lpos;
height := 0;//单位1点=0.3527毫米=1/72英寸
ETU := 360045;//1cm单位
defaultLineHeight := LinePitch; //缺省行距
ParagraphLineHeight := LinePitch;
defaultPpr := docx_.StyleObject().defaultPpr_;//缺省段落
defaultRpr := docx_.StyleObject().defaultRpr_;//缺省字体
pPr := Class(TSXml).ReadPprFormat(p.node_);
//存在段落样式
StyleId := p.pPr.Value('StyleId');
if StyleId then Begin
oStyle := docx_.StyleObject().GetStyleById(StyleId);
if ifObj(oStyle) then Begin
stylePpr := oStyle.ReadPprFormat(); //读段落属性缓存到StyleObject中
if not ifObj(pPr) then Begin
pPr := stylePpr;
End
else
Class(TSXml).CopyPprFormat(pPr, stylePpr);
//Class(TSXml).CopyPprFormat(pPr, defaultPpr);
defaultRpr := oStyle.ReadRprFormat(); //读段落字体属性缓存到StyleObject中
End;
End
else if ifObj(defaultPpr) then Begin //缺省样式
if not ifObj(pPr) then Begin
pPr := defaultPpr;
End
else
Class(TSXml).CopyPprFormat(pPr, defaultPpr);
End;
LineRatio := 1.0;
if ifObj(pPr) then Begin
if pPr.LineSpacingRule = 'exact' and pPr.LineSpacing then //固定行距
defaultLineHeight := pPr.LineSpacing;
else if pPr.LineSpacing then Begin
LineRatio := pPr.LineSpacing / 240;
//LineRatio := 1.0;
defaultLineHeight := LineRatio * defaultLineHeight; //多倍行距
End;
ParagraphLineHeight := _GetHeightRatio(pPr, pPr.rPr, LineRatio) * defaultLineHeight; //缺省段落高度(字体)
End;
//段前
before := (ifObj(pPr)) ? pPr.SpaceBefore : 0;
after := ifObj(pPr) ? pPr.SpaceAfter : 0;
//段中
runs := p.GetRuns();
for i:=0 to length(runs)-1 do Begin
run := runs[i];
rPr := Class(TSXml).ReadRprFormat(run.node_);
if not ifObj(rPr) then
rPr := defaultRpr;
else
Class(TSXml).CopyRprFormat(rPr, defaultRpr);
//_dumpRpr(rpr);
RunLineHeight := _GetHeightRatio(pPr, rPr, LineRatio) * defaultLineHeight; //缺省段落高度
pic := run.node_.FirstChildElement('w:drawing/wp:inline/wp:extent');//图片
if not ifObj(pic) then
pic := run.node_.FirstChildElement('mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:extent');//文本框
if ifObj(pic) then Begin
cy := Class(TSXml).SafeStrToIntDef(pic.GetAttribute('cy'), LinePitch);
height := cy / ETU / 0.0325;
_addLine(startPage, curPageNo, curLinePos, height, before, linesCnt ? false : true, txt); //加入一行
linesCnt ++;
continue;
End
node := run.node_.FirstChildElement();
while ifObj(node) do Begin
name := node.GetName();
if name = 'w:br' then Begin
_addLine(startPage, curPageNo, curLinePos, (PageLine.MaxLineHeight ? PageLine.MaxLineHeight : RunLineHeight) + (linesCnt ? 0 : more), 0, linesCnt ? false : true, ''); //加入一行
PageLine.Init();
linesCnt ++;
End
else if name = 'w:t' then Begin
txt := node.GetText();
txtLen := length(txt);
n := 0;
while n < txtLen do Begin
if ifObj(pPr) and PageLine.CurrentLine = 0 then Begin //缩进、悬挂
PageLine.CurrentLine += _getHanging(linesCnt, pPr);
End;
[newLine, LineHeight, cnt, t] := PageLine.Add(txt[n+1], RunLineHeight, rPr);
PageLine.txt_ += txt[n+1:n+cnt];
n += cnt;
if newLine then Begin
_addLine(startPage, curPageNo, curLinePos, LineHeight + (linesCnt ? 0 : more), before, linesCnt ? false : true, t); //加入一行
if ifObj(pPr) then
PageLine.CurrentLine += _getHanging(linesCnt+1, pPr);
linesCnt ++;
End;
End;
End;
node := node.NextElement();
End;
End;
if linesCnt = 0 and PageLine.CurrentLine = 0 then Begin //空行
_addLine(startPage, curPageNo, curLinePos, ParagraphLineHeight + more, 0, true, ''); //加入一行
End
else if PageLine.CurrentLine then Begin
_addLine(startPage, curPageNo, curLinePos, PageLine.MaxLineHeight, before, linesCnt ? false : true, PageLine.txt_); //加入一行
PageLine.Init();
linesCnt ++;
End
else Begin
PageLine.Init();
End;
//段后
//_dumpPpr(pPr);
//println('Begin Orer=curLinePos={}',curLinePos);
curLinePos += after;
//println('End Orer=curLinePos={}\n\n\n\n',curLinePos);
return array(startPage, curPageNo, curLinePos);
End;
//表格
Function _CalcTablePage(tbl, page, lpos);
Begin
startPage := page;
curPageNo := page;
curLinePos := lpos;
topH := Class(TSXml).SafeStrToIntDef(tbl.tblPr.Borders.Top.Value('Val'), 4); //缺省0.5磅,一磅=20点
bottomH := Class(TSXml).SafeStrToIntDef(tbl.tblPr.Borders.bottom.Value('Val'), 4); //缺省0.5磅
insideVH := Class(TSXml).SafeStrToIntDef(tbl.tblPr.Borders.insideV.Value('Val'), 4); //缺省0.5磅
iRow := 0;
trNode := tbl.node_.FirstChildElement('w:tr');
while ifObj(trNode) do Begin
maxPageNo := curPageNo;
maxLinePos := curLinePos;
tr := new TwTr(nil, 'w:tr');
tr.RootObj := trNode;
vh := Class(TSXml).SafeStrToIntDef(tr.tblPrEx.Borders.insideV.Value('Val'), insideVH); //行的上边框
tcNode := trNode.FirstChildElement('w:tc');
while ifObj(tcNode) do Begin //计算每一个单元格占用页面
tcPageNo := curPageNo;
tcLinePos := curLinePos;
iCol := 0;
pNode := tcNode.FirstChildElement();
while ifObj(pNode) do Begin
name := pNode.GetName();
obj := _getDocObject(pNode, name);
if ifObj(obj) then Begin
[tcStartPage,tcPageNo,tcLinePos] := _CalcPage(ContentArr[i]['obj'], tcPageNo, tcLinePos, iCol = 0 ? (iRow = 0 ? topH * 2.5 : vh * 2.5) : 0);
iCol ++;
End;
pNode := pNode.NextElement();
End;
if iCol = 0 then Begin //空单元格
_addLine(tcStartPage, tcPageNo, tcLinePos, (iRow = 0 ? topH * 2.5 : vh * 2.5) + LinePitch, 0, false, '');
End;
if maxPageNo < tcPageNo then Begin
maxPageNo := tcPageNo;
maxLinePos := tcLinePos;
End
else if maxPageNo = tcPageNo and maxLinePos < tcLinePos then Begin
maxLinePos := tcLinePos;
End;
tcNode := tcNode.NextElement('w:tc');
End;
iRow++;
trNode := trNode.NextElement('w:tr');
curPageNo := maxPageNo;
curLinePos := maxLinePos;
End;
//底边框
_addLine(startPage, curPageNo, curLinePos, bottomH * 2.5, 0, false, '');
return array(startPage, curPageNo, curLinePos);
End;
Function _addLine(startPage, curPageNo, curLinePos, height, before, firstLine, t);
Begin
//println('换行curLinePos={},height={}, before={}, txt={}',curLinePos, height, before, t);
if curLinePos + height > PageHeight then Begin //放不下,换页
curPageNo++;
curLinePos := height;
//println('换页curLinePos={},txt={}',curLinePos, t);
End
else
curLinePos += height + (curLinePos = 0 ? 0 : before);
if firstLine then
startPage := curPageNo;
End;
Function _GetHeightRatio(pPr, rPr, LineRatio);
Begin
if lineRule = 'exact' then //固定行距
return 1.0;
if not ifObj(rPr) then
return 1.0;
return _Font2LineHeight(rPr, LineRatio); //字体大小对应的行距(倍数)
End;
Function _Font2LineHeight(rPr, LineRatio);
Begin
size := max(ifnil(rPr.Size) ? 0 : rPr.Size, ifnil(rPr.szCs) ? 0 : rPr.szCs);
if size = 0 then size := 21;//缺省五号字
if rPr.rFont.hint in array('eastAsia', 'zh-CN') or rPr.rFont.eastAsia <> '' then Begin
return ceil(size*10/(LinePitch*LineRatio-200/3));
End;
return ceil(size*10/(LinePitch*LineRatio-38));
End;
docx_;
PageWidth:integer;
PageHeight:integer;
LinePitch:integer; //行距
PageNo;
LinePos;
ContentArr;
PageHash;
PageLine;
End;
//w:body
Type TDocumentBody = Class(DocObject)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
name_ := 'w:body';
InitNode(node);
End;
Function InitNode(node);
Begin
node_ := node;
//设置最后一个段落
_setLastParagraph();
End;
Function _setLastParagraph();
Begin
lastParagraph_ := nil;
if ifObj(node_) then Begin
last := node_.LastChild();
while ifObj(last) do Begin
name := last.GetName();
if name in array('w:p', 'w:tbl') then Begin
lastParagraph_ := last;
break;
End;
last := last.Prev();
End;
End;
End;
///返回文档中全部对象列表(TParagraph、TTable等)
Function Parts();
Begin
return getDocumentObjects(node_, '');
End;
///word文档所有段落
///返回TParagraph对象数组
Function Paragraphs();
Begin
parts := getDocumentObjects(node_, 'w:p');
r := array();
for i:=0 to length(parts)-1 do Begin
r[i] := new TParagraph(parts[i].node_);
End;
return r;
End;
///word最后一个段落
///返回TParagraph对象
Function LastParagraph();
Begin
node := node_.LastChildElement('w:p');
return ifObj(node) ? new TParagraph(node) : nil;
End;
///添加新段落
///paragraph: TParagraph对象
///posOpt: 段落位置0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加段落
///[styleId]: int 样式ID
///返回TParagraph对象
Function AddParagraph(paragraph, posOpt, styleId);
Begin
if ifString(styleId) and styleId <> '' then Begin
paragraph.Format.StyleId := styleId;
End;
addPart(posOpt, paragraph);
p := new TParagraph(paragraph.node_);
//复制段落字体属性
p.CopyRunFormat(false, nil);
_set_lastParagraph_(posOpt, p.node_);//设置最后一个段落
return p;
End;
///复制w:p节点内容
///paragraphObj: TParagraph对象
///posOpt: 段落位置0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加段落
///返回TParagraph对象
Function CopyWp(paragraphObj, posOpt);
Begin
addPart(posOpt, paragraphObj, true);
p := new TParagraph(paragraphObj.node_);
//复制段落字体属性
p.CopyRunFormat(false, nil);
_set_lastParagraph_(posOpt, p.node_);//设置最后一个段落
return p;
End;
///复制w:tbl节点内容
///ttable: TTable对象
///posOpt: 段落位置0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加段落
///返回TTable对象
Function CopyWtbl(table, posOpt);
Begin
addPart(posOpt, table, true);
p := new TTable(table.node_);
_set_lastParagraph_(posOpt, p.node_);
return p;
End;
///删除指定段落
///posOpt: 段落位置0 在DOCX文件开头-1 文件尾N 第N段posOpt段落
///返回true
Function DelParagraph(posOpt);
Begin
node := findNode(posOpt, false);
if ifInt(node) then Begin
if node = 0 then
node := node_.FirstChildElement('w:p');
else if node = -1 then
node := lastParagraph_;
End;
if not ifObj(node) then
return false;
reset_position := false;
if ifObj(TOfficeApi().GetCurrentPosition()) and node.Eq(TOfficeApi().GetCurrentPosition()) then
reset_position := true;
next := node.NextElement('w:p');
node_.DeleteChild(node);
if not ifObj(next) then
_setLastParagraph();
if reset_position then
TOfficeApi().Set('CurrentPosition', lastParagraph_);
return true;
End;
///添加标题
///title: string
///posOpt: 段落位置0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加段落
///level: int 标题级别0-9
///返回TParagraph对象
Function AddHeading(title, posOpt, styleId);
Begin
paragraph := new TParagraph();
paragraph.Run.SetText( title );
if ifObj(document_) then Begin
id := document_.GetBookMarkID();
paragraph.MarkStart.Name := '_Toc' $ id;
paragraph.MarkStart.ID := id;
paragraph.MarkEnd.ID := id;
End;
return AddParagraph(paragraph, posOpt, styleId);
End;
///插入分页符
///posOpt: 段落位置0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加段落
///返回TParagraph对象
Function AddBreak(posOpt, tp);
Begin
paragraph := new TParagraph();
if tp <> '' then
paragraph.Run.Br.Type := tp;
return AddParagraph(paragraph, posOpt);
End;
//word文档所有内容的文本串数组包含段落信息
//返回array(("pNode":nodeObj, "pIndex":p, "rNode":nodeObj, "rIndex":r))
Function TextArray();override;
Begin
r := array();
ps := getDocumentObjects(node_, 'w:p');
for i:=0 to length(ps)-1 do Begin
pArr := ps[i].TextArray();
if length(pArr) then Begin
update pArr set ['pIndex'] = i end;
r union= pArr;
End
else Begin
r[ length(r) ] := array('pNode':ps[i].node_, 'pIndex':i, 'rNode':nil, 'rIndex':-1);//空段落
End;
End;
return r;
End;
///word文档所有表格个数
///返回int
Function TablesCount();
Begin
t := getDocumentObjects(node_, 'w:tbl');
return length(t);
End;
///word文档所有表格
///返回TTable对象数组
Function Tables();
Begin
return getDocumentObjects(node_, 'w:tbl');
End;
///word文档指定表格
///n: int 第n个表格
///返回TTable对象
Function GetTable(i);
Begin
t := getDocumentObjects(node_, 'w:tbl');
if i < 0 or i >= length(t) then return 0;
tbl := new TTable(t[i].node_);
return tbl;
End;
///插入数据表
///tbl: TTable对象
///[posOpt: 段落位置]0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加表格
Function InsertTable(tbl, posOpt, customCell);
Begin
addPart(posOpt, tbl);
TOfficeApi().Set('CurrentTable', tbl.node_);
tblBorders := class(TSXml).GetNode(tbl.node_, 'w:tblPr/w:tblBorders');
tblCellMar := class(TSXml).GetNode(tbl.node_, 'w:tblPr/w:tblCellMar');
if ifObj(tblBorders) or ifObj(tblCellMar) then Begin
borders := ifObj(tblBorders) ? tblBorders.Marshal() : nil;
cellmar := ifObj(tblCellMar) ? tblCellMar.Marshal() : nil;
End;
defaultParagraph := tbl.Paragraph;
if not ifObj(defaultParagraph) then Begin
defaultParagraph := new TParagraph();
defaultParagraph.pPr.rPr.Lang := 'en-US';
defaultParagraph.pPr.rPr.eastAsia := 'zh-CN';
defaultParagraph.Run.rPr.Lang := 'en-US';
defaultParagraph.Run.rPr.eastAsia := 'zh-CN';
End;
defaultpPr := defaultParagraph.pPr.Marshal();
defaultrPr := defaultParagraph.pPr.rPr.Marshal();
for i:=0 to length(tbl.Data_)-1 do Begin
trNode := tbl.node_.InsertEndChild('element', 'w:tr');
trNode.InsertEndChild('element', 'w:trPr');
multiLine := false;
for j:=0 to tbl.colCount_-1 do Begin
if ifstring(tbl.Data_[i, j]) and Pos('\n', tbl.Data_[i, j]) then
multiLine := true;
//对象太多的话,对象效率奇慢,优化掉(性能可能相差50倍)
if 0 then Begin
tc := new TCell();
tc.TcPr.Width := tbl.TblGrid.GridCol[j]['obj'].W;
tc.TcPr.Type := 'dxa';
tc.SetText(tbl.Data_[i, j]);
trNode.InsertEndChild(tc.Marshal());
continue;
End;
tcNode := trNode.InsertEndChild('element', 'w:tc');
if istable(customCell) and ifObj(customCell[i, j, 0]) then
begin
tcNode.InsertEndChild(customCell[i, j, 0].Marshal());
end
else begin
tcPrNode := tcNode.InsertEndChild('element', 'w:tcPr');
tcWNode := tcPrNode.InsertEndChild('element', 'w:tcW');
tcWNode.SetAttribute('w:w', tbl.TblGrid.GridCol[j]['obj'].W);
tcWNode.SetAttribute('w:type', 'dxa');
end
if multiLine then Begin
defaultParagraph.node_ := nil;
defaultParagraph.Run.ClearText();
defaultParagraph.Run.SetText(tbl.Data_[i, j]);
tcNode.InsertEndChild(defaultParagraph.Marshal());
End
else Begin
pNode := tcNode.InsertEndChild('element', 'w:p');
if istable(customCell) and ifObj(customCell[i, j, 1]) then
pNode.InsertEndChild(customCell[i, j, 1].Marshal());
else
pNode.InsertEndChild(defaultpPr);
rNode := pNode.InsertEndChild('element', 'w:r');
if istable(customCell) and ifObj(customCell[i, j, 2]) then
rNode.InsertEndChild(customCell[i, j, 2].Marshal());
else
rNode.InsertEndChild(defaultrPr);
tNode := rNode.InsertEndChild('element','w:t', class(TSXml).CurCodePageToUtf8(tbl.Data_[i, j]));
if _preserve(tbl.Data_[i, j]) then
tNode.SetAttribute('xml:space', 'preserve');
End;
(*
<w:tc>
<w:tcPr>
<w:tcW w:w="700" w:type="dxa"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:rPr>
<w:lang w:eastAsia="zh-CN" w:val="en-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:lang w:eastAsia="zh-CN" w:val="en-US"/>
</w:rPr>
<w:t>Index</w:t>
</w:r>
</w:p>
</w:tc>
*)
End;
//if ifObj(tblCellMar) then Begin
// c := class(TSXml).GetNode(trNode, 'w:tblPrEx/w:tblCellMar', 'first');
// class(TSXml).UpdateNode(c, cellmar[0]['attributes'], cellmar[0]['children']);
//End;
//if ifObj(tblBorders) then Begin
// b := class(TSXml).GetNode(trNode, 'w:tblPrEx/w:tblBorders', 'first');
// class(TSXml).UpdateNode(b, borders[0]['attributes'], borders[0]['children']);
//End;
End;
node_.Parent().SetAttribute('mc:Ignorable', 'w14 w15 wp14');
node_.Parent().SetAttribute('xmlns:w15', 'http://schemas.microsoft.com/office/word/2012/wordml');
_set_lastParagraph_(posOpt, tbl.node_);
p := new TTable(tbl.node_);
return p;
End;
///插入图片
///picture: TPicture对象
///[posOpt: 段落位置]0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加表格
///[docx]: 可选参数TSDocxFile对象在TTextBox、TCell中调用需要传入文档对象
Function AddPicture(picture, posOpt, docx);
Begin
if ifObj(docx) then Begin
zipfile_ := docx.Zip();
picture.Run.Drawing.WInline.ID := docx.GetDocPrId();
End;
if not ifBinary(picture.Image) or length(picture.Image)=0 then
raise 'Invalid Image Data.';
if not ifObj(zipfile_) then
raise 'no support';
image := new TSImage(picture.Image);
xml := zipfile_.Get('word/_rels/document.xml.rels');
files := sselect ['FileName'] from zipfile_.Files() where AnsiStartsText('word/media/image', ['FileName']) end;
for i:=0 to length(files)-1 do Begin
if zipfile_.Diff(files[i], picture.Image) = 0 then Begin
prefix := ReplaceStr(files[i], 'word/', '');
[maxRid, imageFile, rid] := class(TSXml).FindRelationshipRid(xml, prefix);
End;
End;
if rid = 0 then Begin
imageCnt := length(files) + 1;
imageFile := 'media/image' $ imageCnt $ '.' $ image.ExtFileName;
[rid, target] := class(TSXml).FindRelationshipRid(xml, '');
rid ++;
class(TSXml).AddRelationshipRid(xml, imageFile, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', 'rId' $ rid);
zipfile_.Add('word/' + imageFile, picture.Image);
contentXml := zipfile_.Get('[Content_Types].xml');
class(TSXml).AddDefaultContentType(contentXml, image.ExtFileName, 'image/' $ image.ExtFileName);
End;
[cx, cy] := picture.ScaledDimensions(image);//extent 元素通过其属性指定此对象的高度和宽度为 [cx,cy] ETU (英语公制单位)
//println('cx={},cy={},w={},h={}',cx,cy,image.px_width,image.px_height);
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.BlipFill.blip.Embed := 'rId' $ rid;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.BlipFill.Stretch.FillRect := 1;
picId := getPictureMaxId() + 1;
picture.Run.Drawing.WInline.Name := '图片 ' $ picId;
picture.Run.Drawing.WInline.Descr := class(TSXml).CurCodePageToUtf8(picture.Descr);
picture.Run.Drawing.WInline.cNvGraphicFramePr.xmlns := 'http://schemas.openxmlformats.org/drawingml/2006/main';
picture.Run.Drawing.WInline.cNvGraphicFramePr.noChangeAspect := 1;
picture.Run.Drawing.WInline.Graphic.xmlns := 'http://schemas.openxmlformats.org/drawingml/2006/main';
picture.Run.Drawing.WInline.Graphic.GraphicData.uri := 'http://schemas.openxmlformats.org/drawingml/2006/picture';
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.xmlns := 'http://schemas.openxmlformats.org/drawingml/2006/picture';
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.nvPicPr.CNvPr.ID := picture.Run.Drawing.WInline.ID;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.nvPicPr.CNvPr.Name := picture.Run.Drawing.WInline.Name;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.nvPicPr.CNvPr.Descr := picture.Run.Drawing.WInline.Descr;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.nvPicPr.cNvPicPr.NodeName := 'pic:cNvPicPr';
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.nvPicPr.cNvPicPr.PicLocks := 1;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr.PrstGeom.prst := 'rect';
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr.PrstGeom.avLst := true;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr.XFrm.Off.X := 0;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr.XFrm.Off.Y := 0;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr.XFrm.Ext.CX := cx;
picture.Run.Drawing.WInline.Graphic.GraphicData.Pic.spPr.XFrm.Ext.CY := cy;
picture.Run.Drawing.WInline.distR := 114300;
picture.Run.Drawing.WInline.distL := 114300;
picture.Run.Drawing.WInline.distB := 0;
picture.Run.Drawing.WInline.distT := 0;
picture.Run.Drawing.WInline.cy := cy;
picture.Run.Drawing.WInline.cx := cx;
//picture.Run.Drawing.WInline.r := 0;
//picture.Run.Drawing.WInline.b := 5080;
//picture.Run.Drawing.WInline.t := 0;
//picture.Run.Drawing.WInline.l := 0;
addPart(posOpt, picture);
p := new TPicture(picture.node_);
_set_lastParagraph_(posOpt, picture.node_);
picture.node_.InsertFirstChild('element', 'w:pPr');
TOfficeApi().Set('CurrentShape', picture.node_);
return p;
End;
///文档中全部的批注信息
///返回TDocComments对象
Function Comments();overload;
Begin
t := array();
[startCnt, endCnt, tCnt, index] := array(0, 0, 0, 0);
p := node_.FirstChildElement('w:p');
while ifObj(p) do Begin
child := p.FirstChildElement();
rIndex := 0;
while ifObj(child) do Begin
id := -1;
name := child.GetName();
if name = 'w:commentRangeStart' then Begin
startCnt ++;
id := strtoint(child.GetAttribute('w:id'));
t[ tCnt++ ] := array('pNode':p, 'rNode':child, 'Name':name, 'Start':startCnt, 'End':endCnt, 'ID':id, 'pIndex':index);
End
else if name = 'w:commentRangeEnd' then Begin
endCnt ++;
id := strtoint(child.GetAttribute('w:id'));
t[ tCnt++ ] := array('pNode':p, 'rNode':child, 'Name':name, 'Start':startCnt, 'End':endCnt, 'ID':id, 'pIndex':index);
End
else if name = 'w:r' and startCnt > endCnt then Begin
t[ tCnt++ ] := array('pNode':p, 'rNode':child, 'Name':name, 'Start':startCnt, 'End':endCnt, 'ID':-1, 'pIndex':index);
End;
child := child.NextElement();
End;
index ++;
p := p.NextElement('w:p');
End;
return new TDocComments(t);
End;
//返回TDocSection对象集合
Function Sections();overload;
Begin
index := 0;
r := array();
node := node_.FirstChildElement();
while ifObj(node) do Begin
name := node.GetName();
if name = 'w:sectPr' then Begin
section := new TDocSection(node, index++, zipfile_);
r[length(r)] := section;
End
else if name = 'w:p' then Begin
child := class(TSXml).GetNode(node, 'w:pPr/w:sectPr', false);
if ifObj(child) then Begin
section := new TDocSection(node, index++, zipfile_);
r[length(r)] := section;
End;
End;
node := node.NextElement();
End;
return r;
End;
//indexinteger 章节索引
//返回指定TDocSection对象
Function Sections(index);overload;
Begin
if index < 0 then Begin //返回文档最后一个章节(缺省章节)
node := node_.LastChild('w:sectPr');
if ifObj(node) then
return new TDocSection(node, -1, zipfile_);
return nil;
End;
arr := Sections();
if length(arr) >= index then
return nil;
return arr[index];
End;
//添加章节
//sectionTDocSection对象
//posOpt: 位置0 在DOCX文件开头-1 文件尾N 在第N段之后DocumentPart对象 在posOpt之后新添加章节
//返回TDocSection对象
Function AddSection(section, posOpt);overload;
Begin
section.zipfile_ := zipfile_;
p := new TParagraph();
p.pPr.NewChildNode( array("field":"", "name":"w:sectPr", "obj":section, "attrEx":"", "nodeType":"") );
p := AddParagraph(p, posOpt, '');//段落对象
sec := new TDocSection(p.node_, -2, zipfile_);
sec.NodeUri := 'w:pPr/w:sectPr';
return sec;
End;
Function ExecInnerTSL(docx);
Begin
//表格
t := array();
tslFuncCount := 0;
errArr := array();
tArr := Tables();
for i:=0 to length(tArr)-1 do Begin
col := tArr[i].Cols();
row := tArr[i].Rows();
for r:= 1 to row do Begin
for c:=1 to col do Begin
cell := tArr[i].Cell(r, c);
[err, cnt, err] := cell.ExecInnerTSL(docx);//递归
tslFuncCount += cnt;
errArr union= err;
End;
End;
End;
//文本框
ps := Paragraphs();
for i:=0 to length(ps)-1 do Begin
boxs := ps[i].TextBoxs();
for j:=0 to length(boxs)-1 do Begin
[err, cnt, err] := boxs[j].ExecInnerTSL(docx);//递归
if cnt then
boxs[j].Apply();
tslFuncCount += cnt;
errArr union= err;
End;
End;
//页脚、页眉
sArr := Sections();
tpArr := array('default','even','first');
for i:=0 to length(sArr)-1 do Begin
for k, name in tpArr do Begin
h := sArr[i].Header(name);
if ifObj(h) then Begin
[err, cnt, err] := h.ExecInnerTSL(docx);//递归
tslFuncCount += cnt;
errArr union= err;
End;
f := sArr[i].Footer(name);
if ifObj(f) then Begin
[err, cnt, err] := f.ExecInnerTSL(docx);//递归
tslFuncCount += cnt;
errArr union= err;
End;
End;
End;
[err, cnt, err] := ExecInnerTSLImpl(docx);
tslFuncCount += cnt;
errArr union= err;
return array(length(errArr), tslFuncCount, errArr);
End;
Function RunTslCode(code, err);
Begin
try
//println('run code=[{}]', code);
if code <> '' then
eval(&code);
except
err := ExceptObject.ErrInfo;
return false;
End;
return true;
End;
Function ExecInnerTSLImpl(docx);
Begin
tslFuncCount := 0;
errArr := array();
tslArr := array();
tArr := TextArray();
flag := '';
code := nil;
begParagraphIndex := -1;
begPos := 0;
begTxtLen := 0;
while i < length(tArr) do Begin
txt := '';
iStep := 1;
if ifObj(tArr[i]['rNode']) then Begin
run := new TRun(tArr[i]['rNode']);
txt := run.Text();
if class(TSXml).IsUtf8() then
txt := UTF8ToAnsi(txt);
End;
k := 1;
wz := 1;
txtLen := length(txt);
while k <= txtLen do Begin
c := txt[k];
case flag of
'':
if c = '[' then Begin
flag := '[';
begParagraphIndex := i;
begPos := wz;
begTxtLen := txtLen;
End;
'[':
if c = 'T' or c = 't' then
flag := '[T';
else
flag := '';
'[T':
if c = 'S' or c = 's' then
flag := '[TS';
else
flag := '';
'[TS':
if c = 'L' or c = 'l' then
flag := '[TSL';
else
flag := '';
'[TSL':
if c = ']' then Begin
flag := '[TSL]';
tslArr := tArr[begParagraphIndex:i,:];
code := '';
k++;
wz++;
continue;
End
else
flag := '';
'[TSL]':
if c = '[' then Begin
flag := '[TSL][';
endPos := 0;
End
'[TSL][':
if c = '/' then
flag := '[TSL][/';
else
flag := '[TSL]';
'[TSL][/':
if c = 'T' or c='t' then
flag := '[TSL][/T';
else
flag := '[TSL]';
'[TSL][/T':
if c = 'S' or c='s' then
flag := '[TSL][/TS';
else
flag := '[TSL]';
'[TSL][/TS':
if c = 'L' or c='l' then
flag := '[TSL][/TSL';
else
flag := '[TSL]';
'[TSL][/TSL':
if c = ']' then Begin
tslBegParagraphNode := tslArr[0]['pNode'];
tslEndParagraphNode := tArr[i]['pNode'];
ind := length(tslArr) - 1;
if tslArr[ind]['pIndex'] <> tArr[i]['pIndex'] or tslArr[ind]['rIndex'] <> tArr[i]['rIndex'] then Begin
ind ++;
tslArr[ind] := tArr[i];
End;
if begPos > 1 then Begin //函数前分割为新的w:r
prevRun := run._duplicate_r(tArr[begParagraphIndex]['rNode']);
run._adjust_r(tArr[begParagraphIndex]['rNode'], 0, begPos - 1);
tslArr[0]['rNode'] := prevRun;
End;
if k < txtLen then Begin //函数后面分割为新的w:r
oldNode := run.node_;
if begParagraphIndex = i and begPos > 1 then
oldNode := prevRun;
tArr[i]['rNode'] := run._duplicate_r(oldNode);
run._adjust_r(tArr[i]['rNode'], wz, txtLen);
iStep := 0;
End;
curRunNode := tslArr[0]['rNode'];
curRun := new TRun(curRunNode);
curRun.ClearText();
rmvPara := array();
for m := 1 to length(tslArr) - 1 do Begin
if ifObj(tslArr[m]['rNode']) then Begin
tslArr[m]['pNode'].DeleteChild(tslArr[m]['rNode']);
hasrNode := tslArr[m]['pNode'].FirstChildElement('w:r');
if not ifObj(hasrNode) then
rmvPara[ tslArr[m]['pIndex'] ] := tslArr[m]['pNode'];
End
else
rmvPara[ tslArr[m]['pIndex'] ] := tslArr[m]['pNode'];
End;
for index, pNode in rmvPara do Begin
pNode.Parent().DeleteChild(pNode);
End;
//run inner tsl
code := leftstr(code, lengthW(code) - 5 - endPos);
CodePage := TOfficeApi().Get('CodePage');
TOfficeApi().Set('Docx', docx);
TOfficeApi().Set('CurrentParagraph', tslBegParagraphNode);
TOfficeApi().Set('CurrentPosition', tslBegParagraphNode);
TOfficeApi().Set('CurrentRun', curRunNode);
TOfficeApi().Set('CodePage', 'gbk');
if not RunTslCode(code, err) then Begin
echo 'run code=',code,',err=', err, '\n';
errArr[ length(errArr) ] := array('code':code, 'err':err);
End;
tslFuncCount ++;
tNode := curRun.node_.FirstChildElement('w:t');
if not ifObj(tNode) then Begin //没有在外部插入文字
tslBegParagraphNode.DeleteChild(curRunNode);
//兼容WordTemplate函数不删除空段落TSL脚本段落
//hasrNode := tslBegParagraphNode.FirstChildElement('w:r');
//if not ifObj(hasrNode) then Begin//删除空段落
// tslBegParagraphNode.Parent().DeleteChild(tslBegParagraphNode);
// tslBegParagraphNode := nil;
//End;
End;
//段落炸裂
curPosotion := TOfficeApi().Get('CurrentPosition');
if i+iStep < length(tArr) and tArr[i+iStep]['pNode'] = tslEndParagraphNode and tslBegParagraphNode <> curPosotion then Begin
data := tslEndParagraphNode.Marshal();
NewParagraphNode := tslEndParagraphNode.Parent().InsertAfterChild(curPosotion, data[0]);//复制段落
rmvArr := array();
cnt := 0;
curLine := 0;
prevRNode := tArr[i+iStep]['rNode'].PrevElement('w:r');
while ifObj(prevRNode) do Begin
curLine ++;
prevRNode := prevRNode.PrevElement('w:r');
End;
rmvN := 0;
nextRNode := tArr[i+iStep]['rNode'];
while ifObj(nextRNode) do Begin
rmvArr[rmvN++] := nextRNode;
nextRNode := nextRNode.NextElement('w:r');
End;
rNode := NewParagraphNode.FirstChildElement('w:r');
nI := 0;
rIndex := 0;
while ifObj(rNode) do Begin
cnt ++;
if cnt <= curLine then Begin
rmvArr[rmvN++] := rNode;
End
else Begin
tArr[i+iStep+nI]['pNode'] := NewParagraphNode;
tArr[i+iStep+nI]['rNode'] := rNode;
tArr[i+iStep+nI]['rIndex'] := rIndex++;
nr := new TRun(tArr[i+iStep+nI]['rNode']);
nI ++;
End;
rNode := rNode.NextElement('w:r');
End;
//删除重复的run
for rmvN := 0 to length(rmvArr)-1 do begin
rmvArr[rmvN].Parent().DeleteChild(rmvArr[rmvN]);
End;
End;
TOfficeApi().Set('CodePage', CodePage);
flag := '';
code := nil;
tslArr := array();
break;
End
else
flag := '[TSL]';
End;
if Ord(c) > 127 then Begin
if ifstring(code) then
code += txt[k:k+1];
k ++;
End
else if ifstring(code) then
code += c;
k ++;
wz ++;
End;
if length(tslArr) then Begin
//println('pIndex={},txt={},i={}',tArr[i]['pIndex'], txt, i);
if i and i < length(tArr) and tArr[i]['pIndex'] <> tArr[i+1]['pIndex'] then Begin
code += '\n';
endPos ++;
End;
ind := length(tslArr) - 1;
if tslArr[ind]['pIndex'] <> tArr[i]['pIndex'] or tslArr[ind]['rIndex'] <> tArr[i]['rIndex'] then
tslArr[ind + 1] := tArr[i];
End;
i += iStep;
End;
return array(length(errArr), tslFuncCount, errArr);
End;
Function ExecTsTag(docx, tagName, tagObj);
Begin
//表格
t := array();
tslTagCount := 0;
errArr := array();
tArr := Tables();
for i:=0 to length(tArr)-1 do Begin
col := tArr[i].Cols();
row := tArr[i].Rows();
for r:= 1 to row do Begin
for c:=1 to col do Begin
cell := tArr[i].Cell(r, c);
[err, cnt, err] := cell.ExecTsTag(docx, tagName, tagObj);//递归
tslTagCount += cnt;
errArr union= err;
End;
End;
End;
//文本框
ps := Paragraphs();
for i:=0 to length(ps)-1 do Begin
boxs := ps[i].TextBoxs();
for j:=0 to length(boxs)-1 do Begin
[err, cnt, err] := boxs[j].ExecTsTag(docx, tagName, tagObj);//递归
if cnt then
boxs[j].Apply();
tslTagCount += cnt;
errArr union= err;
End;
End;
//页脚、页眉
sArr := Sections();
tpArr := array('default','even','first');
for i:=0 to length(sArr)-1 do Begin
for k, name in tpArr do Begin
h := sArr[i].Header(name);
if ifObj(h) then Begin
[err, cnt, err] := h.ExecTsTag(docx, tagName, tagObj);//递归
tslTagCount += cnt;
errArr union= err;
End;
f := sArr[i].Footer(name);
if ifObj(f) then Begin
[err, cnt, err] := f.ExecTsTag(docx, tagName, tagObj);//递归
tslTagCount += cnt;
errArr union= err;
End;
End;
End;
[err, cnt, err] := ExecTsTagImpl(docx, tagName, tagObj);
tslTagCount += cnt;
errArr union= err;
return array(length(errArr), tslTagCount, errArr);
End;
Function ExecTsTagImpl(docx, tagName, tagObj);
Begin
tslTagCount := 0;
errArr := array();
tagArr := array();
tArr := TextArray();
tagAttribute := '';
tagStr := '';
tagStatus := '';//array('','head', 'attribute', 'tail');
tagHead := '[' + tagName;
tagTail := '[/' + tagName;
tmp := array();
while i < length(tArr) do Begin
txt := '';
iStep := 1;
if ifObj(tArr[i]['rNode']) then Begin
run := new TRun(tArr[i]['rNode']);
txt := run.Text();
if class(TSXml).IsUtf8() then
txt := UTF8ToAnsi(txt);
End;
k := 1;
wz := 1;
txtLen := length(txt);
while k <= txtLen do Begin
c := txt[k];
if c = ']' and (tagStatus = 'head' or tagStatus = 'attribute') and tagStr = tagHead then Begin //TAG头结束标志
tagStr := '';
tagArr := tArr[tmp['head-begin-paragraph']:i,:];
wz++;
tagStatus := 'tail';
tmp['head-end-paragraph'] := i;
tmp['head-end-pos'] := k++;
tmp['head-end-wz'] := wz;
tmp['head-end-txtlen'] := txtLen;
continue;
End;
case tagStatus of
'':
if c = '[' then Begin
tagStr := '[';
tmp['head-begin-paragraph'] := i;
tmp['head-begin-pos'] := k;
tmp['head-begin-wz'] := wz;
tmp['head-begin-txtlen'] := txtLen;
tagStatus := 'head';
tagAttribute := '';
End;
'head':
if c = ' ' and tagStr = tagHead then Begin //找到TAG属性
tagStatus := 'attribute';
End
else if length(tagStr) < length(tagHead) and lowercase(c) = lowercase(tagHead[ length(tagStr) + 1 ]) then Begin
tagStr += tagHead[ length(tagStr) + 1 ];
End
else //继续寻找TAG开始标志
tagStatus := '';
'attribute':
tagAttribute += c;
'tail':
if c=']' and tagStr = tagTail then Begin //查找到完整标签
ind := length(tagArr) - 1;
if tagArr[ind]['pIndex'] <> tArr[i]['pIndex'] or tagArr[ind]['rIndex'] <> tArr[i]['rIndex'] then Begin
ind ++;
tagArr[ind] := tArr[i];
End;
//[/tag]后
if k < txtLen then Begin //后面分割为新的w:r
tArr[i]['rNode'] := run._duplicate_r(tArr[i]['rNode']);
run._adjust_r(tArr[i]['rNode'], wz, txtLen);
iStep := 0;
End;
//前[/tag]
tagInd := length(tagArr) - i + tmp['tail-begin-paragraph'] - 1;
if tmp['tail-begin-pos'] > 1 then Begin
nNode := run._duplicate_r(tagArr[tagInd]['rNode']);
run._adjust_r(tagArr[tagInd]['rNode'], 0, tmp['tail-begin-wz'] - 1);
tagArr[tagInd]['pNode'].DeleteChild(nNode);
tmp['tag-end'] := tagInd;
End
else if tmp['tail-begin-pos'] = 1 then Begin
tmp['tag-end'] := tagInd - 1;
End;
//[tag]后
firstNode := tagArr[0]['rNode'];
tagInd := length(tagArr) - i + tmp['head-end-paragraph'] - 1;
if tmp['head-end-pos'] < tmp['head-end-txtlen'] then Begin
oldNode := tagArr[tagInd]['rNode'];
tagArr[tagInd]['rNode'] := run._duplicate_r(oldNode);
run._adjust_r(tagArr[tagInd]['rNode'], tmp['head-end-wz'] - 1, tmp['head-end-txtlen']);
tmp['tag-beg'] := tagInd;
if tmp['head-begin-paragraph'] <> tmp['head-end-paragraph'] then
tagArr[tagInd]['pNode'].DeleteChild(oldNode);
End
else if tmp['head-end-pos'] = tmp['head-end-txtlen'] and tagInd then Begin
tmp['tag-beg'] := tagInd + 1;
End;
//前[tag]
if tmp['head-begin-pos'] > 1 then Begin
run._adjust_r(firstNode, 0, tmp['head-begin-wz'] - 1);
if firstNode = tagArr[0]['rNode'] then
tagArr[0]['rNode'] := nil;
End
else if tagInd=0 and tmp['tag-beg']=0 then
tagArr[0]['pNode'].DeleteChild(firstNode);
//执行TAG逻辑
r := array();
for nI := 0 to length(tagArr)-1 do Begin
if not ifObj(tagArr[nI]['rNode']) then continue;
if nI >= tmp['tag-beg'] and nI <= tmp['tag-end'] then
r[length(r)] := tagArr[nI];//标签中间文字内容
else Begin //删除标签
tagArr[nI]['pNode'].DeleteChild(tagArr[nI]['rNode']);
node := tagArr[nI]['pNode'].FirstChildElement('w:r');
if not ifObj(node) then Begin
tagArr[nI]['pNode'].Parent().DeleteChild(tagArr[nI]['pNode']);
End;
End;
End;
tagObj.Init(tagName, tagAttribute, r);
tagObj.Apply();
tslTagCount++;
tagStatus := '';
tagArr := array();
break;
End
else if length(tagStr) < length(tagTail) and lowercase(c) = lowercase(tagTail[ length(tagStr) + 1 ]) then Begin
tagStr += tagTail[ length(tagStr) + 1 ];
if tagStr = '[' then Begin
tmp['tail-begin-paragraph'] := i;
tmp['tail-begin-pos'] := k;
tmp['tail-begin-wz'] := wz;
tmp['tail-begin-txtlen'] := txtLen;
End;
End
else //继续寻找TAG结束标志
tagStr := '';
End;
if Ord(c) > 127 then Begin
k ++;
End
k ++;
wz ++;
End;
if length(tagArr) then Begin
if i and i < length(tArr) and tArr[i]['pIndex'] <> tArr[i+1]['pIndex'] then Begin
endPos ++;
End;
ind := length(tagArr) - 1;
if tagArr[ind]['pIndex'] <> tArr[i]['pIndex'] or tagArr[ind]['rIndex'] <> tArr[i]['rIndex'] then
tagArr[ind + 1] := tArr[i];
End;
i += iStep;
End;
return array(length(errArr), tslTagCount, errArr);
End;
Function GetHeadingListImpl(docx, posOpt, UpperHeadingLevel, LowerHeadingLevel, numIds);
Begin
r := array();
if ifObj(posOpt) then
pNode := posOpt.NextElement();
else
pNode := node_.FirstChildElement();
while ifObj(pNode) do Begin
name := pNode.GetName();
if name = 'w:p' and not ifObj(pNode.FirstChildElement('w:sectPr')) then
begin
pStyle := class(TSXml).GetNode(pNode, "w:pPr/w:pStyle");
level := nil;
if pStyle then
begin
styleId := pStyle.GetAttribute('w:val');
if styleId <> '' and (obj := docx.StyleObject().GetStyleById(styleId)) and ifObj(obj) then
begin
level := getHeadingLevel(docx, obj);
end
end
else begin
level := class(TSXml).GetNode(pNode, "w:pPr/w:outlineLvl");
if ifObj(level) then level := level.GetAttribute("w:val");
end
if not ifnil(level) then
begin
iLevel := Class(TSXml).SafeStrToIntDef(level, -1);
if iLevel+1 >= UpperHeadingLevel and iLevel+1 <= LowerHeadingLevel then Begin
//统计数字项目编号
p := new TParagraph(pNode);
text := p.Text();
if text = "" then
begin
pNode := pNode.NextElement();
continue;
end
numArr := array();
numId := getNumPr('numId', docx, p);
ilvl := getNumPr('Level', docx, p);
if not ilvl then ilvl := 0;
if ifarray(numIds) then Begin
if ilvl >= 0 and ilvl < 10 then Begin
if not istable(numIds[numId]) then
numIds[numId] := array(0,0,0,0,0,0,0,0,0,0);
prev := numIds[numId, ilvl];
if prev then Begin
for i:=ilvl+1 to 9 do
numIds[numId, i] := 0;
End;
numIds[numId, ilvl]++;
numArr := numIds[numId];
End;
End;
r[ind]['Level'] := strtoint(level);
r[ind]['Paragraph'] := p;
r[ind]['Text'] := text;
r[ind]['numId'] := ifnumber(numId) ? integer(numId) : 0; //数字项目编号
r[ind]['ilvl'] := ilvl; //级别
r[ind]['numArr'] := numArr; //累加数字编码
ind++;
End;
end
End
else if false and ifarray(numIds) and name = 'w:tbl' then Begin
tbl := TOfficeObj('TTable');
tbl.Init(pNode);
rows := tbl.Rows();
cols := tbl.Cols();
for i:=1 to rows do Begin
for j:=1 to cols do Begin
cell := tbl.Cell(i, j);
if cell then [a, b] := cell.GetHeadingListImpl(docx, nil, UpperHeadingLevel, LowerHeadingLevel, numIds);//表格内递归查找,统计数字项目编号,但不显示在大纲中
End;
End;
End;
pNode := pNode.NextElement();
End;
return r;
End;
Function getNumPr(field, docx, p);
Begin
value := p.Format.NumPr.Value(field);
if value then return value;
styleId := p.Format.Value('StyleId', 1);
return getFieldByStyle(field, docx, docx.StyleObject().GetStyleById(styleid));
End;
Function getFieldByStyle(field, docx, obj);
Begin
if not ifObj(obj) then return '';
numId := obj.pPr.numPr.Value(field);
if numId = '' then
begin
id := o.Value('BasedOn');
return getNumIdByStyle(docx, docx.StyleObject().GetStyleById(id));
end
return numId;
End;
Function getHeadingLevel(docx, obj);
Begin
if not ifObj(obj) then return '';
o := obj;
level := obj.HeadingLevel();
if level = '' then
begin
id := o.Value('BasedOn');
return getHeadingLevel(docx, docx.StyleObject().GetStyleById(id));
end
return level;
End;
Function getPictureMaxId();
Begin
id := 0;
pNode := node_.FirstChildElement('w:p');
while ifObj(pNode) do Begin
rNode := pNode.FirstChildElement('w:r');
while ifObj(rNode) do Begin
node := class(TSXml).GetNode(rNode, 'w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blibFill/a:blib');
if ifObj(node) then Begin
v := node.GetAttribute('r:embed');
if v <> '' then Begin
iVal := strtoint(v);
if iVal > id then id := iVal;
End;
End;
rNode := rNode.NextElement('w:r');
End;
pNode := pNode.NextElement('w:p');
End;
return id;
End;
Function addPart(posOpt, o, flag);
Begin
node := posOpt;
if ifObj(posOpt) and not (posOpt is Class(XmlNode)) then
node := posOpt.Node();
node := findNode(node, true);
if flag then nodeArr := o.node_.Marshal()[0];
else nodeArr := o.Marshal();
if ifObj(node) then Begin
o.node_ := node_.InsertAfterChild(node, nodeArr); //XmlNode节点对象或DocObject对象
End
else if node = 0 then Begin
o.node_ := node_.InsertFirstChild(nodeArr);
End
else if node < 0 then Begin
o.node_ := node_.InsertEndChild(nodeArr);
End
else Begin
raise 'Invalid input param.';
End;
TOfficeApi().Set('CurrentPosition', o.node_);
End;
Function findNode(posOpt, b);
Begin
if not ifObj(lastParagraph_) then
return 0;
if ifObj(posOpt) then
return posOpt;
if b and posOpt = 0 then Begin
return 0;
End;
if posOpt < 0 then
return lastParagraph_;
if ifInt(posOpt) then Begin
node := node_.FirstChildElement();
ind := 0;
while ifObj(node) do Begin
name := node.GetName();
if name = 'w:p' or name = 'w:tbl' then
ind ++;
if ind = posOpt + ifthen(b, 0, 1) then
return node;
node := node.NextElement();
End;
End;
if b then
return lastParagraph_;
return 0;
End;
Function getText(t);
Begin
if not ifstring(t) then return '' $ t;
return t;
txt := ReplaceStr(t, '\t', '<w:tab/>');
txt := ReplaceStr(txt, '\r\n', '<w:br/>');
txt := ReplaceStr(txt, '\n', '<w:br/>');
return txt;
End;
Function _set_lastParagraph_(posOpt, node);
Begin
if not ifObj(lastParagraph_) then
lastParagraph_ := node;
else if ifInt(posOpt) and posOpt = -1 then
lastParagraph_ := node;
else if ifObj(posOpt) then Begin
posNode := posOpt;
if not (posOpt is Class(XmlNode)) then
posNode := posOpt.Node();
if lastParagraph_.Eq(posNode) then Begin
_setLastParagraph();
End;
End;
End;
zipfile_;
lastParagraph_;
document_;
End;
Type TDocHeaderFooter = Class(TDocumentBody)
Function Create(rid, obj, name);
Begin
rID_ := rid;
xmlObj_ := obj;
node := xmlObj_.FirstChildElement(name);
Index := -1;
Class(TDocumentBody).Create(node);
name_ := name;
End;
///添加页码
///fmtstring页码格式eg"第 {0} 页,共 {1} 页"
///font字体格式
Function AddPageNumber(fmt, font);
Begin
r := array();
fmtLen := length(fmt);
txt := '';
while i < fmtLen do Begin
if fmt[i+1] = '{' and i + 2 <= fmtLen and fmt[i+3] = '}' then Begin
if txt <> '' then
r[ cnt++ ] := txt;
r[ cnt++ ] := fmt[i+1:i+3];
txt := '';
i += 3;
End
else Begin
txt += fmt[i+1];
i ++;
End;
End;
if txt <> '' then
r[ cnt++ ] := txt;
p := TOfficeObj('TParagraph');
class(TSXml).CopyRprFormat(p.pPr.rPr, font);
for i:=0 to length(r)-1 do Begin
run := p.AddRun();
if r[i] = '{0}' then Begin //页码
run.fldCharType := 'begin';
class(TSXml).CopyRprFormat(run.rPr, font);
PageNo := p.AddRun();
PageNo.InstrText := ' PAGE \\* MERGEFORMAT ';
PageNo.InstrTextSpace := 'preserve';
class(TSXml).CopyRprFormat(PageNo.rPr, font);
run := p.AddRun();
run.fldCharType := 'end';
class(TSXml).CopyRprFormat(run.rPr, font);
End
else if r[i] = '{1}' then Begin //总页数
run.fldCharType := 'begin';
class(TSXml).CopyRprFormat(run.rPr, font);
TotalPageNo := p.AddRun();
TotalPageNo.InstrText := ' NUMPAGES \\* MERGEFORMAT ';
TotalPageNo.InstrTextSpace := 'preserve';
class(TSXml).CopyRprFormat(TotalPageNo.rPr, font);
run := p.AddRun();
run.fldCharType := 'end';
class(TSXml).CopyRprFormat(run.rPr, font);
End
else Begin
run.SetText( r[i] );
class(TSXml).CopyRprFormat(Run.rPr, font);
End;
End;
return AddParagraph(p, -1, nil);
End;
rId_:integer;
xmlFileName_:string;
root_;
xmlObj_;
End;
Type TCols = Class(TColsImpl)
Function AddCol();
Begin
o := new TCol();
NewChildNode( array("field":"", "name":"w:col", "obj":o, "attrEx":"", "nodeType":"") );
return o;
End;
End;
Type TDocSection = Class(DocObject, TDocSectionImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Create(node, -1, nil);
End;
Function Create(node, index, z);overload;
Begin
Index_ := index;
name_ := 'w:sectPr';
node_ := node;
zipfile_ := z;
Class(TDocSectionImpl).Create(nil, name_);
InitRootNode(node);
End;
///返回指定页眉
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function Header(type);
Begin
return _getHeaderFooter('w:headerReference', type);
End;
///返回指定页脚
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function Footer(type);
Begin
return _getHeaderFooter('w:footerReference', type);
End;
///添加页眉
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function AddHeader(type);
Begin
return _AddHeaderFooter('header', (ifNil(type) or type = '') ? 'default' : type);
End;
///添加页脚
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function AddFooter(type);
Begin
return _AddHeaderFooter('footer', (ifNil(type) or type = '') ? 'default' : type);
End;
Function _AddHeaderFooter(headerFooter, hfType);
Begin
if headerFooter = 'header' then Begin
name := 'w:hdr';
type := 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';
ContentType := 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';
obj := _getHeaderFooter('w:headerReference', hfType); //页眉已经存在
fileContent := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:hdr xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData" mc:Ignorable="w14 w15 wp14"></w:hdr>';
End
else Begin
name := 'w:ftr';
type := 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';
ContentType := 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';
obj := _getHeaderFooter('w:footerReference', hfType); //页脚已经存在
fileContent := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:ftr xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"></w:ftr>';
End
if ifObj(obj) then return obj;
rels := zipfile_.Get('word/_rels/document.xml.rels');
[rid, target] := class(TSXml).FindRelationshipRid(rels, '');//最大rId
rid ++;
files := sselect ['FileName'] from zipfile_.Files() where AnsiStartsText('word/' $ headerFooter, ['FileName']) end;
fid := length(files) + 1;//文件ID号
target := headerFooter $ fid $ '.xml';
class(TSXml).AddRelationshipRid(rels, target, type, 'rId'$rid, nil);//添加rId
PartName := '/word/' $ headerFooter $ fid $ '.xml';
contentXml := zipfile_.Get('[Content_Types].xml');
class(TSXml).AddOverrideContentType(contentXml, partName, contentType);//添加Contet_Types
fname := 'word/' $ headerFooter $ fid $ '.xml';
zipfile_.Add(fname, fileContent);//创建页脚、页眉文件
node := node_.InsertFirstChild('element', headerFooter = 'header' ? 'w:headerReference' : 'w:footerReference');
node.SetAttribute('w:type', hfType);
node.SetAttribute('r:id', 'rId'$rid);
if hfType = 'first' then Begin
docGridNode := node_.FirstChildElement('w:docGrid');
titlePg := node_.FirstChildElement('w:titlePg');
if not ifObj(titlePg) then Begin
if ifObj(docGridNode) then
titlePg := node_.InsertBeforeChild(docGridNode,'element','w:titlePg');
else
titlePg := node_.InsertEndChild('element','w:titlePg');
End;
End;
if hfType = 'even' then Begin
settingsXml := zipfile_.Get('word/settings.xml');
if ifObj(settingsXml) then Begin
evenObj := settingsXml.FirstChildElement('w:settings').FirstChildElement('w:evenAndOddHeaders');
if not ifObj(evenObj) then
evenObj := settingsXml.FirstChildElement('w:settings').InsertFirstChild('element','w:evenAndOddHeaders');
evenObj.SetAttribute('w:val', 1);
End;
End;
return new TDocHeaderFooter(rid, zipfile_.Get(fname), name);//返回页脚、页眉对象
End;
Function _getRid(key, type);
Begin
if ifNil(type) or type = '' then
type := 'default';
node := node_.FirstChildElement(key);
while ifObj(node) do Begin
name := node.GetName();
if name = key then Begin
if type = node.GetAttribute('w:type') then
return node.GetAttribute('r:id');
End;
node := node.NextElement(key);
End;
return '';
End;
Function _getHeaderFooter(key, type);
Begin
rid := _getRid(key, type);
if rid='' then return nil;
rels := zipfile_.Get('word/_rels/document.xml.rels');
theNode := class(TSXml).FindRelationship(rels, rid);
if not ifObj(theNode) then
return nil;
fname := 'word/' $ theNode.GetAttribute('Target');
xml := zipfile_.Get(fname);
if ifObj(xml) then
return new TDocHeaderFooter(rid, xml, key = 'w:headerReference' ? 'w:hdr' : 'w:ftr');
return nil;
End;
Index_:integer;
zipfile_; //压缩文件对象
End;
//node_ -> w:p/w:r/mc:AlternateContent/mc:Choice/mc:Fallback/w:pict/v:shape/v:textbox/w:txbxContent
Type TTextBox = Class(TDocumentBody, TTextBoxImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Class(TTextBoxImpl).Create(nil, 'w:txbxContent');
Class(TDocumentBody).Create(node);
name_ := 'w:txbxContent';
InitRootNode(node);
End;
Function Create(pNode, name);overload;
Begin
Create(nil);
End;
Function Init(pNode, nodeEx);
Begin
pNode_ := pNode;
NodeEx_ := nodeEx;
End;
Function Apply();override;
Begin
if ifObj(NodeEx_) then Begin
data := node_.Marshal();
NodeEx_.DeleteChildren();
class(TSXml).UpdateNode(NodeEx_, data[0]['attributes'], data[0]['children']);
End;
End;
Function Clear();
Begin
if ifObj(node_) then node_.DeleteChildren();
End;
pNode_;//<w:p>
NodeEx_;//w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx/wps:txbxContent
End;
//w:tr
Type TRow = Class(DocObject, TwTr)
Function Create(node);
Begin
node_ := node;
Class(TwTr).Create(nil, 'w:tr');
End;
Property Format read readFormat;
Function readFormat();
Begin
return TrPr;
End;
Property FormatEx read readFormatEx;
Function readFormatEx();
Begin
return tblPrEx;
End;
Function Apply();virtual;
Begin
arr := Marshal();
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
End;
End;
Type TFootnote = Class(TDocumentBody, TFootnoteImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Class(TDocumentBody).Create(node);
Create(node, 'w:footnote');
node_ := node;
End;
Function Create(pNode, name);overload;
Begin
Class(TFootnoteImpl).Create(nil, name);
InitRootNode(pNode);
End;
node_;
End;
Type TFootnotes = Class
Function InitFootnotes(zip);
Begin
zip_ := zip;
file := 'word/footnotes.xml';
footnotesXml_ := zip.Get(file);
idMap_ := array();
maxId_ := 0;
if not ifObj(footnotesXml_) then
begin
content := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:footnotes xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se wp14"></w:footnotes>';
zip_.Add(file, content);
footnotesXml_ := zip.Get(file);
// content_type
ctXml := zip_.Get('[Content_Types].xml');
class(TSXml).AddOverrideContentType(ctXml, '/word/footnotes.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml');
// document.xml.rels
rels := zip_.Get('word/_rels/document.xml.rels');
[maxRid, target, id] := class(TSXml).FindRelationshipRid(rels, '');
maxRid++;
class(TSXml).AddRelationshipRid(rels, 'footnotes.xml', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes', 'rId' $ maxRid);
end
footnotesNode_ := footnotesXml_.FirstChildElement("w:footnotes");
node := footnotesNode_.FirstChildElement('w:footnote');
while ifObj(node) do
begin
obj := new TFootnote(node);
id := obj.Value('Id', true);
idMap_[id] := obj;
id := StrToIntDef(id, 0);
if id > maxId_ then maxId_ := id;
node := node.NextElement();
end
End;
Function Add();
Begin
node := footnotesNode_.InsertEndChild('element', 'w:footnote');
node.SetAttribute('w:id', ++maxId_);
obj := new TFootnote(node);
obj.Id := maxId_;
idMap_[maxId_] := obj;
return obj;
End;
Function GetFootnote(id);
Begin
return idMap_[id];
End;
Function CopyFootnote(obj);
Begin
marshal := obj.Root().Marshal()[0];
node := footnotesNode_.InsertEndChild(marshal);
node.SetAttribute('w:id', ++maxId_);
obj := new TFootnote(node);
obj.Id := maxId_;
idMap_[maxId_] := obj;
return obj;
End;
private
zip_;
footnotesXml_;
footnotesNode_;
idMap_;
maxId_;
End;
//w:tc
Type TCell = Class(TDocumentBody, TWTc)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
Class(TDocumentBody).Create(node);
Create(node, 'w:tc');
End;
Function Create(pNode, name);overload;
Begin
Class(TWTc).Create(nil, 'w:tc');
InitRootNode(pNode);
name_ := 'w:tc';
mergeSpan_ := 0;
pPr_ := new TwpPr();
End;
Property Format read readFormat;
Function readFormat();
Begin
return TcPr;
End;
Property PFormat read readPFormat;
Function readPFormat();
Begin
return pPr_;
End;
Function Apply(); override;
Begin
arr := Marshal();
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
arr := pPr_.Marshal();
if length(arr['attributes']) or length(arr['children']) then Begin
pNode := node_.FirstChildElement('w:p');
while ifObj(pNode) do Begin
pPr := class(TSXml).GetNode(pNode, 'w:pPr', 'first');
class(TSXml).UpdateNode(pPr, arr['attributes'], arr['children']);
pNode := pNode.NextElement();
End;
End;
End;
///添加文字
Function SetText(txt);
Begin
if not ifString(txt) then
lines := array('' $ txt);
else
lines := str2array(txt, '\n');
for i:=0 to length(lines)-1 do Begin
newp := new TParagraph();
newp.pPr.rPr.Lang := 'en-US';
newp.pPr.rPr.eastAsia := 'zh-CN';
newp.Run.rPr.Lang := 'en-US';
newp.Run.rPr.eastAsia := 'zh-CN';
newp.Run.SetText( lines[i] );
NewChildNode( array("field":"", "name":"w:p", "obj":newp, "attrEx":"", "nodeType":"") );
End;
if not istable(lines) then
P.Run.T := '';
End;
Function Clear();
Begin
node := node_.FirstChildElement('w:p');
while ifObj(node) do Begin
n := node.NextElement();
if ind = 0 then
node.DeleteChildren();
else
node_.DeleteChild(node);
ind++;
node := n;
End;
End;
Function Row();
Begin
return new TRow(node_.Parent());
End;
Function Append(c);
Begin
ps := c.Parts();
for i:=0 to length(ps)-1 do Begin
if not ps[i].node_.GetName() in array('w:p', 'w:tbl') then continue;
data := ps[i].node_.Marshal();
w := node_.InsertEndChild(data[0]);
End;
End;
mergeSpan_:integer;
pPr_;//段落格式
End;
//w:tbl
Type TTable = Class(DocObject, TTableImpl)
Function Create();overload;
Begin
Create(nil);
End;
Function Create(node);overload;
Begin
name_ := 'w:tbl';
Class(TTableImpl).Create(nil, 'w:tbl');
if ifObj(node) then
Init(node);
End;
Function Root();override;
Begin
return node_;
End;
Function Init(node);
Begin
node_ := node;
cells_ := array();
iCol_ := 0;
row := node.FirstChildElement('w:tr');
while ifObj(row) do Begin
col := row.FirstChildElement('w:tc');
iCol := 0;
while ifObj(col) do Begin
//c := new TCell(col);
cells_[iRow, iCol] := array(col, 0);
iCol ++;
mergeSpan := _getVSpan(col);//合并单元格
if mergeSpan > 0 then Begin
//c.mergeSpan_ := mergeSpan;
cells_[iRow, iCol, 1] := mergeSpan;
for j:=1 to mergeSpan-1 do Begin
cells_[iRow, iCol] := nil;
iCol ++;
End;
End;
if iCol > iCol_ then iCol_ := iCol;
col := col.NextElement('w:tc');
End;
iRow ++;
row := row.NextElement('w:tr');
End;
InitRootNode(node);
End;
Function GetCell(r, c);
Begin
return cells_[r-1, c-1];
End;
///设置表格数据
///data: table数据表
///[includeHeader: bool] 是否包括表头默认FALSE
///[includeIndex: bool] 是否自动添加索引号默认FALSE
Function SetData(docx, data, includeHeader, includeIndex);
Begin
if not IsTable(data) then
raise "Invalid Data.";
[rowcount,colcount] := mSize(data);//一维数组
if colcount = 0 then
data := array(data);
fields := FieldNames(data);
if IsTable(fields) then Begin
r := nils(length(data),length(fields));
r[:,:] := data;
data := r;
End;
if includeIndex then Begin
n := length(data)-1;
r := array(0->n);
data := `r | data;
End;
if includeHeader and IsTable(fields) then Begin
if includeIndex then
fields := array("Index") union fields;
data := array(fields) union data;
End;
Data_ := data;
TblPr.StyleId := _GetStyle(docx, 'normaltable');
TblPr.Width := 0;
TblPr.WidthType := 'auto';
//TblPr.Borders.Top.Val := 'single';
//TblPr.Borders.Left.Val := 'single';
//TblPr.Borders.Bottom.Val := 'single';
//TblPr.Borders.Right.Val := 'single';
//TblPr.Borders.InsideH.Val := 'single';
//TblPr.Borders.InsideV.Val := 'single';
//TblPr.CellMar.Top := 0;
//TblPr.CellMar.Left := 108;
//TblPr.CellMar.Bottom := 0;
//TblPr.CellMar.Right := 108;
//TblPr.CellMar.TopType := 'dxa';
//TblPr.CellMar.LeftType := 'dxa';
//TblPr.CellMar.BottomType := 'dxa';
//TblPr.CellMar.RightType := 'dxa';
//TblPr.FirstColumn := 1;
//TblPr.FirstRow := 1;
//TblPr.LastColumn := 0;
//TblPr.LastRow := 0;
//TblPr.NoVBand := 1;
//TblPr.NoHBand := 0;
//TblPr.Val := '04A0';
width := getBlockWidth(docx);
[rowCount, cnt] := MSize(data);
colCount_ := cnt;
colWidth_ := colCount_ ? integer(width / colCount_) : 0;
gridArr := array();
for i:=0 to colCount_-1 do Begin
gcol := new TwGridCol();
gcol.W := colWidth_;
gridArr union= array(('name':'w:gridCol','obj':gcol,'attrEx':'','nodeType':'','attrName':''));
End;
TblGrid.GridCol := gridArr;
End;
Function _GetStyle(obj, id);
Begin
style := obj.StyleObject().GetStyleById(id);
if not ifObj(style) then Begin
style := obj.StyleObject().AddDefaultStyle(id);
End;
return style.StyleId;
End;
Property Format read readFormat;
Function readFormat();
Begin
return TblPr;
End;
Property Paragraph read readParagraph;
Function readParagraph();
Begin
if not ifObj(paragraph_) then
paragraph_ := new TParagraph();
return paragraph_;
End;
Property FormatEx read readFormatEx;
Function readFormatEx();
Begin
return TblPr.tblpPr;
End;
///修改表格属性
Function Apply(); override;
Begin
arr := Marshal();
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
End;
///列数
Function Cols();
Begin
return iCol_;
End;
///行数
Function Rows();
Begin
return length(cells_);
End;
///获取单元格
Function Cell(row, col);
Begin
if row > length(cells_) then return nil;
c := cells_[row-1, col-1];
if ifNil(c) then return nil;
cellObj := new TCell(c[0]);
cellObj.mergeSpan_ := c[1];
return cellObj;
End;
///设置列宽
Function ColumnWidth(n, wth);
Begin
if n >0 and n <= length(TblGrid.GridCol) then
TblGrid.GridCol[n-1]['obj'].W := wth;
End;
/// 设置行高
Function RowHeight(row, height);
Begin
if row <= 0 or row > Rows() then return;
node := _getRowNode(row - 1);
node := class(TSXml).GetNode(node, 'w:trPr/w:trHeight', 'end');
node.SetAttribute('w:hRule', 'exact');
node.SetAttribute('w:val', height);
End;
Function Height(row);
Begin
if row <= 0 or row > Rows() then return nil;
node := _getRowNode(row - 1);
obj := new TwTr();
obj.InitRootNode(node);
return obj.TrPr.Value('Height');
End;
Function Width(col);
Begin
obj := Cell(1, col);
return obj.Format.Value('Width');
End;
///合并单元格
///del: bool是否删除其它单元格内容只保留左上单元格内容
Function Merge(top, left, bottom, right, del);overload;
Begin
//<w:gridSpan w:val="3"/>
//<w:vMerge w:val="restart"/>
rowCount := Rows();
if left > right or top > bottom or left > iCol_ or top > rowCount or (left = right and top = bottom) then
return 'Invalid input param.';
//合并其它单元格
[left2, right2, top2, bottom2] := array(left, right, top, bottom);
//println('merge(left2, right2, top2, bottom2)={}',array(left2, right2, top2, bottom2));
for i:=left to right do Begin
if top > 1 then Begin
c1 := Cell(top - 1, i);
c2 := Cell(top, i);
if (c2 = nil or c2.mergeSpan_ > 0) and (c1 = nil or c1.mergeSpan_ > 0) then Begin
top2 := _getTop(top - 1, i, top2);
End;
End;
if bottom < rowCount then Begin
c1 := Cell(bottom, i);
c2 := Cell(bottom + 1, i);
if (c2 = nil or c2.mergeSpan_ > 0) and (c1 = nil or c1.mergeSpan_ > 0) then Begin
bottom2 := _getBottom(bottom + 1, rowCount, i, bottom2);
End;
End;
End;
for i:=top to bottom do Begin
if left > 1 then Begin
c1 := Cell(i, left - 1);
c2 := Cell(i, left);
if c2 = nil and (c1 = nil or c1.mergeSpan_ > 0) then
left2 := _getLeft(i, left - 1, left2);
End;
if right < iCol_ then Begin
c1 := Cell(i, right);
c2 := Cell(i, right + 1);
if c2 = nil and (c1 = nil or c1.mergeSpan_ > 0) then
right2 := _getRight(i, right + 1, right2);
End;
End;
//println('merge(left2, right2, top2, bottom2)={}\n',array(left2, right2, top2, bottom2));
val := right2 - left2 + 1;
theCell := Cell(top2, left2);
for row:=top2 to bottom2 do Begin
c := Cell(row, left2);
c.mergeSpan_ := val;
gridSpan := class(TSXml).GetNode(c.node_, 'w:tcPr/w:gridSpan', true);
gridSpan.SetAttribute('w:val', val);
node := class(TSXml).GetNode(c.node_, 'w:tcPr/w:vMerge', true);
node.SetAttribute('w:val', row=top2 ? 'restart' : 'continue');
if row <> top2 then Begin
if not del then
theCell.Append(c);
c.Clear();
End;
for col:=left2 + 1 to right2 do Begin
c := Cell(row, col);
if ifObj(c) then Begin
if not del then
theCell.Append(c);
c.node_.Parent().DeleteChild(c.node_);
cells_[row-1, col-1] := nil;
End;
End;
End;
return 'ok';
End;
///合并单元格
///hcell: string左上角坐标eg: 'B2'
///vcell: string右下角坐标eg: 'C4'
///del: bool是否删除其它单元格内容只保留左上单元格内容
Function Merge(hCell, vCell, del);overload;
Begin
[err1, left, top] := CellNameToCoordinates(hCell);
[err2, right, bottom] := CellNameToCoordinates(vCell);
if err1 or err2 then
return 'Invalid input Coordinates.';
return Merge(top, left, bottom, right, del);
End;
///删除单元格
///row: int, 行
///col: int, 列
///[cellshift]: int, 默认1。0:删除单元格下方内容上移1:删除单元格右侧单元格左移
///row或col其中一个为nil时删除某行或某列如(1, nil),删除第一行
Function DeleteCell(row, col, cellshift);
Begin
if ifnil(cellshift) then cellshift := 1;
if ifnumber(row) and ifnil(col) then
begin
node := _getRowNode(row - 1);
if ifObj(node) then node_.DeleteChild(node);
for i:=row-1 to length(cells_)-2 do
cells_[i] := cells_[i + 1];
reindex(cells_, array(length(cells_)-1 : nil));
end
else if ifnil(row) and ifnumber(col) then
begin
for r:=1 to length(cells_) do
DeleteCell(r, col);
iCol_--;
end
else begin
c := cells_[row-1, col-1];
if not c then return;
node := _getRowNode(row - 1);
if cellshift then
begin
node.DeleteChild(c[0]);
for i:=col-1 to iCol_ - 1 do
cells_[row-1, i] := cells_[row-1, i+1];
cells_[row-1, iCol_-1] := nil;
end
else begin
r := row;
len := length(cells_);
while r < len and ifObj(node) do
begin
tcell := cells_[r, col-1];
if tcell then
begin
new_node := node.InsertAfterChild(c[0], tcell[0].Marshal()[0]);
node.DeleteChild(c[0]);
cells_[row-1, col-1, 0] := new_node;
end
c := tcell;
++r;
node := node.NextElement();
end
if c then
begin
p := c[0].FirstChild('w:p');
c[0].DeleteChildren();
c[0].InsertEndChild('element', 'w:p');
end
end
end
End;
///设置表格样式ID
///docx: TSDocxFile对象
///styleId: 表格样式ID
Function SetStyleById(docx, styleId);
Begin
ret := array();
_getTblStylePr(docx, styleId, ret);
tblPr.StyleId := styleId;
Apply();
for i:=0 to length(ret)-1 do
begin
cnf := TOfficeObj('TwCnfStyle');
cnf.Val := 000000000000;
cnf.FirstRow := 0;
cnf.LastRow := 0;
cnf.FirstColumn := 0;
cnf.LastColumn := 0;
cnf.OddVBand := 0;
cnf.EvenVBand := 0;
cnf.OddHBand := 0;
cnf.EvenHBand := 0;
cnf.FirstRowFirstColumn := 0;
cnf.FirstRowLastColumn := 0;
cnf.LastRowFirstColumn := 0;
cnf.LastRowLastColumn := 0;
case ret[i] of
'firstRow':
begin
node := _getRowNode(0);
trPr := node.FirstChild('w:trPr');
twtrpr := TOfficeObj('TwTrPr');
twtrpr.InitRootNode(trPr);
cnf.Val := 100000000000;
cnf.FirstRow := 1;
twtrpr.CnfStyle := cnf;
twtrpr.Update();
end
'lastRow':
begin
node := _getRowNode(Rows()-1);
trPr := node.FirstChild('w:trPr');
twtrpr := TOfficeObj('TwTrPr');
twtrpr.InitRootNode(trPr);
cnf.Val := 010000000000;
cnf.LastRow := 1;
twtrpr.CnfStyle := cnf;
twtrpr.Update();
end
end;
end
End;
Function _getTblStylePr(docx, id, ret);
Begin
style_obj := docx.StyleObject().GetStyleById(id);
if not ifObj(style_obj) then return;
tbl_style_pr := style_obj.Root().FirstChild('w:tblStylePr');
while ifObj(tbl_style_pr) do
begin
wtype := tbl_style_pr.GetAttribute('w:type');
ret[length(ret)] := wtype;
tbl_style_pr := tbl_style_pr.NextElement('w:tblStylePr');
end
base := style_obj.Value('BasedOn');
_getTblStylePr(docx, base, ret);
End;
Function _getRowNode(row);
Begin
node := node_.FirstChild('w:tr');
while row and ifObj(node) do
begin
row--;
node := node.NextElement('w:tr');
end
return node;
End;
Function _getLeft(row, iCol, left2);
Begin
for i:=iCol downto 1 do Begin
c := Cell(row, i);
if ifObj(c) then Begin
if i < left2 then
left2 := i;
break;
End;
End;
return left2;
End;
Function _getRight(row, iCol, right2);
Begin
for i:=iCol to iCol_ do Begin
c := Cell(row, i);
if ifObj(c) then
break;
if i > right2 then
right2 := i;
End;
return right2;
End;
Function _getTop(top, iCol, top2);
Begin
for i:=top downto 1 do Begin
c := Cell(i, iCol);
if ifObj(c) and c.mergeSpan_ < 1 then Begin
break;
End;
if i < top2 then
top2 := i;
End;
return top2;
End;
Function _getBottom(bottom, rowCount, iCol, bottom2);
Begin
for i:=bottom to rowCount do Begin
c := Cell(i, iCol);
if ifObj(c) and c.mergeSpan_ < 1 then Begin
break;
End;
if i > bottom2 then
bottom2 := i;
End;
return bottom2;
End;
Function _getVSpan(node);
Begin
vMerge := class(TSXml).GetNode(node, 'w:tcPr/w:vMerge');
if ifObj(vMerge) and vMerge.GetAttribute('w:val') in array('restart', 'continue') then Begin
nSpan := class(TSXml).GetNode(node, 'w:tcPr/w:gridSpan');
if ifObj(nSpan) then Begin
return strtoint(nSpan.GetAttribute('w:val'));
End;
End;
return -1;
End;
Function getBlockWidth(docx);
Begin
sectPr := docx.Body().node_.FirstChildElement('w:sectPr');
try
width := sectPr.FirstChildElement('w:pgSz').GetAttribute('w:w');
left := sectPr.FirstChildElement('w:pgMar').GetAttribute('w:left');
right := sectPr.FirstChildElement('w:pgMar').GetAttribute('w:right');
return strtoint(width) - strtoint(left) - strtoint(right);
except
End;
return strtoint(width);
End;
iCol_:integer;
cells_;
Data_;
colCount_;
colWidth_;
paragraph_;//缺省单元格段落格式、字体格式
End;
Type TCoreProperties = Class(DocObject)
Property Author read readAuthor write writeAuthor;
Property Category read readCategory write writeCategory;
Property Description read readDescription write writeDescription;
Property Subject read readSubject write writeSubject;
Property Title read readTitle write writeTitle;
Property Version read readVersion write writeVersion;
Property Rversion read readRversion write writeRversion;
Property KeyWords read readKeyWords write writeKeyWords;
Property Created read readCreated write writeCreated;
Property Modified read readModified write writeModified;
Property LastModifiedBy read readLastModifiedBy write writeLastModifiedBy;
private
Function readAuthor();
Begin
return propValue('dc:creator');
End;
Function readCategory();
Begin
return propValue('cp:category');
End;
Function readDescription();
Begin
return propValue('dc:description');
End;
Function readSubject();
Begin
return propValue('dc:subject');
End;
Function readTitle();
Begin
return propValue('dc:title');
End;
Function readVersion();
Begin
return propValue('cp:version');
End;
Function readRversion();
Begin
return propValue('cp:rversion');
End;
Function readKeyWords();
Begin
return propValue('cp:keywords');
End;
Function readLastModifiedBy();
Begin
return propValue('cp:lastModifiedBy');
End;
Function readCreated();
Begin
return propValue('dcterms:created');
End;
Function readModified();
Begin
return propValue('dcterms:modified');
End;
Function propValue(k);
Begin
node := class(TSXml).GetNode(node_, k);
if not ifObj(node) then return '';
return class(TSXml).Utf8ToCurCodePage( node.GetText() );
End;
Function propNode(k);
Begin
n := node_.FirstChildElement(k);
if ifObj(n) then return n;
return node_.InsertEndChild('element', k);
End;
Function writeAuthor(v);
Begin
return propNode('dc:creator').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeCategory(v);
Begin
return propNode('cp:category').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeDescription(v);
Begin
return propNode('dc:description').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeSubject(v);
Begin
return propNode('dc:subject').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeTitle(v);
Begin
return propNode('dc:title').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeVersion(v);
Begin
return propNode('cp:version').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeRversion(v);
Begin
return propNode('cp:rversion').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeKeyWords(v);
Begin
return propNode('cp:keywords').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeLastModifiedBy(v);
Begin
return propNode('cp:lastModifiedBy').SetValue(class(TSXml).CurCodePageToUtf8(v));
End;
Function writeCreated(v);
Begin
return propNode('dcterms:created').SetValue(class(TSXml).GetDatetimeStr(v));
End;
Function writeModified(v);
Begin
return propNode('dcterms:modified').SetValue(class(TSXml).GetDatetimeStr(v));
End;
End;
//w:latentStyles
// Attributes(w:name、w:count、w:defLockedState、w:defQFormat、w:defSemiHidden、w:defUIPriority、w:defUnhideWhenUsed)
//w:style
// 'w:name', 'w:aliases', 'w:basedOn', 'w:next', 'w:link',
// 'w:autoRedefine', 'w:hidden', 'w:uiPriority', 'w:semiHidden',
// 'w:unhideWhenUsed', 'w:qFormat', 'w:locked', 'w:personal',
// 'w:personalCompose', 'w:personalReply', 'w:rsid', 'w:pPr', 'w:rPr',
// 'w:tblPr', 'w:trPr', 'w:tcPr', 'w:tblStylePr'
Type TDocxStyle = Class(TDocxStyleImpl)
Function Create(); overload;
Begin
create(nil);
End;
Function Create(node); overload;
Begin
Init(node);
Class(TDocxStyleImpl).Create(nil, 'w:style');
End;
Function Init(node);
Begin
if ifObj(node) then Begin
node_ := node;
wType := node.GetAttribute('w:type');
styleId := node.GetAttribute('w:styleId');
nameObj := node.FirstChildElement('w:name');
if ifObj(nameObj) then
Name := nameObj.GetAttribute('w:val');
InitRootNode(node);
End;
End;
///显示大纲级别
Function HeadingLevel();
Begin
node := class(TSXml).GetNode(node_, 'w:pPr/w:outlineLvl');
if ifObj(node) then
return node.GetAttribute('w:val');
return '';
End;
Function ReadPprFormat();
Begin
if ifObj(pPr_) then
return pPr_;
pPr_ := Class(TSXml).ReadPprFormat(node_);
return pPr_;
End;
Function ReadRprFormat();
Begin
if ifObj(rPr_) then
return rPr_;
rPr_ := Class(TSXml).ReadRprFormat(node_);
return rPr_;
End;
Function Apply();
Begin
if ifObj(rPr_) then Begin
arr := rPr_.Marshal();
if length(arr['attributes']) or length(arr['children']) then Begin
class(TSXml).UpdateNode(rPr_.Root(), arr['attributes'], arr['children']);
End;
End;
if ifObj(pPr_) then Begin
arr := pPr_.Marshal();
if length(arr['attributes']) or length(arr['children']) then Begin
class(TSXml).UpdateNode(pPr_.Root(), arr['attributes'], arr['children']);
End;
End;
arr := self.Marshal();
if length(arr['attributes']) or length(arr['children']) then Begin
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
End;
End;
node_;
pPr_;
rPr_;
End;
Type TNumStyle = Class(TNumStyleImpl)
Function Create(); overload;
Begin
create(nil);
End;
Function Create(node); overload;
Begin
Init(node);
Class(TNumStyleImpl).Create(nil, 'w:num');
End;
Function Init(node);
Begin
if ifObj(node) then Begin
node_ := node;
abstractNumId := node.GetAttribute('w:abstractNumId');
typeNode := node.FirstChildElement('w:multiLevelType');
if ifObj(typeNode) then
multiLevelType := typeNode.GetAttribute('w:val');
fmtNode := class(TSXml).GetNode(node, 'w:lvl/w:numFmt');
if ifObj(fmtNode) then
numFmt := fmtNode.GetAttribute('w:val');
InitRootNode(node);
End;
End;
Function Root();override;
Begin
return node_;
End;
///数字项目编号样式ID
Function Id();
Begin
return abstractNumId;
End;
///数字项目编号字符串
Function GetText(ilvl, arr);
Begin
if numFmt = 'bullet' then
return '';
if not ifarray(levels_) then Begin
levels_ := array();
node := node_.FirstChildElement('w:lvl');
while ifObj(node) do Begin
startObj := node.FirstChildElement('w:start');
fmtObj := node.FirstChildElement('w:numFmt');
textObj := node.FirstChildElement('w:lvlText');
start := ifObj(startObj) ? Class(TSXml).SafeStrToIntDef(startObj.GetAttribute('w:val'), 1) : 1;
fmt := ifObj(fmtObj) ? fmtObj.GetAttribute('w:val') : '';
lvlText := ifObj(textObj) ? textObj.GetAttribute('w:val') : '';
levels_[length(levels_)] := array('node':node, 'text':lvlText, 'numFmt':fmt, 'start':start);
node := node.NextElement('w:lvl');
End;
End;
if ilvl < 0 or ilvl >= length(levels_) then
return '';
str := levels_[ilvl]['text'];
for i:=ilvl downto 0 do Begin
srcFmt := '%' $ (i + 1);
destStr := _getNumStr(arr[i], levels_[i]['numFmt'], levels_[i]['start']-1);
str := ReplaceStr(str, srcFmt, destStr);
End;
return str;
End;
Function _getNumStr(index, fmt, start);
Begin
num := index + start;
if fmt = 'decimal' or num >= 10000 then //数字项目编号 14.1.1
return '' $ num;
//中文编号
chNum := array('零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九');
if num < 20 then
return chNum[num];
v4 := int(num/1000);
s4 := v4 ? chNum[v4] + '千' : '';
v3 := int((num % 1000) / 100);
s3 := v3 ? chNum[v3] + '百' : (s4 <> '' ? '零' : '');
v2 := int((num % 100) / 10);
s2 := v2 ? chNum[v2] + '十' : ((s4+s3) <> '' ? '零' : '');
v1 := num % 10;
s1 := v1 ? chNum[v1] : '';
if s3='零' and s2='零' then s3 := '';
if s1='' and s2='零' then s2 := '';
return s4 + s3 + s2 + s1;
End;
numFmt;
node_;
levels_;
End;
Function _getDocObject(node, name);
Begin
p := nil;
case name of
'w:del','w:ins':
p := new TRevision(node);
'w:p':
p := new TParagraph(node);
'w:tbl':
p := new TTable(node);
'w:r':
p := new TRun();
End;
if ifObj(p) then Begin
p.node_ := node;
p.name_ := name;
End;
return p;
End;
///返回全部列表
Function getDocumentObjects(parent, prefix);
Begin
ps := array();
node := parent.FirstChildElement();
while ifObj(node) do Begin
name := node.GetName();
if length(prefix) = 0 or (ifstring(prefix) and name = prefix) or (istable(prefix) and (name in prefix)) then Begin
p := _getDocObject(node, name);
if p = nil then Begin
p := new DocObject();
p.node_ := node;
p.name_ := name;
End;
ps[ length(ps) ] := p;
End;
node := node.NextElement();
End;
return ps;
End;
Function getDocumentObject(parent, prefix, index);
Begin
node := parent.FirstChildElement();
cnt := 0;
while ifObj(node) do Begin
name := node.GetName();
if length(prefix) = 0 or (ifstring(prefix) and name = prefix) or (istable(prefix) and (name in prefix)) then Begin
if cnt then Begin //第index个对象
p := _getDocObject(node, name);
if ifObj(p) then Begin
return p;
End;
End;
cnt ++;
End;
node := node.NextElement();
End;
return nil;
End;
Function _text(r);
Begin
txt := '';
for i:= 0 to length(r)-1 do Begin
if i and r[i]['pIndex'] > 0 and r[i]['pIndex'] <> r[i-1]['pIndex'] then
txt += '\n';
if ifObj(r[i]['rNode']) then Begin
run := new TRun(r[i]['rNode']);
txt += run.Text();
End;
End;
return txt;
End;
Function _getHanging(linesCnt, pPr);
Begin
wth := pPr.LeftIndent + pPr.RightIndent;
if linesCnt = 0 then Begin
if pPr.Hanging then
wth -= pPr.Hanging;
else if pPr.FirstLineIndent then
wth += pPr.FirstLineIndent;
End;
//_dumpPpr(pPr);
//println('>>>>>行首lines={}, wth={}', linesCnt, wth);
return wth;
End;
Function _dumpPpr(pPr);
Begin
if not ifObj(pPr) then
return println('pPr is null');
println('SpaceBefore={},SpaceAfter={},LineSpacing={},LineSpacingRule={},Left={},Right={},Hanging={},FirstLineIndent={}',
pPr.SpaceBefore, pPr.SpaceAfter, pPr.LineSpacing,pPr.LineSpacingRule,pPr.LeftIndent,pPr.RightIndent,pPr.Hanging,pPr.FirstLineIndent);
End;
Function _dumpRpr(rPr);
Begin
if not ifObj(rPr) then
return println('rPr is null');
println('sz={},szCs={},hint={},eastAsia={}',
rPr.Size,rPr.szCs,rPr.rFont.hint,rPr.rFont.eastAsia);
End;
//文本前后是否包含空格
Function _preserve(str);
Begin
if not ifstring(str) then return false;
cnt := length(str);
spaceArr := array(' ',' ');
if cnt and (str[1] in spaceArr or (cnt > 1 and str[cnt] in spaceArr)) then
return true;
return false;
End;