From 894303ccef18fb1d82be046112d58198a8365f87 Mon Sep 17 00:00:00 2001 From: csh Date: Fri, 24 Feb 2023 14:53:35 +0800 Subject: [PATCH] v1.2.1 --- Demo/ExcelHelp.tsl | 5 +- ExcelFile使用帮助.xlsx | Bin 26884 -> 26886 bytes funcext/TSOffice/TOfficeObj.tsf | 102 +++++++++++++++--- funcext/TSOffice/TSDocxFile.tsf | 2 +- funcext/TSOffice/TSExcelFile.tsf | 11 +- funcext/TSOffice/worksheet/xlsxHyperLink.tsf | 11 +- funcext/TSOffice/worksheet/xlsxMargins.tsf | 41 ------- funcext/TSOffice/worksheet/xlsxPageLayout.tsf | 22 ++-- funcext/TSOffice/worksheet/xlsxSheetView.tsf | 5 - funcext/TSOffice/worksheet/xlsxWorkBook.tsf | 33 ++++-- 更新日志.md | 8 ++ 11 files changed, 145 insertions(+), 95 deletions(-) delete mode 100644 funcext/TSOffice/worksheet/xlsxMargins.tsf diff --git a/Demo/ExcelHelp.tsl b/Demo/ExcelHelp.tsl index 044894b..f43688c 100644 --- a/Demo/ExcelHelp.tsl +++ b/Demo/ExcelHelp.tsl @@ -666,7 +666,8 @@ style.Protection.Lock := 1; ('attrName': 'Scale', 'type': 'int', 'desc': '缩放比例(%)', 'value': array()), ('attrName': 'FitToWidth', 'type': 'int', 'desc': '页宽', 'value': array()), ('attrName': 'FitToHeight', 'type': 'int', 'desc': '页高', 'value': array()), - ('attrName': 'FirstPageNumber', 'type': 'int', 'desc': '起始页码', 'value': array()), + ('attrName': 'UseFirstPageNumber', 'type': 'bool', 'desc': '是否启用起始页码', 'value': array()), + ('attrName': 'FirstPageNumber', 'type': 'int', 'desc': '起始页码,{UseFirstPageNumber}为true时有效', 'value': array()), ('attrName': 'Orientation', 'type': 'string', 'desc': '纸张方向', 'value': array('"landscape": 横向', '"portrait": 纵向')), ('attrName': 'PageOrder', 'type': 'string', 'desc': '打印顺序', 'value': array('nil(默认): 先列后行', '"overThenDown": 先行后列')), ('attrName': 'BlackAndWhite', 'type': 'boolean', 'desc': '单色打印', 'value': array()), @@ -766,7 +767,7 @@ style.Protection.Lock := 1; ('attrName': 'RefMode', 'type': 'string', 'desc': 'R1C1引用样式', 'value': array('nil(默认): 不启用', '"R1C1": 启用R1C1引用样式')), ('attrName': 'Iterate', 'type': 'bool', 'desc': '是否启用迭代计算', 'value': array()), ('attrName': 'IterateCount', 'type': 'int', 'desc': '最多迭代次数', 'value': array()), - ('attrName': 'IterateDelta', 'type': 'double', 'desc': '最大误差,需要使用科学计数法,如0.002时为2E-3', 'value': array()), + ('attrName': 'IterateDelta', 'type': 'double', 'desc': '最大误差', 'value': array()), ('attrName': 'CalcOnSave', 'type': 'bool', 'desc': '保存工作簿之前重新计算,{CalcMode}为"manual"时有效', 'value': array()), ('attrName': 'ConCurrentCalc', 'type': 'bool', 'desc': '是否启用多线程计算', 'value': array()), ('attrName': 'ConCurrentManualCount', 'type': 'int', 'desc': '自定义计算线程数', 'value': array()), diff --git a/ExcelFile使用帮助.xlsx b/ExcelFile使用帮助.xlsx index 5bafd2cd17585fcc8c84b7b0f9ad2ddeee7158f2..981fbfd80d06e91b24a568dadef30b99eceb740d 100644 GIT binary patch delta 18615 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 delta 18565 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 O*ud8rqHK>+LAn9eZOXd< diff --git a/funcext/TSOffice/TOfficeObj.tsf b/funcext/TSOffice/TOfficeObj.tsf index c303d86..1d9981c 100644 --- a/funcext/TSOffice/TOfficeObj.tsf +++ b/funcext/TSOffice/TOfficeObj.tsf @@ -1,4 +1,4 @@ -// Version 1.2.0 +// Version 1.2.1 Function TOfficeObj(n); Begin @@ -1257,7 +1257,6 @@ type TShapeFormat=class(NodeInfo) Function AddText(text); Begin o := new TaP(self, "a:p"); - o.R.T := text; o.R.Rpr.Lang := "en-US"; o.R.Rpr.AltLang := "zh-CN"; o.R.Rpr.SZ := 2400; @@ -4192,12 +4191,6 @@ type TMargins=class(NodeInfo) Function Init(); Begin - left := 0.75; - right := 0.75; - top := 0.75; - bottom := 0.75; - header := 0.5; - footer := 0.5; //TODO... End; @@ -4206,10 +4199,88 @@ type TMargins=class(NodeInfo) RootObj := node; End; + Property Left read readXMLLeft write writeXMLLeft; + Function readXMLLeft(); + Begin + tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Left')); + if not ifNil(tmpVal) then return tmpVal; + return class(TSXml).Utf8ToCurCodePage(XMLLeft); + End; + + Function writeXMLLeft(str); + Begin + XMLLeft := class(TSXml).CurCodePageToUtf8(str); + End; + + Property Right read readXMLRight write writeXMLRight; + Function readXMLRight(); + Begin + tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Right')); + if not ifNil(tmpVal) then return tmpVal; + return class(TSXml).Utf8ToCurCodePage(XMLRight); + End; + + Function writeXMLRight(str); + Begin + XMLRight := class(TSXml).CurCodePageToUtf8(str); + End; + + Property Top read readXMLTop write writeXMLTop; + Function readXMLTop(); + Begin + tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Top')); + if not ifNil(tmpVal) then return tmpVal; + return class(TSXml).Utf8ToCurCodePage(XMLTop); + End; + + Function writeXMLTop(str); + Begin + XMLTop := class(TSXml).CurCodePageToUtf8(str); + End; + + Property Bottom read readXMLBottom write writeXMLBottom; + Function readXMLBottom(); + Begin + tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Bottom')); + if not ifNil(tmpVal) then return tmpVal; + return class(TSXml).Utf8ToCurCodePage(XMLBottom); + End; + + Function writeXMLBottom(str); + Begin + XMLBottom := class(TSXml).CurCodePageToUtf8(str); + End; + + Property Header read readXMLHeader write writeXMLHeader; + Function readXMLHeader(); + Begin + tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Header')); + if not ifNil(tmpVal) then return tmpVal; + return class(TSXml).Utf8ToCurCodePage(XMLHeader); + End; + + Function writeXMLHeader(str); + Begin + XMLHeader := class(TSXml).CurCodePageToUtf8(str); + End; + + Property Footer read readXMLFooter write writeXMLFooter; + Function readXMLFooter(); + Begin + tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Footer')); + if not ifNil(tmpVal) then return tmpVal; + return class(TSXml).Utf8ToCurCodePage(XMLFooter); + End; + + Function writeXMLFooter(str); + Begin + XMLFooter := class(TSXml).CurCodePageToUtf8(str); + End; + Function GetAttrs(); override; Begin HandleAttrs(); - return array(("Left", "left", Left, ""),("Right", "right", Right, ""),("Top", "top", Top, ""),("Bottom", "bottom", Bottom, ""),("Header", "header", Header, ""),("Footer", "footer", Footer, "")) union ExtAttr; + return array(("Left", "left", XMLLeft, ""),("Right", "right", XMLRight, ""),("Top", "top", XMLTop, ""),("Bottom", "bottom", XMLBottom, ""),("Header", "header", XMLHeader, ""),("Footer", "footer", XMLFooter, "")) union ExtAttr; End; Function GetChildren(); override; @@ -4219,12 +4290,12 @@ type TMargins=class(NodeInfo) End; //Attributes - Left; - Right; - Top; - Bottom; - Header; - Footer; + XMLLeft; + XMLRight; + XMLTop; + XMLBottom; + XMLHeader; + XMLFooter; //Nodes End; @@ -14486,4 +14557,3 @@ private End - diff --git a/funcext/TSOffice/TSDocxFile.tsf b/funcext/TSOffice/TSDocxFile.tsf index 601aea6..96635ea 100644 --- a/funcext/TSOffice/TSDocxFile.tsf +++ b/funcext/TSOffice/TSDocxFile.tsf @@ -1,4 +1,4 @@ -// Version 1.2.0 +// Version 1.2.1 Type TSDocxFile = Class ///Version: V1.0 2022-09-20 diff --git a/funcext/TSOffice/TSExcelFile.tsf b/funcext/TSOffice/TSExcelFile.tsf index 7585455..d9dbcab 100644 --- a/funcext/TSOffice/TSExcelFile.tsf +++ b/funcext/TSOffice/TSExcelFile.tsf @@ -1,4 +1,4 @@ -// Version 1.2.0 +// Version 1.2.1 Type TSExcelFile = Class ///Version: V1.0 2022-08-08 @@ -620,8 +620,7 @@ Type TSExcelFile = Class ///margins: TMargins 对象 Function SetPageMargins(sheet, margins); Begin - o := getOj(sheet, 'xlsxMargins'); - if ifObj(o) then o.SetPageMargins(margins); + return workbook_.SetPageMargins(class(TSXml).CurCodePageToUtf8(sheet), margins); End; ///获取工作表页边距 @@ -629,9 +628,7 @@ Type TSExcelFile = Class ///返回: TMargins对象 Function GetPageMargins(sheet); Begin - o := getOj(sheet, 'xlsxMargins'); - if ifObj(o) then return o.GetPageMargins(); - return "sheet error"; + return workbook_.GetPageMargins(class(TSXml).CurCodePageToUtf8(sheet)); End; ///合并单元格 @@ -928,8 +925,6 @@ private return class(xlsxChart).NewObject(sheetname, self);//不缓存xlsxChart对象 'xlsxHeaderFooter': o := class(xlsxHeaderFooter).NewObject(sheetname, self); - 'xlsxMargins': - o := class(xlsxMargins).NewObject(sheetname, self); 'xlsxSheetView': o := class(xlsxSheetView).NewObject(sheetname, self); 'xlsxPageLayout': diff --git a/funcext/TSOffice/worksheet/xlsxHyperLink.tsf b/funcext/TSOffice/worksheet/xlsxHyperLink.tsf index 6184efb..63b8390 100644 --- a/funcext/TSOffice/worksheet/xlsxHyperLink.tsf +++ b/funcext/TSOffice/worksheet/xlsxHyperLink.tsf @@ -24,7 +24,7 @@ Type xlsxHyperLink = Class while ifObj(node) do begin ref := node.GetAttribute('ref'); if ref = axis then begin - node := hyperlinks.DeleteChild(node); + hyperlink_node := node; break; end; node := node.NextElement(); @@ -48,7 +48,14 @@ Type xlsxHyperLink = Class End hyperlink.RId := 'rId' + inttostr(rid); end - hyperlinks.InsertEndChild(hyperlink.marshal()); + if not ifObj(hyperlink_node) then + begin + hyperlinks.InsertEndChild(hyperlink.marshal()); + end + else begin + marshal := hyperlink.Marshal(); + class(TSXml).UpdateNode(node, marshal['attributes'], marshal['children']); + end End; Function GetCellHyperLink(axis); diff --git a/funcext/TSOffice/worksheet/xlsxMargins.tsf b/funcext/TSOffice/worksheet/xlsxMargins.tsf deleted file mode 100644 index 02f26e2..0000000 --- a/funcext/TSOffice/worksheet/xlsxMargins.tsf +++ /dev/null @@ -1,41 +0,0 @@ -Type xlsxMargins = Class - Function Create(sheetobj, file, xml); overload; - Begin - sheet_ := sheetobj; - file_ := file; - xmlFile_ := xml; - End; - - Function SetPageMargins(margins); - Begin - marshal := margins.Marshal(); - work_node := xmlFile_.FirstChild('worksheet'); - node := work_node.FirstChild('pageMargins'); - if ifObj(node) then work_node.DeleteChild(node); - sheet_node := work_node.FirstChild('sheetData'); - phone_node := work_node.FirstChild('phoneticPr'); - prev_node := ifObj(phone_node) ? phone_node : sheet_node; - work_node.InsertAfterChild(prev_node, marshal); - End; - - Function GetPageMargins(); - Begin - node := xmlFile_.FirstChild('worksheet').FirstChild('pageMargins'); - margins := TOfficeObj('tmargins'); - margins.RootObj := node; - return margins; - End - - class Function NewObject(sheetname, file); - Begin - o := file.WorkBook().GetSheetObj(sheetname); - xml := file.WorkBook().GetSheetXmlfile(sheetname); - if not ifObj(o) then return 0; - return new xlsxMargins(o, file, xml); - End; - -private - file_; //TSExcelFile对象 - sheet_;//XmlSheet对象 - xmlFile_; //sheet对应的xml对象 -End; diff --git a/funcext/TSOffice/worksheet/xlsxPageLayout.tsf b/funcext/TSOffice/worksheet/xlsxPageLayout.tsf index b052568..85daa6f 100644 --- a/funcext/TSOffice/worksheet/xlsxPageLayout.tsf +++ b/funcext/TSOffice/worksheet/xlsxPageLayout.tsf @@ -8,28 +8,22 @@ Type xlsxPageLayout = Class Function SetPageLayout(sheet, pageLayout); Begin - if ifint(pageLayout.FirstPageNumber) then pageLayout.UseFirstPageNumber := True; marshal := pageLayout.Marshal(); work_node := xmlFile_.FirstChild('worksheet'); - node := work_node.FirstChild('pageSetUp'); - if ifObj(node) then work_node.DeleteChild(node); - arr := array('sheetData', 'mergeCells', 'phoneticPr', 'pageMargins'); - for i:=length(arr)-1 to 0 do + node := work_node.FirstChild('pageSetup'); + if not ifObj(node) then begin - node := work_node.FirstChild(arr[i]); - if ifObj(node) then - begin - work_node.InsertAfterChild(node, marshal); - flag := 1; - end + prev_node := class(TSXml).GetWorkSheetPrevNode(work_node, 'pageSetup'); + node := work_node.InsertAfterChild(prev_node, marshal); + end + else begin + class(TSXml).UpdateNode(node, marshal['attributes'], marshal['children']); end - if not flag then - work_node.InsertEndChild(marshal); End; Function GetPageLayout(); Begin - node := xmlFile_.FirstChild('worksheet').FirstChild('pageSetUp'); + node := xmlFile_.FirstChild('worksheet').FirstChild('pageSetup'); page_layout := TOfficeObj('TPageLayout'); page_layout.RootObj := node; return page_layout; diff --git a/funcext/TSOffice/worksheet/xlsxSheetView.tsf b/funcext/TSOffice/worksheet/xlsxSheetView.tsf index 8d076fb..26f708e 100644 --- a/funcext/TSOffice/worksheet/xlsxSheetView.tsf +++ b/funcext/TSOffice/worksheet/xlsxSheetView.tsf @@ -15,11 +15,6 @@ Type xlsxSheetView = Class id := sheet_view_node.GetAttribute('workbookViewId'); if trystrtoint(id, r) and r = windowsIndex then Begin - attributes := sheet_view_node.Attributes(); - sheetView.TabSelected := attributes['tabselected']; - sheetView.WorkbookViewId := attributes['workbookViewId']; - sheetView.ZoomScaleNormal := ZoomScale; - for k, v in attributes do sheet_view_node.DeleteAttribute(k); marshal := SheetView.Marshal(); class(TSXml).UpdateNode(sheet_view_node, marshal['attributes'], array()); return ''; diff --git a/funcext/TSOffice/worksheet/xlsxWorkBook.tsf b/funcext/TSOffice/worksheet/xlsxWorkBook.tsf index 8000fff..bf9bbf1 100644 --- a/funcext/TSOffice/worksheet/xlsxWorkBook.tsf +++ b/funcext/TSOffice/worksheet/xlsxWorkBook.tsf @@ -1298,8 +1298,8 @@ Type xlsxWorkBook = Class style_xml := GetXmlFileObj('xl/styles.xml'); fonts_node := style_xml.FirstChildElement('styleSheet').FirstChildElement('fonts'); first_node := fonts_node.FirstChildElement('font'); - fonts_node.DeleteChild(first_node); - fonts_node.InsertFirstChild(font.Marshal()); + marshal := font.Marshal(); + class(TSXml).UpdateNode(first_node, marshal['attributes'], marshal['children']); End; Function GetDefaultFont(); @@ -1317,10 +1317,8 @@ Type xlsxWorkBook = Class workbook_xml := GetXmlFileObj('xl/workbook.xml'); workbook_node := workbook_xml.FirstChildElement('workbook'); calc_node := workbook_node.FirstChildElement('calcPr'); - sheet_node := workbook_node.FirstChildElement('sheets'); - if ifObj(calc_node) then workbook_node.DeleteChild(calc_node); - calcPr.calcId := "191029"; - workbook_node.InsertAfterChild(sheet_node, calcPr.Marshal()); + marshal := calcPr.Marshal(); + class(TSXml).UpdateNode(calc_node, marshal['attributes'], marshal['children']); End; Function GetCalcOptions(); @@ -1332,6 +1330,29 @@ Type xlsxWorkBook = Class return calcPr; End; + Function SetPageMargins(sheet, margins); + Begin + sheet_xml := GetSheetXmlFile(sheet); + work_node := sheet_xml.FirstChild('worksheet'); + node := work_node.FirstChild('pageMargins'); + if not ifObj(node) then + begin + prev_node := class(TSXml).GetWorkSheetPrevNode(work_node, 'pageMargins'); + node := work_node.InsertAfterChild(prev_node, 'element', 'pageMargins'); + end + marshal := margins.Marshal(); + class(TSXml).UpdateNode(node, marshal['attributes'], marshal['children']); + End; + + Function GetPageMargins(sheet); + Begin + sheet_xml := GetSheetXmlFile(sheet); + node := sheet_xml.FirstChild('worksheet').FirstChild('pageMargins'); + margins := TOfficeObj('tmargins'); + margins.RootObj := node; + return margins; + End + private Function generateRow(c1, c2, r); Begin diff --git a/更新日志.md b/更新日志.md index a3f873b..5732bfc 100644 --- a/更新日志.md +++ b/更新日志.md @@ -1,5 +1,13 @@ # 更新日志 +## 2023-2-24 + +### V1.2.1 + +#### excel + +1. Get相关方法重新Set后不再覆盖原有设置,影响方法如下`Set(Get)PageMargins`,`Set(Get)CellHyperLink`,`Set(Get)PageLayout`,`Set(Get)CalcOptions`,`Set(Get)DefaultFont`,`Set(Get)SheetViewOptions` + ## 2023-2-23 ### V1.2.0