This commit is contained in:
csh 2025-01-22 13:58:18 +08:00
parent 93533c41a0
commit 39b7549665
21 changed files with 8483 additions and 8477 deletions

View File

@ -1,4 +1,4 @@
// Version 1.7.7 // Version 1.7.8
Function TOfficeObj(n); Function TOfficeObj(n);
Begin Begin
case lowercase(n) of case lowercase(n) of
@ -11559,8 +11559,8 @@ Type TPicture = Class(DocObject, TPictureImpl)
Descr; Descr;
Width;//厘米 Width;//厘米
Height;//厘米 Height;//厘米
CanvasWidth; CanvasWidth;
CanvasHeight; CanvasHeight;
End; End;
Type TChart = Class(TChartImpl) Type TChart = Class(TChartImpl)
@ -13461,7 +13461,6 @@ Type TDocumentBody = Class(DocObject)
p.pPr.NewChildNode( array("field":"", "name":"w:sectPr", "obj":section, "attrEx":"", "nodeType":"") ); p.pPr.NewChildNode( array("field":"", "name":"w:sectPr", "obj":section, "attrEx":"", "nodeType":"") );
p := AddParagraph(p, posOpt, '');//段落对象 p := AddParagraph(p, posOpt, '');//段落对象
sec := new TDocSection(p.node_, -2, zipfile_); sec := new TDocSection(p.node_, -2, zipfile_);
sec.NodeUri := 'w:pPr/w:sectPr'; sec.NodeUri := 'w:pPr/w:sectPr';
return sec; return sec;
End; End;
@ -14207,9 +14206,9 @@ Type TDocumentBody = Class(DocObject)
End; End;
End; End;
zipfile_; [weakref]zipfile_;
lastParagraph_; lastParagraph_;
document_; [weakref]document_;
End; End;
Type TDocHeaderFooter = Class(TDocumentBody) Type TDocHeaderFooter = Class(TDocumentBody)
@ -14605,7 +14604,7 @@ Type TFootnotes = Class
End; End;
private private
zip_; [weakref]zip_;
footnotesXml_; footnotesXml_;
footnotesNode_; footnotesNode_;
idMap_; idMap_;
@ -14800,7 +14799,9 @@ Type TTable = Class(DocObject, TTableImpl)
fields := FieldNames(data); fields := FieldNames(data);
if IsTable(fields) then Begin if IsTable(fields) then Begin
r := nils(length(data),length(fields)); r := nils(length(data),length(fields));
r[:,:] := data; for i:=0 to length(data)-1 do
for _,field in fields do
r[i][_] := data[i][field];
data := r; data := r;
End; End;
if includeIndex then Begin if includeIndex then Begin

View File

@ -1,4 +1,4 @@
// Version 1.7.7 // Version 1.7.8
Type TSDocxFile = Class Type TSDocxFile = Class
///Version: V1.0 2022-09-20 ///Version: V1.0 2022-09-20
///适用于 Microsoft Word docx格式文件 ///适用于 Microsoft Word docx格式文件

View File

@ -1,4 +1,4 @@
// Version 1.7.7 // Version 1.7.8
Type TSXlsxFile = Class Type TSXlsxFile = Class
///Version: V1.0 2022-08-08 ///Version: V1.0 2022-08-08
///适用于 Microsoft Excel? 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM / XLTX 等多种文档格式。 ///适用于 Microsoft Excel? 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM / XLTX 等多种文档格式。

View File

@ -52,7 +52,7 @@ Type TDocxChart = Class(TSChart)
return true; return true;
End; End;
docx_; [weakref]docx_;
chartId_; chartId_;
rId_; rId_;
xmlObj_; xmlObj_;

View File

@ -591,7 +591,7 @@ Type TDocxFootnoteCopy = class
End; End;
private private
old_footnote_obj_; [weakref]old_footnote_obj_;
new_footnote_obj_; new_footnote_obj_;
id_map_; // [id: footnote] id_map_; // [id: footnote]

View File

@ -198,7 +198,7 @@ Type TDocxStyles = Class
defaultPpr_; defaultPpr_;
defaultRpr_; defaultRpr_;
private private
docx_; [weakref]docx_;
stylesXml_; stylesXml_;
idMap_; idMap_;
nameMap_; nameMap_;

View File

@ -228,7 +228,7 @@ Type TNumbering = Class
class(TSXml).UpdateNode(o.node_, arr['attributes'], arr['children']); class(TSXml).UpdateNode(o.node_, arr['attributes'], arr['children']);
End; End;
private private
docx_; [weakref]docx_;
numberingXml_; numberingXml_;
maxAbstractNumId_:integer; maxAbstractNumId_:integer;
maxNumId_:integer; maxNumId_:integer;

View File

@ -314,7 +314,7 @@ Type TTableContent = class
End; End;
End; End;
docx_; [weakref]docx_;
node_; node_;
impl_; impl_;
End; End;

View File

@ -65,7 +65,7 @@ Type xlsxChart = Class(TSChart)
node := drawingXmlObj_.FirstChild('xdr:wsDr').InsertEndChild(o.Marshal()); node := drawingXmlObj_.FirstChild('xdr:wsDr').InsertEndChild(o.Marshal());
End; End;
private private
excel_; [weakref]excel_;
drawingRID_:integer; drawingRID_:integer;
chartId_; chartId_;
chartRid_; chartRid_;

View File

@ -184,6 +184,7 @@ private
End; End;
End; End;
[weakref]excel_;//TSXlsxFile对象
authors_; authors_;
commentId_; commentId_;
commentFileName_:string;//'../comments/comment1.xml' commentFileName_:string;//'../comments/comment1.xml'
@ -191,7 +192,6 @@ private
rId_:string; rId_:string;
sheetName_:string;//sheet名称 sheetName_:string;//sheet名称
sheetFileName_;//xl/worksheets/sheetN.xml sheetFileName_;//xl/worksheets/sheetN.xml
excel_;//TSExcelFile对象
commentXmlFile_;//XmlFile对象 commentXmlFile_;//XmlFile对象
commentObjs_; commentObjs_;
End; End;

View File

@ -45,5 +45,5 @@ Type xlsxDocProps = Class
End; End;
private private
excel_; //TSExcelFile对象 [weakref]excel_; //TSExcelFile对象
End; End;

View File

@ -33,6 +33,6 @@ Type xlsxHeaderFooter = Class
private private
sheet_; //XmlSheet对象 sheet_; //XmlSheet对象
file_; //TSExcelFile对象 [weakref]file_; //TSExcelFile对象
xmlFile_; //sheet对应的xml对象 xmlFile_; //sheet对应的xml对象
End; End;

View File

@ -92,7 +92,7 @@ Type xlsxHyperLink = Class
End; End;
private private
file_; //TSExcelFile对象 [weakref]file_; //TSExcelFile对象
xmlFile_;//XmlFile对象 xmlFile_;//XmlFile对象
sheetName_; sheetName_;

View File

@ -169,6 +169,6 @@ private
private private
sheetName_:string; //sheet名称 sheetName_:string; //sheet名称
excel_;//TSExcelFile对象 [weakref]excel_;//TSExcelFile对象
zipfile_; zipfile_;
End; End;

View File

@ -38,7 +38,7 @@ Type xlsxPageLayout = Class
End; End;
private private
file_; //TSExcelFile对象 [weakref]file_; //TSExcelFile对象
sheet_;//XmlSheet对象 sheet_;//XmlSheet对象
xmlFile_; //sheet对应的xml对象 xmlFile_; //sheet对应的xml对象
End; End;

View File

@ -113,7 +113,7 @@ private
private private
sheetName_:string; //sheet名称 sheetName_:string; //sheet名称
excel_;//TSExcelFile对象 [weakref]excel_;//TSExcelFile对象
zipfile_; zipfile_;
drawingXmlObj_; drawingXmlObj_;
End; End;

View File

@ -95,7 +95,7 @@ Type xlsxSheetView = Class
End; End;
private private
file_; //TSExcelFile对象 [weakref]file_; //TSExcelFile对象
sheet_;//XmlSheet对象 sheet_;//XmlSheet对象
xmlFile_; //sheet对应的xml对象 xmlFile_; //sheet对应的xml对象
End; End;

View File

@ -336,66 +336,61 @@ private
End End
private private
file_; //TSXlsxFile对象 [weakref]file_; //TSXlsxFile对象
style_xml_file_; style_xml_file_;
style_; // 缓存style style_; // 缓存style
End; End;
// {* // 参考https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.numberingformat?view=openxml-3.0.1
// 也可参考: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.numberingformat?view=openxml-3.0.1 // 0 General
// numfmtid为1表示数值格式即显示为整数或小数且根据系统设置或区域设置来决定小数点、千位分隔符和负数的显示方式。 // 1 0
// numfmtid为2表示货币格式即显示为带有货币符号的数值且根据系统设置或区域设置来决定货币符号、小数点、千位分隔符和负数的显示方式。 // 2 0.00
// numfmtid为3表示会计格式即显示为带有货币符号和千位分隔符的数值且根据系统设置或区域设置来决定货币符号、小数点和负数的显示方式。会计格式的特点是货币符号和数值之间有一定的空格且小数位数固定为2。 // 3 #,##0
// numfmtid为4表示百分比格式即显示为带有百分号的数值且根据系统设置或区域设置来决定小数点和负数的显示方式。 // 4 #,##0.00
// numfmtid为5表示千位分隔符格式即显示为带有千位分隔符的数值。 // 5 整数,货币符号旁边($#,##0_);($#,##0)
// numfmtid为6表示负数红色格式即显示为带有负号和红色字体的数值。 // 6 带两位小数的货币符号($#,##0.00_);($#,##0.00)
// numfmtid为7表示千位分隔符格式即显示为带有千位分隔符的数值且根据系统设置或区域设置来决定小数点和负数的显示方式。 // 7 整数,带括号表示负数($#,##0_);Red
// numfmtid为8表示负数红色格式即显示为带有负号和红色字体的数值且根据系统设置或区域设置来决定小数点和千位分隔符的显示方式。 // 8 带两位小数的货币符号和红色负数($#,##0.00_);Red
// numfmtid为9表示分数格式即显示为分数形式的数值且根据系统设置或区域设置来决定负数的显示方式。分数格式的特点是分子和分母都是一位数例如1/2。 // 9 0%
// numfmtid为10表示指数格式即显示为带有小数点和指数的数值。 // 10 0.00%
// numfmtid为11表示日期时间格式即显示为年/月/日 时:分的形式。 // 11 0.00E+00
// numfmtid为12表示时间格式即显示为时:分:秒的形式。 // 12 # ?/?
// numfmtid为13表示时间格式即显示为上午/下午 时:分的形式。 // 13 # ??/??
// numfmtid为16表示日期格式即显示为月/日/年的形式。 // 14 mm-dd-yy
// numfmtid为17表示日期格式即显示为日-月-年的形式。 // 15 d-mmm-yy
// numfmtid为18表示日期格式即显示为年-月-日的形式。 // 16 d-mmm
// numfmtid为19表示日期格式即显示为月-年的形式。 // 17 mmm-yy
// numfmtid为20表示日期格式即显示为年-月的形式。 // 18 h:mm AM/PM
// numfmtid为21表示日期时间格式即显示为年/月/日 时:分:秒的形式。 // 19 h:mm:ss AM/PM
// numfmtid为22表示日期时间格式即显示为年/月/日 上午/下午 时:分的形式。 // 20 h:mm
// numfmtid为23表示时间格式即显示为时:分的形式,带有前导零。 // 21 h:mm:ss
// numfmtid为24表示时间格式即显示为时:分:秒的形式,带有前导零。 // 22 m/d/yy h:mm
// numfmtid为25表示时间格式即显示为上午/下午 时:分的形式,带有前导零。 // 27 [$-404]e/m/d yyyy"年"m"月"
// numfmtid为26表示时间格式即显示为上午/下午 时:分:秒的形式,带有前导零。 // 28 [$-404]e"年"m"月"d"日" m"月"d"日"
// numfmtid为27表示错误值格式即显示为#NULL!。 // 29 [$-404]e"年"m"月"d"日" m"月"d"日"
// numfmtid为28表示错误值格式即显示为#DIV/0!。 // 30 m/d/yy m-d-yy
// numfmtid为29表示错误值格式即显示为#VALUE!。 // 31 yyyy"年"m"月"d"日" yyyy"年"m"月"d"日"
// numfmtid为30表示错误值格式即显示为#REF!。 // 32 hh"時"mm"分" h"时"mm"分"
// numfmtid为31表示错误值格式即显示为#NAME?。 // 33 hh"時"mm"分"ss"秒" h"时"mm"分"ss"秒"
// numfmtid为32表示错误值格式即显示为#NUM!。 // 34 上午/下午hh"時"mm"分" 上午/下午h"时"mm"分"
// numfmtid为33表示错误值格式即显示为#N/A。 // 35 上午/下午hh"時"mm"分"ss"秒" 上午/下午h"时"mm"分"ss"秒"
// numfmtid为34表示错误值格式即显示为#GETTING_DATA。 // 36 [$-404]e/m/d yyyy"年"m"月"
// numfmtid是35表示货币格式即显示为带有货币符号的数值且小数位数为0。 // 37 #,##0 ;(#,##0)
// numfmtid为36表示货币格式即显示为带有货币符号和负数红色的数值。 // 38 #,##0 ;[Red](#,##0)
// numfmtid为38表示会计格式即显示为带有货币符号和负数红色的数值且小数位数为2。 // 39 #,##0.00;(#,##0.00)
// numfmtid为39表示会计格式即显示为带有货币符号和负数红色的数值且小数位数为0。 // 40 #,##0.00;[Red](#,##0.00)
// numfmtid为40表示会计格式即显示为带有货币符号和负数红色的数值且小数位数为4。 // 45 mm:ss
// numfmtid为41表示货币格式即显示为带有货币符号和千位分隔符的数值且小数位数为2。 // 46 [h]:mm:ss
// numfmtid为42表示货币格式即显示为带有货币符号和千位分隔符的数值且小数位数为0。 // 47 mmss.0
// numfmtid为43表示货币格式即显示为带有货币符号和千位分隔符的数值且小数位数为4。 // 48 ##0.0E+0
// numfmtid为44表示货币格式即显示为带有货币符号和千位分隔符的数值且负数红色且小数位数为2。 // 49 @(文本)
// numfmtid为45表示货币格式即显示为带有货币符号和千位分隔符的数值且负数红色且小数位数为0。 // 50 [$-404]e/m/d yyyy"年"m"月"
// numfmtid为46表示货币格式即显示为带有货币符号和千位分隔符的数值且负数红色且小数位数为4。 // 51 [$-404]e"年"m"月"d"日" m"月"d"日"
// numfmtid为47表示会计格式即显示为带有货币符号和千位分隔符的数值且小数位数为2。 // 52 上午/下午hh"時"mm"分" yyyy"年"m"月"
// numfmtid为48表示会计格式即显示为带有货币符号和千位分隔符的数值且小数位数为0。 // 53 上午/下午hh"時"mm"分"ss"秒" m"月"d"日"
// numfmtid为49表示文本格式即显示为文本。 // 54 [$-404]e"年"m"月"d"日" m"月"d"日"
// numfmtid为50表示日期格式即显示为年/月/日的形式,带有前导零。 // 55 上午/下午hh"時"mm"分" 上午/下午h"时"mm"分"
// numfmtid为51表示日期格式即显示为月/日/年的形式,带有前导零。 // 56 上午/下午hh"時"mm"分"ss"秒" 上午/下午h"时"mm"分"ss"秒"
// numfmtid为52表示日期格式即显示为日-月-年的形式,带有前导零。 // 57 [$-404]e/m/d yyyy"年"m"月"
// numfmtid为53表示日期格式即显示为年-月-日的形式,带有前导零。 // 58 [$-404]e"年"m"月"d"日" m"月"d"日"
// numfmtid为54表示日期格式即显示为月-年的形式,带有前导零。
// numfmtid为55表示日期格式即显示为年-月的形式,带有前导零。
// numfmtid为56表示日期时间格式即显示为年/月/日 时:分:秒的形式,带有前导零。
// numfmtid为57表示日期时间格式即显示为年/月/日 上午/下午 时:分的形式,带有前导零。
// numfmtid为58表示日期时间格式即显示为年/月/日 上午/下午 时:分:秒的形式,带有前导零。
// *}

View File

@ -126,7 +126,7 @@ private
private private
sheetName_:string; //sheet名称 sheetName_:string; //sheet名称
excel_;//TSExcelFile对象 [weakref]excel_;//TSExcelFile对象
zipfile_; zipfile_;
tableXmlFile_; tableXmlFile_;
End; End;

View File

@ -1628,7 +1628,7 @@ private
sheetNames_; sheetNames_;
sheetIndexMap_; sheetIndexMap_;
sheetPrefix_:string; sheetPrefix_:string;
zipfile_; [weakref]zipfile_;
xmlFileObjMap_; //XmlFile对象存储 xmlFileObjMap_; //XmlFile对象存储
sheetObjMap_; //XmlSheet对象存储 sheetObjMap_; //XmlSheet对象存储
End; End;

View File

@ -1,5 +1,15 @@
# 更新日志 # 更新日志
## 2025-1-22
### V1.7.8
❗解决`TSDocxFile`和`TSXlsxFile`内存泄露
### word
1. **fix**`CreateTable`由于`fieldnames.tsf`差异报错
## 2025-1-17 ## 2025-1-17
### V1.7.7 ### V1.7.7