@ -1,4 +1,4 @@
// Version 1.0.9
// Version 1.1.0
Function TOfficeObj(n);
Function TOfficeObj(n);
Begin
Begin
@ -3732,10 +3732,23 @@ type THyperLink=class(NodeInfo)
XMLTooltip := class(TSXml).CurCodePageToUtf8(str);
XMLTooltip := class(TSXml).CurCodePageToUtf8(str);
End;
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;
Function GetAttrs(); override;
Begin
Begin
HandleAttrs();
HandleAttrs();
return array(("LinkType", "linkType", LinkType, ""),("LinkUrl", "linkUrl", XMLLinkUrl, ""),("Axis", "ref", Axis, ""),("Display", "display", XMLDisplay, ""),("Tooltip", "tooltip", XMLTooltip, ""),("RId", "r:id", RId, ""),("Location", "location", Location, "")) union ExtAttr;
return array(("LinkType", "linkType", LinkType, ""),("LinkUrl", "linkUrl", XMLLinkUrl, ""),("Axis", "ref", Axis, ""),("Display", "display", XMLDisplay, ""),("Tooltip", "tooltip", XMLTooltip, ""),("RId", "r:id", RId, ""),("Location", "location", XML Location, "")) union ExtAttr;
End;
End;
Function GetChildren(); override;
Function GetChildren(); override;
@ -3751,7 +3764,7 @@ type THyperLink=class(NodeInfo)
XMLDisplay;
XMLDisplay;
XMLTooltip;
XMLTooltip;
RId;
RId;
Location;
XML Location;
//Nodes
//Nodes
End;
End;
@ -5593,7 +5606,7 @@ type TRunImpl=class(NodeInfo)
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"disable ", "class":"TwrPr")
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":"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":"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":"InstrText","name":"w:instrText","obj":InstrText,"attrEx":"","nodeType":"pcdata","attrName":"", "desc":"", "class":"")
@ -5739,7 +5752,7 @@ type TParagraphImpl=class(NodeInfo)
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"pPr","name":pPr.NodeName,"obj":pPr,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TwpPr")
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":"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":"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")
,("field":"markEnd","name":markEnd.NodeName,"obj":markEnd,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TBookMark")
@ -6307,10 +6320,10 @@ type TDocSectionImpl=class(NodeInfo)
,("field":"pgMar","name":pgMar.NodeName,"obj":pgMar,"attrEx":"","nodeType":"","attrName":"", "desc":"Page Margin设置", "class":"TPageMargin")
,("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":"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":"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":"titlePg","name":"w:titlePg","obj":titlePg,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether the parent section in this document shall have a different header and footer for its first page. ", "class":"")
,("field":"vAlign","name":"w:vAlign","obj":vAlign,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"vAlign","name":"w:vAlign","obj":vAlign,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies the vertical alignment for text on pages in the current section, relative to the top and bottom margins in the main document story on each page. ", "class":"")
,("field":"Type","name":"w:type","obj":Type,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"Type","name":"w:type","obj":Type,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies the type of the current section. The section type specifies how the contents of the current section shall be placed relative to the previous section. ", "class":"")
,("field":"textDirection","name":"w:textDirection","obj":textDirection,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"textDirection","name":"w:textDirection","obj":textDirection,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies the direction of the text flow for this section. ", "class":"")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -6433,9 +6446,9 @@ type TwTcPr=class(NodeInfo)
,("field":"noWrap","name":"w:noWrap","obj":noWrap,"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":"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":"textDirection","name":"w:textDirection","obj":textDirection,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TOptInfo")
,("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":"", "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":"", "class":"TcellMerge")
,("field":"cellMerge","name":cellMerge.NodeName,"obj":cellMerge,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格属性 ", "class":"TcellMerge")
,("field":"vAlign","name":"w:vAlign","obj":vAlign,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("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":"")
,("field":"vmerge","name":"w:vmerge","obj":vmerge,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
) union ExtNodes;
) union ExtNodes;
@ -6545,7 +6558,7 @@ type TwTrPr=class(NodeInfo)
,("field":"gridBefore","name":"w:gridBefore","obj":gridBefore,"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":"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":"tblHeader","name":"w:tblHeader","obj":tblHeader,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TOptInfo")
,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"disable ", "class":"TOptInfo")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -6988,7 +7001,7 @@ type TwTblPr=class(NodeInfo)
,("field":"Autofit","name":"w:tblLayout","obj":Autofit,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"Autofit","name":"w:tblLayout","obj":Autofit,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"CellMar","name":CellMar.NodeName,"obj":CellMar,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格边距设置", "class":"TTblCellMar")
,("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":"Overlap","name":"w:tblOverlap ","obj":Overlap,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"tblpPr","name":tblpPr.NodeName,"obj":tblpPr,"attrEx":"","nodeType":"","attrName":"", "desc":"disable ", "class":"TwTblpPr")
,("field":"tblpPr","name":tblpPr.NodeName,"obj":tblpPr,"attrEx":"","nodeType":"","attrName":"", "desc":"表格样式 ", "class":"TwTblpPr")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -7351,11 +7364,11 @@ type TtblStylePr=class(NodeInfo)
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"pPr","name":pPr.NodeName,"obj":pPr,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TwpPr")
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":"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":"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":"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":"TcPr","name":TcPr.NodeName,"obj":TcPr,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格属性 ", "class":"TwTcPr")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -7398,34 +7411,34 @@ type TDocxStyleImpl=class(NodeInfo)
Function GetAttrs(); override;
Function GetAttrs(); override;
Begin
Begin
HandleAttrs();
HandleAttrs();
return array(("StyleID", "w:styleId", StyleID, ""),("Default", "w:default", Default, ""),("wType", "w:type", wType, ""),("CustomStyle ", "w:customStyle ", CustomStyle , "")) union ExtAttr;
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;
End;
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"Name","name":"w:name","obj":Name,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
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":"Aliases","name":"w:aliases","obj":Aliases,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies the set of alternative names for the parent style definition. ", "class":"")
,("field":"AutoRedefine","name":"w:autoRedefine","obj":AutoRedefine,"attrEx":"","nodeType":"empty","attrName":"", "desc":"", "class":"")
,("field":"AutoRedefine","name":"w:autoRedefine","obj":AutoRedefine,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether an application shall automatically modify this style when the contents of an entire paragraph in the document with this style applied are modified, ensuring that although only a single instance of text with this style was modified, that change is stored on the style and therefore propagated to all locations where the style is in use. ", "class":"")
,("field":"BasedOn","name":"w:basedOn","obj":BasedOn,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"BasedOn","name":"w:basedOn","obj":BasedOn,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies the style ID of the parent style from which this style inherits in the style inheritance. The style inheritance refers to a set of styles which inherit from one another to produce the resulting set of properties for a single style. The val attribute of this element specifies the styleId attribute for the parent style in the style inheritance. ", "class":"")
,("field":"Hidden","name":"w:hidden","obj":Hidden,"attrEx":"","nodeType":"empty","attrName":"", "desc":"", "class":"")
,("field":"Hidden","name":"w:hidden","obj":Hidden,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether this style shall be hidden from any and all user interfaces when this document is loaded by an application. If this element is set, then this style may be used to format content (i.e. any content which references this style shall have its properties as normal), but the style shall be hidden from all user interface associated with that application. [Note: This setting is typically used to hide styles which are being used internally by an application which should not be used as formatting in a typical case. end note] ", "class":"")
,("field":"Link","name":"w:link","obj":Link,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"Link","name":"w:link","obj":Link,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"Linked Style Reference ", "class":"")
,("field":"Locked","name":"w:locked","obj":Locked,"attrEx":"","nodeType":"empty","attrName":"", "desc":"", "class":"")
,("field":"Locked","name":"w:locked","obj":Locked,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether an application shall prevent the use of this style when this document is loaded and/or modified. If this element is set, then this style may be used to format existing content (i.e. any content which references this style shall have its properties as normal), but new instances of the style shall be prevented from being applied via all mechanisms associated with that application. ", "class":"")
,("field":"Next","name":"w:b","obj":Next,"attrEx":"","nodeType":"empty","attrName":"", "desc":"", "class":"")
,("field":"Next","name":"w:b","obj":Next,"attrEx":"","nodeType":"empty","attrName":"", "desc":"Style For Next Paragraph ", "class":"")
,("field":"Personal","name":"w:personal","obj":Personal,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"Personal","name":"w:personal","obj":Personal,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies that the parent style, when in use in the context of an e-mail message, was used by default to format all message text from one or more users. [Note: This setting does not provide any additional semantic about the style, but may be used in the context of e-mail to automatically reformat the contents of the e-mail message while ignoring any content to which styles were deliberately applied (since this style was implicitly applied to message text without user interaction). end note] ", "class":"")
,("field":"PersonalCompose","name":"w:personalCompose","obj":PersonalCompose,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"PersonalCompose","name":"w:personalCompose","obj":PersonalCompose,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies that the parent style, when in use in the context of an e-mail message, may be used by default to format new message text within the e-mail message. [Note: This setting does not provide any additional semantic about the style, but may be used in the context of e-mail to automatically format the contents of new test in the e-mail message. end note] ", "class":"")
,("field":"PersonalReply","name":"w:personalReply","obj":PersonalReply,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"PersonalReply","name":"w:personalReply","obj":PersonalReply,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies that the parent style, when in use in the context of an e-mail message, may be used by default to format existing message text within the e-mail message when a new reply is generated. [Note: This setting does not provide any additional semantic about the style, but may be used in the context of e-mail to automatically format the contents of existing test in the e-mail message. end note] ", "class":"")
,("field":"QFormat","name":"w:qFormat","obj":QFormat,"attrEx":"","nodeType":"empty","attrName":"", "desc":"", "class":"")
,("field":"QFormat","name":"w:qFormat","obj":QFormat,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether this style shall be treated as a primary style when this document is loaded by an application. If this element is set, then this style has been designated as being particularly important for the current document, and this information may be used by an application in any means desired. [Note: This setting does not imply any behavior for the style, only that the style is of particular significance for this document. end note] ", "class":"")
,("field":"TblStyle","name":TblStyle.NodeName,"obj":TblStyle,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TtblStylePr")
,("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":"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":"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":"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":"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":"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":"", "class":"")
,("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":"SemiHidden","name":"w:semiHidden","obj":SemiHidden,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether this style shall be hidden from the main user interface when this document is loaded by an application. If this element is set, then this style may be used to format content (i.e. any content which references this style shall have its properties as normal), but the style shall be hidden from the main user interface associated with that application. ", "class":"")
,("field":"UiPriority","name":"w:uiPriority","obj":UiPriority,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
,("field":"UiPriority","name":"w:uiPriority","obj":UiPriority,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"This element specifies a number which may be used to sort the set of style definitions in a user interface when this document is loaded by an application and the recommended setting is specified in the stylePaneSortMethod element (§2.15.1.87). If this element is set, then this priority shall be used to sort all available styles in ascending value order. ", "class":"")
,("field":"UnhideWhenUsed","name":"w:unhideWhenUsed","obj":UnhideWhenUsed,"attrEx":"","nodeType":"empty","attrName":"", "desc":"", "class":"")
,("field":"UnhideWhenUsed","name":"w:unhideWhenUsed","obj":UnhideWhenUsed,"attrEx":"","nodeType":"empty","attrName":"", "desc":"This element specifies whether the semiHidden property (§2.7.3.16) shall be removed when this style is used by the content of the document. If this element is set, then an application shall ensure that even if the semiHidden element is specified on a style, that this property is removed when the document is resaved if the style is referenced by any content in the document. ", "class":"")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -7532,7 +7545,7 @@ type TStdPr=class(NodeInfo)
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TwrPr")
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":"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")
,("field":"docPartObj","name":docPartObj.NodeName,"obj":docPartObj,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TDocPartObj")
) union ExtNodes;
) union ExtNodes;
@ -7576,7 +7589,7 @@ type TStdEndPr=class(NodeInfo)
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TwrPr")
return array(("field":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"字体属性 ", "class":"TwrPr")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -7814,17 +7827,17 @@ type TLevel=class(NodeInfo)
Function GetAttrs(); override;
Function GetAttrs(); override;
Begin
Begin
HandleAttrs();
HandleAttrs();
return array(("ilvl", "w:ilvl", ilvl, ""),("tentative", "w:tentative", tentative, "")) union ExtAttr;
return array(("ilvl", "w:ilvl", ilvl, "内容是否包含小数。 "),("tentative", "w:tentative", tentative, "")) union ExtAttr;
End;
End;
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"start","name":"w:start","obj":start,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
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":"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":"", "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":"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":"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":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"字体属性", "class":"TwrPr")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -7866,16 +7879,16 @@ type TNumStyleImpl=class(NodeInfo)
Function GetAttrs(); override;
Function GetAttrs(); override;
Begin
Begin
HandleAttrs();
HandleAttrs();
return array(("abstractNumId", "w:abstractNumId", abstractNumId, "")) union ExtAttr;
return array(("abstractNumId", "w:abstractNumId", abstractNumId, "latentStyles编号ID(编号段落的外观和行为) ")) union ExtAttr;
End;
End;
Function GetChildren(); override;
Function GetChildren(); override;
Begin
Begin
HandleChildren();
HandleChildren();
return array(("field":"nsid","name":"w:nsid","obj":nsid,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"")
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":"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":"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")
,("field":"lvl","name":lvl.NodeName,"obj":lvl,"attrEx":"","nodeType":"","attrName":"", "desc":"编号级别的外观和行为 ", "class":"TLevel")
) union ExtNodes;
) union ExtNodes;
End;
End;
@ -8181,7 +8194,7 @@ Type DocObject = Class
node2 := node.InsertEndChild('element', 'w:r');
node2 := node.InsertEndChild('element', 'w:r');
End;
End;
run := new TRun(node2);
run := new TRun(node2);
run.SetText(obj.InsText, true);
run.SetText(obj.InsText_ , true);
obj.Init(node);
obj.Init(node);
return true;
return true;
End;
End;
@ -8467,6 +8480,17 @@ Type TRevision = Class(DocObject, TRevisionImpl)
Class(TRevisionImpl).Create(nil, name_);
Class(TRevisionImpl).Create(nil, name_);
End;
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'
///返回: string, 删除:'del'、添加:'ins'
Function Act();
Function Act();
@ -8522,7 +8546,7 @@ Type TRevision = Class(DocObject, TRevisionImpl)
CommentID:integer;
CommentID:integer;
sPos:integer;
sPos:integer;
SelectLength:integer;
SelectLength:integer;
InsText:string;
InsText_ :string;
End;
End;
Type TDocComment = Class(TDocCommentImpl)
Type TDocComment = Class(TDocCommentImpl)
@ -9058,15 +9082,6 @@ Type TRun = Class(DocObject, TRunImpl)
AddText(str, true);
AddText(str, true);
End;
End;
Function _preserve(str);
Begin
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;
Function _insertText(txt, first);
Function _insertText(txt, first);
Begin
Begin
lines := str2array(txt,'\n');
lines := str2array(txt,'\n');
@ -10814,86 +10829,6 @@ Type TDocumentBody = Class(DocObject)
return tbl;
return tbl;
End;
End;
///创建数据表
///data: table, 数据表
///[IncludeHeader: bool] 是否包括表头, 默认FALSE
///[IncludeIndex: bool] 是否自动添加索引号, 默认FALSE
///返回: tbl TTable对象
Function CreateTable(data, IncludeHeader, IncludeIndex);
Begin
if not IsTable(data) then
raise "Invalid 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;
tbl := new TTable();
//tbl.TblPr.StyleId := 'Normal Table';
tbl.TblPr.Width := 0;
tbl.TblPr.WidthType := 'auto';
tbl.TblPr.Borders.Top.Val := 'single';
tbl.TblPr.Borders.Left.Val := 'single';
tbl.TblPr.Borders.Bottom.Val := 'single';
tbl.TblPr.Borders.Right.Val := 'single';
tbl.TblPr.Borders.InsideH.Val := 'single';
tbl.TblPr.Borders.InsideV.Val := 'single';
tbl.TblPr.CellMar.Top := 0;
tbl.TblPr.CellMar.Left := 108;
tbl.TblPr.CellMar.Bottom := 0;
tbl.TblPr.CellMar.Right := 108;
tbl.TblPr.CellMar.TopType := 'dxa';
tbl.TblPr.CellMar.LeftType := 'dxa';
tbl.TblPr.CellMar.BottomType := 'dxa';
tbl.TblPr.CellMar.RightType := 'dxa';
//tbl.TblPr.FirstColumn := 1;
//tbl.TblPr.FirstRow := 1;
//tbl.TblPr.LastColumn := 0;
//tbl.TblPr.LastRow := 0;
//tbl.TblPr.NoVBand := 1;
//tbl.TblPr.NoHBand := 0;
//tbl.TblPr.Val := '04A0';
width := getBlockWidth();
[rowCount, colCount] := MSize(data);
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;
tbl.TblGrid.GridCol := gridArr;
trArr := array();
for i:=0 to length(data)-1 do Begin
tr := new TWtr();
trArr union= array(('name':'w:tr','obj':tr,'attrEx':'','nodeType':'','attrName':''));
tcArr := array();
for j:=0 to colCount-1 do Begin
tc := new TCell();
tcArr union= array(('name':'w:tc','obj':tc,'attrEx':'','nodeType':'','attrName':''));
tc.TcPr.Width := colWidth;
tc.TcPr.Type := 'dxa';
tc.SetText(data[i, j]);
End;
tr.Tc := tcArr;
End;
tbl.TR := trArr;
return tbl;
End;
///插入数据表
///插入数据表
///tbl: TTable对象
///tbl: TTable对象
///[posOpt: 段落位置], 0 在DOCX文件开头; -1 文件尾; N 在第N段之后; DocumentPart对象 在posOpt之后新添加表格
///[posOpt: 段落位置], 0 在DOCX文件开头; -1 文件尾; N 在第N段之后; DocumentPart对象 在posOpt之后新添加表格
@ -10905,31 +10840,84 @@ Type TDocumentBody = Class(DocObject)
if ifObj(tblBorders) or ifObj(tblCellMar) then Begin
if ifObj(tblBorders) or ifObj(tblCellMar) then Begin
borders := ifObj(tblBorders) ? tblBorders.Marshal() : nil;
borders := ifObj(tblBorders) ? tblBorders.Marshal() : nil;
cellmar := ifObj(tblCellMar) ? tblCellMar.Marshal() : nil;
cellmar := ifObj(tblCellMar) ? tblCellMar.Marshal() : nil;
tr := tbl.node_.FirstChildElement('w:tr');
End;
while ifObj(tr) do 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';
defaultpPr := defaultParagraph.pPr.Marshal();
defaultrPr := defaultParagraph.Run.rPr.Marshal();
for i:=0 to length(tbl.Data_)-1 do Begin
trNode := tbl.node_.InsertEndChild('element', 'w:tr');
multiLine := false;
if ifstring(tbl.Data_[i, j]) and Pos('\n', tbl.Data_[i, j]) then
multiLine := true;
for j:=0 to tbl.colCount_-1 do 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());
//tc := 0;
tcNode := trNode.InsertEndChild('element', 'w:tc');
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');
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');
pNode.InsertEndChild(defaultpPr);
rNode := pNode.InsertEndChild('element', 'w:r');
rNode.InsertEndChild(defaultrPr);
tNode := rNode.InsertEndChild('element','w:t', 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
if ifObj(tblCellMar) then Begin
c := class(TSXml).GetNode(tr, 'w:tblPrEx/w:tblCellMar', 'first');
c := class(TSXml).GetNode(trNode , 'w:tblPrEx/w:tblCellMar', 'first');
class(TSXml).UpdateNode(c, cellmar[0]['attributes'], cellmar[0]['children']);
class(TSXml).UpdateNode(c, cellmar[0]['attributes'], cellmar[0]['children']);
End;
End;
if ifObj(tblBorders) then Begin
if ifObj(tblBorders) then Begin
b := class(TSXml).GetNode(tr, 'w:tblPrEx/w:tblBorders', 'first');
b := class(TSXml).GetNode(trNode , 'w:tblPrEx/w:tblBorders', 'first');
class(TSXml).UpdateNode(b, borders[0]['attributes'], borders[0]['children']);
class(TSXml).UpdateNode(b, borders[0]['attributes'], borders[0]['children']);
End;
End;
tr := tr.NextElement('w:tr');
End;
End;
End;
node_.Parent().SetAttribute('mc:Ignorable', 'w14 w15 wp14');
node_.Parent().SetAttribute('mc:Ignorable', 'w14 w15 wp14');
node_.Parent().SetAttribute('xmlns:w15', 'http://schemas.microsoft.com/office/word/2012/wordml');
node_.Parent().SetAttribute('xmlns:w15', 'http://schemas.microsoft.com/office/word/2012/wordml');
//last := node_.InsertAfterChild(tbl.node_, 'element', 'w:p');
_set_lastParagraph_(tbl.node_);
_set_lastParagraph_(tbl.node_);
p := new TTable(tbl.node_);
p := new TTable(tbl.node_);
//node := node_.FirstChildElement('w:sectPr');
//node.DeleteAttribute('w:rsidSect');
//node.DeleteAttribute('w:rsidRPr');
//node.DeleteAttribute('w:rsidR');
//cols := node.FirstChildElement('w:cols');
//cols.SetAttribute('w:num',1);
return p;
return p;
End;
End;
@ -11555,19 +11543,6 @@ Type TDocumentBody = Class(DocObject)
return txt;
return txt;
End;
End;
Function getBlockWidth();
Begin
sectPr := 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;
Function _set_lastParagraph_(node);
Function _set_lastParagraph_(node);
Begin
Begin
if not ifObj(lastParagraph_) then Begin
if not ifObj(lastParagraph_) then Begin
@ -11748,6 +11723,26 @@ Type TDocSection = Class(DocObject, TDocSectionImpl)
node := node_.InsertFirstChild('element', headerFooter = 'header' ? 'w:headerReference' : 'w:footerReference');
node := node_.InsertFirstChild('element', headerFooter = 'header' ? 'w:headerReference' : 'w:footerReference');
node.SetAttribute('w:type', hfType);
node.SetAttribute('w:type', hfType);
node.SetAttribute('r:id', 'rId'$rid);
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);//返回页脚、页眉对象
return new TDocHeaderFooter(rid, zipfile_.Get(fname), name);//返回页脚、页眉对象
End;
End;
@ -11979,12 +11974,13 @@ Type TTable = Class(DocObject, TTableImpl)
col := row.FirstChildElement('w:tc');
col := row.FirstChildElement('w:tc');
iCol := 0;
iCol := 0;
while ifObj(col) do Begin
while ifObj(col) do Begin
c := new TCell(col);
// c := new TCell(col);
cells_[iRow, iCol] := c;
cells_[iRow, iCol] := array( col, 0) ;
iCol ++;
iCol ++;
mergeSpan := _getVSpan(col);//合并单元格
mergeSpan := _getVSpan(col);//合并单元格
if mergeSpan > 0 then Begin
if mergeSpan > 0 then Begin
c.mergeSpan_ := mergeSpan;
//c.mergeSpan_ := mergeSpan;
cells_[iRow, iCol, 1] := mergeSpan;
for j:=1 to mergeSpan-1 do Begin
for j:=1 to mergeSpan-1 do Begin
cells_[iRow, iCol] := nil;
cells_[iRow, iCol] := nil;
iCol ++;
iCol ++;
@ -11998,6 +11994,69 @@ Type TTable = Class(DocObject, TTableImpl)
End;
End;
End;
End;
///设置表格数据
///data: table, 数据表
///[IncludeHeader: bool] 是否包括表头, 默认FALSE
///[IncludeIndex: bool] 是否自动添加索引号, 默认FALSE
Function SetData(docx, data, IncludeHeader, IncludeIndex);
Begin
if not IsTable(data) then
raise "Invalid 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 := 'Normal Table';
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;
Property Format read readFormat;
Property Format read readFormat;
Function readFormat();
Function readFormat();
Begin
Begin
@ -12033,21 +12092,18 @@ Type TTable = Class(DocObject, TTableImpl)
Function Cell(row, col);
Function Cell(row, col);
Begin
Begin
if row > length(cells_) then return nil;
if row > length(cells_) then return nil;
return cells_[row-1, col-1];
c := cells_[row-1, col-1];
if ifNil(c) then return nil;
cellObj := new TCell(c[0]);
cellObj.mergeSpan_ := c[1];
return cellObj;
End;
End;
///设置列宽
///设置列宽
Function ColumnWidth(n, wth);
Function ColumnWidth(n, wth);
Begin
Begin
if n >0 and n <= length(TblGrid.GridCol) then Begin
if n >0 and n <= length(TblGrid.GridCol) then
TblGrid.GridCol[n-1]['obj'].W := wth;
TblGrid.GridCol[n-1]['obj'].W := wth;
for i:=0 to length(TR)-1 do Begin
r := TR[i]['obj'];
if n <= length(r.TC) then Begin
r.TC[n-1]['obj'].TcPr.Width := wth;
End;
End;
End;
End;
End;
///合并单元格
///合并单元格
@ -12200,8 +12256,24 @@ Type TTable = Class(DocObject, TTableImpl)
return -1;
return -1;
End;
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;
iCol_:integer;
cells_;
cells_;
Data_;
colCount_;
colWidth_;
End;
End;
Type TCoreProperties = Class(DocObject)
Type TCoreProperties = Class(DocObject)
@ -12620,6 +12692,17 @@ Begin
return println('rPr is null');
return println('rPr is null');
println('sz={},szCs={},hint={},eastAsia={}',
println('sz={},szCs={},hint={},eastAsia={}',
rPr.Size,rPr.szCs,rPr.rFont.hint,rPr.rFont.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;///////////////////////////////////////////////////////////////////////////////////////////
End;///////////////////////////////////////////////////////////////////////////////////////////
///XLSX文档实现
///XLSX文档实现