From 6721a005ca7680e6a09cbcbb25fe54293c215a31 Mon Sep 17 00:00:00 2001 From: csh Date: Wed, 22 Feb 2023 16:03:26 +0800 Subject: [PATCH] v1.1.9 --- ExcelFile使用帮助.xlsx | Bin 26799 -> 26886 bytes funcext/TSOffice/TOfficeObj.tsf | 2 +- funcext/TSOffice/TSDocxFile.tsf | 2 +- funcext/TSOffice/TSExcelFile.tsf | 12 ++- funcext/TSOffice/worksheet/xlsxWorkBook.tsf | 86 ++++++++++++++++++++ 更新日志.md | 6 ++ 6 files changed, 104 insertions(+), 4 deletions(-) diff --git a/ExcelFile使用帮助.xlsx b/ExcelFile使用帮助.xlsx index 2adfd74b31d184fa29d31a9141f0778194d7f178..177cc91b795f8ed1efc0a6b7734fd07a47fb1867 100644 GIT binary patch delta 14805 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%0Dg?cg2KQL;W%)!I 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 diff --git a/funcext/TSOffice/TOfficeObj.tsf b/funcext/TSOffice/TOfficeObj.tsf index 619c9bb..c41dbb5 100644 --- a/funcext/TSOffice/TOfficeObj.tsf +++ b/funcext/TSOffice/TOfficeObj.tsf @@ -1,4 +1,4 @@ -// Version 1.1.8 +// Version 1.1.9 Function TOfficeObj(n); Begin diff --git a/funcext/TSOffice/TSDocxFile.tsf b/funcext/TSOffice/TSDocxFile.tsf index 265de7c..3e40e8c 100644 --- a/funcext/TSOffice/TSDocxFile.tsf +++ b/funcext/TSOffice/TSDocxFile.tsf @@ -1,4 +1,4 @@ -// Version 1.1.8 +// Version 1.1.9 Type TSDocxFile = Class ///Version: V1.0 2022-09-20 diff --git a/funcext/TSOffice/TSExcelFile.tsf b/funcext/TSOffice/TSExcelFile.tsf index 1aa8f83..18b92b5 100644 --- a/funcext/TSOffice/TSExcelFile.tsf +++ b/funcext/TSOffice/TSExcelFile.tsf @@ -1,4 +1,4 @@ -// Version 1.1.8 +// Version 1.1.9 Type TSExcelFile = Class ///Version: V1.0 2022-08-08 @@ -141,7 +141,7 @@ Type TSExcelFile = Class return workbook_.NewSheet(class(TSXml).CurCodePageToUtf8(sheet)); End; - ///在指定sheet之前插入新sheet + ///在指定sheet之后插入新sheet ///sourceSheet: string,指定工作表名称 ///destSheet: string,目的工作表名称 Function NewSheet(sourceSheet, destSheet);overload; @@ -149,6 +149,14 @@ Type TSExcelFile = Class return workbook_.NewSheet(class(TSXml).CurCodePageToUtf8(sourceSheet), class(TSXml).CurCodePageToUtf8(destSheet)); End; + ///在指定sheet之前插入新sheet + ///sourceSheet: string,指定工作表名称 + ///destSheet: string,目的工作表名称 + Function InsertSheet(sourceSheet, destSheet); + Begin + return workbook_.InsertSheet(class(TSXml).CurCodePageToUtf8(sourceSheet), class(TSXml).CurCodePageToUtf8(destSheet)); + End; + ///删除sheet ///sheet: string,工作表名称 Function DeleteSheet(sheet); diff --git a/funcext/TSOffice/worksheet/xlsxWorkBook.tsf b/funcext/TSOffice/worksheet/xlsxWorkBook.tsf index 1ae43fa..333145c 100644 --- a/funcext/TSOffice/worksheet/xlsxWorkBook.tsf +++ b/funcext/TSOffice/worksheet/xlsxWorkBook.tsf @@ -281,6 +281,92 @@ Type xlsxWorkBook = Class SetDefaultSheet(destSheet); End; + Function InsertSheet(sourceSheet, destSheet); + Begin + lname := LowerCase(destSheet); + if ifint(sheetIndexMap_[ lname ]) then return 'destSheet already exists.'; + sname := LowerCase(sourceSheet); + if not ifint(sheetIndexMap_[ sname ]) then return 'sourceSheet does not exists'; + + //添加文件xl/worksheets/sheetN.xml + sheetId := vselect maxof(['sheetId']) from sheetNames_ end; + sheetId := integer(sheetId) + 1; + fname := sheetPrefix_ $ inttostr(sheetsCount_ + 1) $ '.xml'; + zipfile_.Add(fname, class(TSXml).XmlHeader() + class(TSXml).GetTemplate('sheet1')); + + //设置 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); + //workbook_rels.Print; + + //设置 xl/workbook.xml + workbook := GetXmlFileObj('xl/workbook.xml'); + node := workbook.FirstChildElement('workbook').FirstChildElement('sheets'); + sheet_node := node.FirstChildElement('sheet'); + prev_node := nil; + while ifObj(sheet_node) do + begin + if LowerCase(sheet_node.GetAttribute('name')) = LowerCase(sourceSheet) then + begin + if ifnil(prev_node) then sheet_node := node.InsertFirstChild('element', 'sheet'); + else sheet_node := node.InsertAfterChild(prev_node, 'element', 'sheet'); + sheet_node.SetAttribute('name', destSheet); + sheet_node.SetAttribute('sheetId', sheetId); + sheet_node.SetAttribute('r:id', rid); + break; + end + prev_node := sheet_node; + sheet_node := sheet_node.NextElement(); + end + //workbook.Print(); + + //设置docProps/app.xml + app := GetXmlFileObj(class(TSXml).GetFileName('docProps_app')); + //app.Print(); + node := app.FirstChildElement('Properties').FirstChildElement('TitlesOfParts'); + vector := node.FirstChildElement('vt:vector'); + vector.SetAttribute('size', length(sheetNames_) + 1); + lpstr := vector.FirstChildElement('vt:lpstr'); + pstr := nil; + while ifObj(lpstr) do + begin + if LowerCase(lpstr.GetText()) = LowerCase(sourceSheet) then + begin + if ifnil(pstr) then vector.InsertFirstChild('element', 'vt:lpstr'); + else lpstr := vector.InsertAfterChild(pstr, 'element', 'vt:lpstr'); + lpstr.SetValue(destSheet); + break; + end + pstr := lpstr; + lpstr := lpstr.NextElement(); + end + + //设置[Content_Types].xml + content_xml := GetXmlFileObj(class(TSXml).GetFileName('Content_Types')); + class(TSXml).AddOverrideContentType(content_xml, '/' + fname, class(TSXml).GetTemplate('sheetContentType')); + + ind := sheetIndexMap_[sname]; + for i:=sheetsCount_ downto ind+1 do + begin + sheetNames_[i]['name'] := sheetNames_[i-1]['name']; + sheetNames_[i]['sheetId'] := sheetNames_[i-1]['sheetId']; + sheetNames_[i]['rid'] := sheetNames_[i-1]['rid']; + sheetNames_[i]['file'] := sheetNames_[i-1]['file']; + sheetIndexMap_[ LowerCase(sheetNames_[i]['name']) ] := i; + end + sheetIndexMap_[lname] := ind; + sheetNames_[ind]['name'] := destSheet; + sheetNames_[ind]['sheetId'] := sheetId; + sheetNames_[ind]['rid'] := rid; + sheetNames_[ind]['file'] := fname; + sheetsCount_ ++; + SetDefaultSheet(destSheet); + End; + Function DeleteSheet(sheet); Begin if sheetsCount_ <= 1 then return 'Cant not delete the last sheet.'; diff --git a/更新日志.md b/更新日志.md index 828b2ae..f97d1f3 100644 --- a/更新日志.md +++ b/更新日志.md @@ -2,6 +2,12 @@ ## 2023-2-22 +### V1.1.9 + +#### excel + +1. 新增`InsertSheet` + ### V1.1.8 #### excel