From 1873f9bf27996202f016857e45274432eea640e2 Mon Sep 17 00:00:00 2001 From: csh Date: Mon, 16 Jan 2023 14:59:53 +0800 Subject: [PATCH] v1.1.0 --- Demo/wordHelp.tsl | 38 +- DocxFile使用帮助.docx | Bin 73550 -> 78327 bytes ExcelFile使用帮助.xlsx | Bin 24132 -> 24238 bytes funcext/TSOffice/TOfficeObj.tsf | 457 ++++++++++++-------- funcext/TSOffice/TSDocxFile.tsf | 12 +- funcext/TSOffice/TSExcelFile.tsf | 10 +- funcext/TSOffice/TSUtils/TSXml.tsf | 6 +- funcext/TSOffice/document/TDocxStyles.tsf | 5 +- funcext/TSOffice/template/faq.txt | 12 +- funcext/TSOffice/worksheet/xlsxTable.tsf | 18 +- funcext/TSOffice/worksheet/xlsxWorkBook.tsf | 130 +++++- 更新日志.md | 14 + 12 files changed, 483 insertions(+), 219 deletions(-) diff --git a/Demo/wordHelp.tsl b/Demo/wordHelp.tsl index dc6c21c..ef8393c 100644 --- a/Demo/wordHelp.tsl +++ b/Demo/wordHelp.tsl @@ -160,12 +160,10 @@ Begin _AddTitle(docx, 'TParagraph对象(段落)', 1); //第三段标题 ///TParagraph属性 - _AddTitle(docx, 'TParagraph属性', 2); //第二级标题 - attrs := array(('类别':'缺省w:r元素', '接口':'Run', '说明':'TRun对象')); - formatObj := new TOfficeObj('TwpPr'); - _LoadObjectAttributes(formatObj, attrs, '段落属性', 'Format'); - fontObj := new TOfficeObj('TwrPr'); - _LoadObjectAttributes(fontObj, attrs, '字体属性', 'Font'); + _AddTitle(docx, 'TParagraph属性(段落属性TwpPr对象、字体属性TwrPr对象)', 2); //第二级标题 + attrs := array(('类别':'缺省w:r元素', '接口':'Run', '说明':'TRun对象'), + ('类别':'段落属性', '接口':'Format', '说明':'TwpPr对象'), + ('类别':'字体属性', '接口':'Font', '说明':'TwrPr对象')); _AddClassHelpTable(docx, attrs);//添加表格:TParagraph属性 ///TParagraph方法 @@ -242,11 +240,11 @@ Begin _AddTitle(docx, 'TPicture对象属性', 2); attrs := array(('类别':'图片信息', '接口':'Image', '说明':'二进制内容'), ('类别':'图片信息', '接口':'Descr', '说明':'图像描述'), - ('类别':'图片信息', '接口':'Width', '说明':'图像宽度'), - ('类别':'图片信息', '接口':'Height', '说明':'图像高度') + ('类别':'图片信息', '接口':'Width', '说明':'图像宽度(cm)'), + ('类别':'图片信息', '接口':'Height', '说明':'图像高度(cm)') ); - pPr := new TOfficeObj('TpicsPpr'); - _LoadObjectAttributes(pPr, attrs, '图像属性', 'Format'); + //pPr := new TOfficeObj('TpicsPpr'); + //_LoadObjectAttributes(pPr, attrs, '图像属性', 'Format'); _AddClassHelpTable(docx, attrs);//添加表格:TPicture对象 ///TPicture方法 @@ -624,6 +622,12 @@ Begin conf := _LoadClassInfo(docx.GetPath() + '\\funcext\\TSOffice\\document\\TDocxStyles.tsf', 'TDocxStyles'); _AddFunctionHelpInfo(docx, '' $ paragraph $ '.1.', conf, 3); + _AddTitle(docx, '样式(TDocxStyle)', 2); //第二级标题 + attrs := array(); + formatObj := new TOfficeObj('TDocxStyle'); + _LoadObjectAttributes(formatObj, attrs, '样式', ''); + _AddClassHelpTable(docx, attrs); + println(' >>OK\n'); End; @@ -814,7 +818,7 @@ Function _16_Template(docx); Begin paragraph := sysparams['Test']; _PrintMsg('报告模板(ExecInnerTSL)'); - _AddTitle(docx, 'ExecInnerTSL', 1); + _AddTitle(docx, '报告模板(docx.ExecInnerTSL())', 1); //添加段落 p := TOfficeObj('TParagraph'); @@ -959,9 +963,9 @@ Begin tbl.Format.Borders.Right.themeTint := '99'; //设置列宽 - tbl.ColumnWidth(1, 800); - tbl.ColumnWidth(2, 2000); - tbl.ColumnWidth(3, 2000); + tbl.ColumnWidth(1, 600); + tbl.ColumnWidth(2, 2100); + tbl.ColumnWidth(3, 2100); tbl.ColumnWidth(4, 6000); //设置表格左边距 @@ -969,7 +973,7 @@ Begin tbl.format.IndentType := 'dxa'; //tbl.TblPr.Style := 1; tbl := docx.InsertTable(tbl, -1); - + //设置表头底纹 rows := tbl.Rows(); cols := tbl.Cols(); @@ -989,7 +993,7 @@ Begin cell.Format.Shading.Fill := 'DBEEF3'; cell.Apply(); End; - + //合并单元格 fields := select distinct [1] as 'type' from data where thisrowindex > 0 end; for i:=0 to length(fields)-1 do begin @@ -1092,7 +1096,7 @@ Begin _AddTitle(docx, '附注一:内置对象', 1); //附注标题 ind := 1; - hash := array('TwpPr':1, 'TwrPr':1); + hash := array(); while i < length(r) do Begin attrs := array(); _LoadObjectAttributes(r[i]['obj'], attrs, '属性', ''); diff --git a/DocxFile使用帮助.docx b/DocxFile使用帮助.docx index d91ece60c11552c01664ebe43209ade64bfe9461..4d794f037990f24fa6614166c1aab466b3312502 100644 GIT binary patch delta 56648 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 z%0A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 diff --git a/ExcelFile使用帮助.xlsx b/ExcelFile使用帮助.xlsx index e71e0235ac667393d4b444ca38407ed2d3eb1222..65465b3c23146fe243c42a0c9cdcf6f0c4569b79 100644 GIT binary patch delta 10224 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 delta 9995 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 ZR53H!e`zhv$l+yEL(JGvXpR5z`Cm(2?o0px diff --git a/funcext/TSOffice/TOfficeObj.tsf b/funcext/TSOffice/TOfficeObj.tsf index 2fdb279..c98a3b4 100644 --- a/funcext/TSOffice/TOfficeObj.tsf +++ b/funcext/TSOffice/TOfficeObj.tsf @@ -1,4 +1,4 @@ -// Version 1.0.9 +// Version 1.1.0 Function TOfficeObj(n); Begin @@ -3732,10 +3732,23 @@ type THyperLink=class(NodeInfo) 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 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", XMLLocation, "")) union ExtAttr; End; Function GetChildren(); override; @@ -3751,7 +3764,7 @@ type THyperLink=class(NodeInfo) XMLDisplay; XMLTooltip; RId; - Location; + XMLLocation; //Nodes End; @@ -5593,7 +5606,7 @@ type TRunImpl=class(NodeInfo) Function GetChildren(); override; Begin 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":"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":"") @@ -5739,7 +5752,7 @@ type TParagraphImpl=class(NodeInfo) Function GetChildren(); override; Begin 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":"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") @@ -6307,10 +6320,10 @@ type TDocSectionImpl=class(NodeInfo) ,("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":"") + ,("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":"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":"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":"This element specifies the direction of the text flow for this section.", "class":"") ) union ExtNodes; End; @@ -6433,9 +6446,9 @@ type TwTcPr=class(NodeInfo) ,("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":"", "class":"TOptInfo") - ,("field":"Ins","name":Ins.NodeName,"obj":Ins,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TOptInfo") - ,("field":"cellMerge","name":cellMerge.NodeName,"obj":cellMerge,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TcellMerge") + ,("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":"单元格属性", "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; @@ -6545,7 +6558,7 @@ type TwTrPr=class(NodeInfo) ,("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":"", "class":"TOptInfo") + ,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo") ) union ExtNodes; End; @@ -6988,7 +7001,7 @@ type TwTblPr=class(NodeInfo) ,("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":"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; End; @@ -7351,11 +7364,11 @@ type TtblStylePr=class(NodeInfo) Function GetChildren(); override; Begin HandleChildren(); - 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") + 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; @@ -7398,34 +7411,34 @@ type TDocxStyleImpl=class(NodeInfo) Function GetAttrs(); override; Begin 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; Function GetChildren(); override; Begin HandleChildren(); - 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":"", "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":"") + 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":"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":"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":"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":"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":"Linked Style Reference", "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":"Style For Next Paragraph", "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":"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":"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":"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":"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":"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":"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":"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; End; @@ -7532,7 +7545,7 @@ type TStdPr=class(NodeInfo) Function GetChildren(); override; Begin 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":"docPartObj","name":docPartObj.NodeName,"obj":docPartObj,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TDocPartObj") ) union ExtNodes; @@ -7576,7 +7589,7 @@ type TStdEndPr=class(NodeInfo) Function GetChildren(); override; Begin 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; End; @@ -7814,17 +7827,17 @@ type TLevel=class(NodeInfo) Function GetAttrs(); override; Begin 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; Function GetChildren(); override; Begin HandleChildren(); - 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":"", "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":"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":"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; @@ -7866,16 +7879,16 @@ type TNumStyleImpl=class(NodeInfo) Function GetAttrs(); override; Begin HandleAttrs(); - return array(("abstractNumId", "w:abstractNumId", abstractNumId, "")) union ExtAttr; + return array(("abstractNumId", "w:abstractNumId", abstractNumId, "latentStyles编号ID(编号段落的外观和行为)")) union ExtAttr; End; Function GetChildren(); override; Begin HandleChildren(); - return array(("field":"nsid","name":"w:nsid","obj":nsid,"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":"lvl","name":lvl.NodeName,"obj":lvl,"attrEx":"","nodeType":"","attrName":"", "desc":"", "class":"TLevel") + 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; @@ -8181,7 +8194,7 @@ Type DocObject = Class node2 := node.InsertEndChild('element', 'w:r'); End; run := new TRun(node2); - run.SetText(obj.InsText, true); + run.SetText(obj.InsText_, true); obj.Init(node); return true; End; @@ -8467,6 +8480,17 @@ Type TRevision = Class(DocObject, TRevisionImpl) Class(TRevisionImpl).Create(nil, name_); 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(); @@ -8522,7 +8546,7 @@ Type TRevision = Class(DocObject, TRevisionImpl) CommentID:integer; sPos:integer; SelectLength:integer; - InsText:string; + InsText_:string; End; Type TDocComment = Class(TDocCommentImpl) @@ -9058,15 +9082,6 @@ Type TRun = Class(DocObject, TRunImpl) AddText(str, true); 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); Begin lines := str2array(txt,'\n'); @@ -10814,86 +10829,6 @@ Type TDocumentBody = Class(DocObject) return tbl; 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对象 ///[posOpt: 段落位置],0 在DOCX文件开头;-1 文件尾;N 在第N段之后;DocumentPart对象 在posOpt之后新添加表格 @@ -10905,31 +10840,84 @@ Type TDocumentBody = Class(DocObject) if ifObj(tblBorders) or ifObj(tblCellMar) then Begin borders := ifObj(tblBorders) ? tblBorders.Marshal() : nil; cellmar := ifObj(tblCellMar) ? tblCellMar.Marshal() : nil; - tr := tbl.node_.FirstChildElement('w:tr'); - while ifObj(tr) do Begin - if ifObj(tblCellMar) then Begin - c := class(TSXml).GetNode(tr, 'w:tblPrEx/w:tblCellMar', 'first'); - class(TSXml).UpdateNode(c, cellmar[0]['attributes'], cellmar[0]['children']); + End; + 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; - if ifObj(tblBorders) then Begin - b := class(TSXml).GetNode(tr, 'w:tblPrEx/w:tblBorders', 'first'); - class(TSXml).UpdateNode(b, borders[0]['attributes'], borders[0]['children']); - End; - tr := tr.NextElement('w:tr'); +(* + + + + + + + + + + + + + + + Index + + + +*) + 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'); - //last := node_.InsertAfterChild(tbl.node_, 'element', 'w:p'); _set_lastParagraph_(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; End; @@ -11554,19 +11542,6 @@ Type TDocumentBody = Class(DocObject) txt := ReplaceStr(txt, '\n', ''); return txt; 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); Begin @@ -11748,6 +11723,26 @@ Type TDocSection = Class(DocObject, TDocSectionImpl) 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; @@ -11979,12 +11974,13 @@ Type TTable = Class(DocObject, TTableImpl) col := row.FirstChildElement('w:tc'); iCol := 0; while ifObj(col) do Begin - c := new TCell(col); - cells_[iRow, iCol] := c; + //c := new TCell(col); + cells_[iRow, iCol] := array(col, 0); iCol ++; mergeSpan := _getVSpan(col);//合并单元格 if mergeSpan > 0 then Begin - c.mergeSpan_ := mergeSpan; + //c.mergeSpan_ := mergeSpan; + cells_[iRow, iCol, 1] := mergeSpan; for j:=1 to mergeSpan-1 do Begin cells_[iRow, iCol] := nil; iCol ++; @@ -11998,6 +11994,69 @@ Type TTable = Class(DocObject, TTableImpl) 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; Function readFormat(); Begin @@ -12033,21 +12092,18 @@ Type TTable = Class(DocObject, TTableImpl) Function Cell(row, col); Begin 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; ///设置列宽 Function ColumnWidth(n, wth); 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; - 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; ///合并单元格 @@ -12200,8 +12256,24 @@ Type TTable = Class(DocObject, TTableImpl) 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_; End; Type TCoreProperties = Class(DocObject) @@ -12620,6 +12692,17 @@ Begin 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;/////////////////////////////////////////////////////////////////////////////////////////// ///XLSX文档实现 diff --git a/funcext/TSOffice/TSDocxFile.tsf b/funcext/TSOffice/TSDocxFile.tsf index ef36f05..e04f764 100644 --- a/funcext/TSOffice/TSDocxFile.tsf +++ b/funcext/TSOffice/TSDocxFile.tsf @@ -1,4 +1,4 @@ -// Version 1.0.9 +// Version 1.1.0 Type TSDocxFile = Class ///Version: V1.0 2022-09-20 @@ -184,7 +184,9 @@ Type TSDocxFile = Class ///返回: TTable对象 Function CreateTable(data, IncludeHeader, IncludeIndex); Begin - return document_.Body().CreateTable(data, IncludeHeader, IncludeIndex); + tbl := TOfficeObj('TTable'); + tbl.SetData(self, data, IncludeHeader, IncludeIndex); + return tbl; End; ///插入数据表 @@ -385,7 +387,7 @@ Type TSDocxFile = Class return document_.Body().GetHeadingListImpl(self, nil, UpperHeadingLevel, LowerHeadingLevel, nil, true); End; - ///返回Document对象 + //返回Document对象 Function Document(); Begin return document_; @@ -407,8 +409,8 @@ Type TSDocxFile = Class return numberingObj_; End; - ///执行word文档内嵌tsl代码 - ///返回:[err,tslFuncCount,errArr]: err 执行错误TSL代码段次数,tslFuncCount TSL代码段总数,errArr 执行TSL错误信息(包括代码、错误信息) + ///执行word文档内嵌tsl代码(执行内嵌脚本的环境字符集为GBK) + ///返回:[err,tslFuncCount,errArr]: err 执行错误TSL代码段次数,tslFuncCount TSL代码段总数,errArr 执行TSL错误信息(array(('code':'代码', 'err':'错误信息'))) Function ExecInnerTSL(); Begin return Body().ExecInnerTSL(self); diff --git a/funcext/TSOffice/TSExcelFile.tsf b/funcext/TSOffice/TSExcelFile.tsf index fc9e2de..b2050ac 100644 --- a/funcext/TSOffice/TSExcelFile.tsf +++ b/funcext/TSOffice/TSExcelFile.tsf @@ -1,4 +1,4 @@ -// Version 1.0.9 +// Version 1.1.0 Type TSExcelFile = Class ///Version: V1.0 2022-08-08 @@ -791,6 +791,14 @@ Type TSExcelFile = Class return o.GetAppProps(); End; + ///复制Sheet + ///sourceSheet: 源工作表 + ///destSheet: 目的工作表 + Function CopySheet(sourceSheet, destSheet); + Begin + return workbook_.CopySheet(class(TSXml).CurCodePageToUtf8(sourceSheet), class(TSXml).CurCodePageToUtf8(destSheet)); + End; + Function WorkBook(); Begin return workbook_; diff --git a/funcext/TSOffice/TSUtils/TSXml.tsf b/funcext/TSOffice/TSUtils/TSXml.tsf index 9773e80..cca1965 100644 --- a/funcext/TSOffice/TSUtils/TSXml.tsf +++ b/funcext/TSOffice/TSUtils/TSXml.tsf @@ -20,9 +20,13 @@ Type TSXml = Class 'workbook_rels':('FileName':'xl/_rels/workbook.xml.rels','Template':''), 'sheet_rels':('FileName':'','Template':''), 'drawing_rels':('FileName':'','Template':''), - 'SheetContentType':('FileName':'','Template':'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'), + 'sheetContentType':('FileName':'','Template':'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'), 'RelationshipWorkSheet':('FileName':'','Template':'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet'), 'table1':('FileName':'xl/tables/table1.xml','Template':'
'), + 'tableContentType':('FileName':'','Template':'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml'), + 'commentContentType':('FileName':'','Template':'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml'), + 'drawingContentType':('FileName':'','Template':'application/vnd.openxmlformats-officedocument.drawing+xml'), + 'chartContentType':('FileName':'','Template':'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'), ); End diff --git a/funcext/TSOffice/document/TDocxStyles.tsf b/funcext/TSOffice/document/TDocxStyles.tsf index 14a0713..a14099b 100644 --- a/funcext/TSOffice/document/TDocxStyles.tsf +++ b/funcext/TSOffice/document/TDocxStyles.tsf @@ -63,8 +63,8 @@ Type TDocxStyles = Class return idMap_[ id ]; End; - ///返回全部LatentStyles对象列表 - ///返回:TDocxStyle对象列表 + //返回全部LatentStyles对象列表 + //返回:TDocxStyle对象列表 Function LatentStyles(); Begin r := array(); @@ -76,7 +76,6 @@ Type TDocxStyles = Class while ifObj(node) do Begin o := TOfficeObj('TDocxStyle'); o.Init(node); - o.name_ := node.GetAttribute('w:name'); r[ length(r) ] := o; node := node.NextElement('w:lsdException'); End; diff --git a/funcext/TSOffice/template/faq.txt b/funcext/TSOffice/template/faq.txt index f1ec09f..00cd492 100644 --- a/funcext/TSOffice/template/faq.txt +++ b/funcext/TSOffice/template/faq.txt @@ -40,4 +40,14 @@ Apply()函数可以修改属性值,例如: ... p.Run.SetText('系统可以自动识别这里的中文字符集(utf8或gbk)!'); ★不设置,默认当前字符集为UTF8 - \ No newline at end of file + +*报告模板功能(TDocxFile::ExecInnerTSL)中,Word中执行[TSL]...[/TSL]时的字符集是啥? + 是GBK。 + +*TDocxFile::NewFile()创建的缺省word文档格式说明: + 1.5倍行距、默认5号字体、宋体。 + +*缺省文档格式不是我想要的,怎么办? + ★用户可以利用word(或wps)生成自己想要格式的空文档,调用TDocxFile::OpenFile()打开即可。 + ★用户甚至可以设计好文档封面、目录、页脚、页眉,再调用TDocxFile::OpenFile()打开。 + ★用户可以在word文档中内嵌TSL代码,调用TDocxFile::ExecInnerTSL()操作word文档。 \ No newline at end of file diff --git a/funcext/TSOffice/worksheet/xlsxTable.tsf b/funcext/TSOffice/worksheet/xlsxTable.tsf index 69f054e..f36ca8e 100644 --- a/funcext/TSOffice/worksheet/xlsxTable.tsf +++ b/funcext/TSOffice/worksheet/xlsxTable.tsf @@ -27,7 +27,7 @@ Type xlsxTable = Class table.Xr3 := 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3'; table.Id := table_id; table.Name := '表' $ table_id; - table.DisplayName := format.TableName ? format.TableName : table.Name; + table.DisplayName := class(xlsxTable).GenerateValidDisplayName(format.TableName, tableid); table.Ref := topLeft $ ':' $ bottomRight; table.HeaderRowCount := format.HeaderRowCount ? '1' : nil; table.TotalsRowShown := format.TotalsRowShown ? '1' : '0'; @@ -67,6 +67,20 @@ Type xlsxTable = Class End + class Function GenerateValidDisplayName(name, nameId); + Begin + if ifnil(name) then name := '表' $ nameId; + if TOfficeApi().Get('Table-' $ name) then + begin + new_name := '表' $ nameId; + while TOfficeApi().Get('Table-' $ new_name) do new_name := '表' $ ++nameId; + TOfficeApi().Set('Table-' $ new_name, true); + return new_name; + end + TOfficeApi().Set('Table-' $ name, true); + return name; + End + private Function getTableColumnsXmlString(begCol, endCol, row, includeHeader); Begin @@ -105,7 +119,7 @@ private excel_.zip().Add(table_name, class(TSXml).XmlHeader() + ""); class(TSXml).AddRelationshipRid(sheet_rels_file, table_target, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table', 'rId' $ rid); content_xml := excel_.WorkBook().GetXmlFileObj(class(TSXml).GetFileName('Content_Types')); - class(TSXml).AddOverrideContentType(content_xml, '/' + table_name, 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml'); + class(TSXml).AddOverrideContentType(content_xml, '/' + table_name, class(TSXml).GetTemplate('tableContentType')); return array(rid, table_id, table_name); End diff --git a/funcext/TSOffice/worksheet/xlsxWorkBook.tsf b/funcext/TSOffice/worksheet/xlsxWorkBook.tsf index 4432734..77e75a2 100644 --- a/funcext/TSOffice/worksheet/xlsxWorkBook.tsf +++ b/funcext/TSOffice/worksheet/xlsxWorkBook.tsf @@ -53,6 +53,17 @@ Type xlsxWorkBook = Class node := node.NextElement(); End; + files := zipfile_.Files(); + table_files := sselect ['FileName'] from files where AnsiContainsStr(['FileName'], 'tables/table') end; + for i:=0 to length(table_files)-1 do + begin + table_xml := GetXmlFileObj(table_files[i]); + if ifObj(table_xml) then + begin + display_name := table_xml.FirstChildElement('table').GetAttribute('displayName'); + TOfficeApi().Set('Table-' $ display_name, true); + end + end //echo tostn(sheetNames_); End; @@ -179,7 +190,7 @@ Type xlsxWorkBook = Class //设置[Content_Types].xml content_xml := GetXmlFileObj(class(TSXml).GetFileName('Content_Types')); - class(TSXml).AddOverrideContentType(content_xml, '/' + fname, class(TSXml).GetTemplate('SheetContentType')); + class(TSXml).AddOverrideContentType(content_xml, '/' + fname, class(TSXml).GetTemplate('sheetContentType')); sheetNames_[sheetsCount_]['name'] := sheet; sheetNames_[sheetsCount_]['sheetId'] := sheetId; @@ -307,11 +318,109 @@ Type xlsxWorkBook = Class End; + Function CopySheet(sourceSheet, destSheet); + Begin + ind := sheetIndexMap_[ LowerCase(destSheet) ]; + if ifint(ind) then return destSheet $ ' already exists.'; + ind := sheetIndexMap_[ LowerCase(sourceSheet) ]; + if not ifint(ind) then return sourceSheet $ ' does not exists.'; + + //copy sheet + sheetId := vselect maxof(['sheetId']) from sheetNames_ end; + sheetId := integer(sheetId) + 1; + fname := sheetPrefix_ $ inttostr(sheetsCount_ + 1) $ '.xml'; + sheet := GetSheetXmlFile(sourceSheet); + zipfile_.Add(fname, sheet.Data()); + xml_file := GetXmlFileObj(fname); + sheet_node := xml_file.FirstChildElement('worksheet').FirstChildElement('sheetviews').FirstChildElement('sheetview'); + if sheet_node.GetAttribute('tabSelected') = '1' then sheet_node.SetAttribute('tabSelected', 0); + + // sheetN.xml.rels + DrawingFun := Function(obj, target, count); + Begin + rels_name := 'xl/drawings/_rels' + ReplaceStr(target, '../drawings', '') + '.rels'; + rels_obj := GetXmlFileObj(rels_name); + rels_new_file := 'xl/drawings/_rels/drawing' $ count $ '.xml.rels'; + if ifObj(rels_obj) then + begin + zipfile_.Add(rels_new_file, rels_obj.Data()); + rels_file := GetXmlFileObj(rels_new_file); + relationship := rels_file.FirstChildElement('Relationships').FirstChildElement('Relationship'); + while ifObj(relationship) do + begin + target := relationship.GetAttribute('Target'); + if AnsiContainsStr(target, 'chart') then copyFile(relationship, target, 'chartContentType'); + relationship := relationship.NextElement(); + end + end + End; + sheet_rels := GetSheetRelsFile(sourceSheet); + if ifObj(sheet_rels) then + begin + rels_name := 'xl/worksheets/_rels/' + 'sheet' + inttostr(sheetsCount_ + 1) + '.xml.rels'; + zipfile_.Add(rels_name, sheet_rels.Data()); + rels_file := GetXmlFileObj(rels_name); + relationship := rels_file.FirstChildElement('Relationships').FirstChildElement('Relationship'); + while ifObj(relationship) do + begin + target := relationship.GetAttribute('Target'); + if AnsiContainsStr(target, 'vmlDrawing') then copyFile(relationship, target); + else if AnsiContainsStr(target, 'drawing') then + begin + [count, file] := copyFile(relationship, target, 'drawingContentType'); + ##DrawingFun(relationship, target, count); + end + else if AnsiContainsStr(target, 'comments') then copyFile(relationship, target, 'commentContentType'); + else if AnsiContainsStr(target, 'table') then + begin + [count, file] := copyFile(relationship, target, 'tableContentType'); + table_xml := GetXmlFileObj(file).FirstChildElement('table'); + table_xml.SetAttribute('id', count); + display_name := table_xml.GetAttribute('displayName'); + display_name := class(xlsxTable).GenerateValidDisplayName(display_name, count); + table_xml.SetAttribute('displayName', display_name); + end + relationship := relationship.NextElement(); + end + end + + //workbook.xml.rels + rid := getWorkbookRelsRid(); + workbook_rels := GetXmlFileObj('xl/_rels/workbook.xml.rels'); + rels := workbook_rels.FirstChildElement('Relationships').InsertEndChild('element', 'Relationship'); + rels.SetAttribute('Target', getTarget( sheetsCount_ + 1)); + rels.SetAttribute('Type', class(TSXml).GetTemplate('RelationshipWorkSheet')); + rels.SetAttribute('Id', rid); + + //xl/workbook.xml + workbook := GetXmlFileObj('xl/workbook.xml'); + node := workbook.FirstChildElement('workbook').FirstChildElement('sheets').InsertEndChild('element','sheet'); + node.SetAttribute('name', destSheet); + node.SetAttribute('sheetId', sheetId); + node.SetAttribute('r:id', rid); + + //app.xml + app := GetXmlFileObj(class(TSXml).GetFileName('docProps_app')); + vector := app.FirstChildElement('Properties').FirstChildElement('TitlesOfParts').FirstChildElement('vt:vector'); + vector.SetAttribute('size', sheetId); + vector.InsertEndChild('element', 'vt:lpstr', destSheet); + + //[Content_Types].xml + content_xml := GetXmlFileObj(class(TSXml).GetFileName('Content_Types')); + class(TSXml).AddOverrideContentType(content_xml, '/' + fname, class(TSXml).GetTemplate('sheetContentType')); + + sheetNames_[sheetsCount_]['name'] := destSheet; + sheetNames_[sheetsCount_]['sheetId'] := sheetId; + sheetNames_[sheetsCount_]['rid'] := rid; + sheetNames_[sheetsCount_]['file'] := fname; + sheetIndexMap_[ LowerCase(destSheet) ] := sheetsCount_; + sheetsCount_ ++; + End; + Function SetSheetName(sourceName, destName); Begin ind := sheetIndexMap_[ LowerCase(destName) ]; if ifint(ind) then return destName $ ' already exists.'; - ind := sheetIndexMap_[ LowerCase(sourceName) ]; if not ifint(ind) then return sourceName $ ' does not exists.'; @@ -1033,6 +1142,23 @@ private chart.plotAreaNode := xml.FirstChildElement(getC(chart) + 'chartSpace').FirstChildElement(getC(chart) + 'chart').FirstChildElement(getC(chart) + 'plotArea'); End; + Function copyFile(obj, target, content); + Begin + file_name := ReplaceStr(target, '..', 'xl'); + counts := GetFilesCount(ReplaceStrByReg(file_name, "\\d+.*ml", '')) + 1; + xml := GetXmlFileObj(file_name); + new_file_postfix := ReplaceStrByReg(file_name[3:], "\\d+", inttostr(counts)); + zipfile_.Add('xl' + new_file_postfix, xml.Data()); + obj.SetAttribute('Target', '..' + new_file_postfix); + + if content then + begin + content_xml := GetXmlFileObj(class(TSXml).GetFileName('Content_Types')); + class(TSXml).AddOverrideContentType(content_xml, '/xl' + new_file_postfix, class(TSXml).GetTemplate(content)); + end + return array(counts, 'xl' + new_file_postfix); + End; + sheetsCount_:integer; sheetNames_; sheetIndexMap_; diff --git a/更新日志.md b/更新日志.md index 815dea8..29b7aed 100644 --- a/更新日志.md +++ b/更新日志.md @@ -1,5 +1,19 @@ # 更新日志 +## 2023-1-16 + +### V1.1.0 + +#### word + +1. 修复页眉页脚显示问题 +2. 修复表格插入列宽失败问题 +3. 优化`InsertTable`性能 + +#### excel + +1. 新增`CopySheet` + ## 2023-1-12 ### V1.0.9