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);
Begin
case lowercase(n) of
@ -11559,8 +11559,8 @@ Type TPicture = Class(DocObject, TPictureImpl)
Descr;
Width;//厘米
Height;//厘米
CanvasWidth;
CanvasHeight;
CanvasWidth;
CanvasHeight;
End;
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 := AddParagraph(p, posOpt, '');//段落对象
sec := new TDocSection(p.node_, -2, zipfile_);
sec.NodeUri := 'w:pPr/w:sectPr';
return sec;
End;
@ -14207,9 +14206,9 @@ Type TDocumentBody = Class(DocObject)
End;
End;
zipfile_;
[weakref]zipfile_;
lastParagraph_;
document_;
[weakref]document_;
End;
Type TDocHeaderFooter = Class(TDocumentBody)
@ -14605,7 +14604,7 @@ Type TFootnotes = Class
End;
private
zip_;
[weakref]zip_;
footnotesXml_;
footnotesNode_;
idMap_;
@ -14800,7 +14799,9 @@ Type TTable = Class(DocObject, TTableImpl)
fields := FieldNames(data);
if IsTable(fields) then Begin
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;
End;
if includeIndex then Begin

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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