Merge branch 'master' into word

This commit is contained in:
csh
2023-07-14 10:37:15 +08:00
13 changed files with 143 additions and 45 deletions
+31 -8
View File
@@ -1,4 +1,4 @@
// Version 1.3.0
// Version 1.3.5
Function TOfficeObj(n);
Begin
@@ -5851,7 +5851,7 @@ type TwrPr=class(NodeInfo)
,("field":"Strike","name":"w:strike","obj":Strike,"attrEx":"","nodeType":"empty","attrName":"", "desc":"单个删除线", "class":"")
,("field":"dStrike","name":"w:dstrike","obj":dStrike,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"两个删除线", "class":"")
,("field":"kern","name":"w:kern","obj":kern,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"字体紧排", "class":"")
,("field":"Size","name":"w:sz","obj":Size,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"字体大小", "class":"")
,("field":"Sz","name":"w:sz","obj":Sz,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"字体大小", "class":"")
,("field":"szCs","name":"w:szCs","obj":szCs,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"复杂脚本字体大小", "class":"")
,("field":"U","name":"w:u","obj":U,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"下划线", "class":"")
,("field":"vertAlign","name":"w:vertAlign","obj":vertAlign,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"对齐方式.", "class":"")
@@ -5878,6 +5878,16 @@ type TwrPr=class(NodeInfo)
rFont.XMLhAnsi := nName;
rFont.XMLascii := nName;
End;
Property Size read readSize write writeSize;
Function writeSize(n);
Begin
Sz := n * 2;
End;
Function readSize();
Begin
return int(Sz / 2);
End;
//Attributes
@@ -5891,7 +5901,7 @@ type TwrPr=class(NodeInfo)
Strike;
dStrike;
kern;
Size;
Sz;
szCs;
U;
vertAlign;
@@ -12133,7 +12143,7 @@ private
cnt := length(data);
//[err, axis] := ColumnNumberToName(2 * ind + 2);
[err, axis] := ColumnNumberToName(ind + 2);
Val.NumRef.F := fmt('Sheet1!${}$2:${}${}',axis, axis, cnt+1);
Val.NumRef.F := format('Sheet1!$%s$2:$%s$%d', axis, axis, cnt+1);
Val.NumRef.NumCache.PtCount := cnt;
Val.NumRef.NumCache.formatCode := 'General';
for i:=0 to cnt-1 do Begin
@@ -12162,8 +12172,7 @@ private
else if istable(Categories) then Begin //word 图表
cnt := length(Categories);
//[err, axis] := ColumnNumberToName(2 * ind + 1);
//cat.StrRef.F := fmt('Sheet1!${}$2:${}${}',axis, axis, cnt+1);
cat.StrRef.F := fmt('Sheet1!$A$2:$A${}', cnt+1);
cat.StrRef.F := format('Sheet1!$A$2:$A$%d', cnt+1);
cat.StrRef.StrCache.PtCount := cnt;
for i:=0 to cnt-1 do Begin
Tpt := TOfficeObj('Tpt');
@@ -13280,6 +13289,19 @@ Type TDocumentBody = Class(DocObject)
return array(length(errArr), tslFuncCount, errArr);
End;
Function RunTslCode(code, err);
Begin
try
//println('run code=[{}]', code);
if code <> '' then
eval(&code);
except
err := ExceptObject.ErrInfo;
return false;
End;
return true;
End;
Function ExecInnerTSLImpl(docx);
Begin
tslFuncCount := 0;
@@ -13413,13 +13435,14 @@ Type TDocumentBody = Class(DocObject)
TOfficeApi().Set('CodePage', 'gbk');
try
tslFuncCount ++;
println('run code=[{}]', code);
if code <> '' then
eval(&code);
str := eval(&code);
except
println('run code={},err={}', code, ExceptObject.ErrInfo);
errArr[ length(errArr) ] := array('code':code, 'err':ExceptObject.ErrInfo);
str := '';
End;
tslFuncCount ++;
tNode := curRun.node_.FirstChildElement('w:t');
if not ifObj(tNode) then Begin //没有在外部插入文字
tslBegParagraphNode.DeleteChild(curRunNode);
+21 -4
View File
@@ -1,4 +1,4 @@
// Version 1.3.0
// Version 1.3.5
Type TSDocxFile = Class
///Version: V1.0 2022-09-20
@@ -18,7 +18,17 @@ Type TSDocxFile = Class
Function Create(alias, fname); overload;
Begin
init();
OpenFile(alias, fname);
OpenFile(alias, fname, nil);
End;
///构造函数,打开已经存在的docx文件
///alias: string,文件目录别名
///fname: string,文件名
///passwd: string,密码
Function Create(alias, fname, passwd); overload;
Begin
init();
OpenFile(alias, fname, passwd);
End;
Function Destory();
@@ -34,11 +44,12 @@ Type TSDocxFile = Class
///打开docx文件
///alias: string,文件目录别名
///fname: string,文件名
///[passwd]: string,密码
///返回:[err, errmsg]
Function OpenFile(alias, fname);
Function OpenFile(alias, fname, passwd);
Begin
if not ifObj(zipfile_) then return array(-1, 'Create ZipFile object fail.');
[err, errmsg] := zipfile_.Open(alias, fname);
[err, errmsg] := zipfile_.Open(alias, fname, passwd);
if err=0 then Begin
document_ := new docxDocument(zipfile_);
End;
@@ -56,6 +67,12 @@ Type TSDocxFile = Class
End;
return array(err, errmsg);
End;
///设置密码
Function SetPassword(passwd)
Begin
zipfile_.Password := passwd;
End;
///保存文件
///返回: [err, info]
+21 -4
View File
@@ -1,4 +1,4 @@
// Version 1.3.0
// Version 1.3.5
Type TSExcelFile = Class
///Version: V1.0 2022-08-08
@@ -18,7 +18,17 @@ Type TSExcelFile = Class
Function Create(alias, fname); overload;
Begin
init();
OpenFile(alias, fname);
OpenFile(alias, fname, nil);
End;
///构造函数,打开已经存在的excel文件
///alias: string,文件目录别名
///fname: string,文件名
///passwd: string,密码
Function Create(alias, fname, passwd); overload;
Begin
init();
OpenFile(alias, fname, passwd);
End;
//析构函数
@@ -35,12 +45,13 @@ Type TSExcelFile = Class
///打开excel文件
///alias: string,文件目录别名
///fname: string,文件名
///[passwd]: string,密码
///返回: [err, errmsg]
Function OpenFile(alias, fname);
Function OpenFile(alias, fname, passwd);
Begin
init();
if not ifObj(zipfile_) then return array(-1, 'Create ZipFile object fail.');
[err, errmsg] := zipfile_.Open(alias, fname);
[err, errmsg] := zipfile_.Open(alias, fname, passwd);
if err=0 then Begin
workbook_ := new xlsxWorkBook(zipfile_);
workbook_.Load();
@@ -69,6 +80,12 @@ Type TSExcelFile = Class
return zipfile_.Save();
End;
///设置密码
Function SetPassword(passwd)
Begin
zipfile_.Password := passwd;
End;
///打开二进制内容
///data: 二进制数据
///返回: [err, errmsg]
+4
View File
@@ -0,0 +1,4 @@
Function TOfficeInit();
Begin
sysparams['TOffice sys api'] := nil;
End;
+4 -4
View File
@@ -30,16 +30,16 @@ Type TDocxChart = Class(TSChart)
Function GetInnerXml();
Begin
ETU := 360045;//1cm单位
return fmt('<w:r>
return format('<w:r>
<w:drawing>
<wp:inline>
<wp:extent cx="{}" cy="{}"/>
<wp:extent cx="%d" cy="%d"/>
<wp:effectExtent l="0" t="0" r="19050" b="19050"/>
<wp:docPr id="{}" name="{}"/>
<wp:docPr id="%d" name="%s"/>
<wp:cNvGraphicFramePr />
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/chart">
<c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId{}"/>
<c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId%d"/>
</a:graphicData>
</a:graphic>
</wp:inline>
+1 -1
View File
@@ -30,7 +30,7 @@ Type TSTag = Class
Begin
if not ifArray(map_) then Begin
map_ := array();
println('attribute={}',attribute_);
//println('attribute={}',attribute_);
arr := Str2Array(attribute_, ' ');
for i := 0 to length(arr)-1 do Begin
kv := Str2Array(arr[i], '=');
+1 -1
View File
@@ -124,7 +124,7 @@ xmlns:v="urn:schemas-microsoft-com:vml">
if ifObj(node) then Begin
[err, col, row] := excel_.CellNameToCoordinates(cell);
clientData := TOfficeObj('TClientData');
clientData.Anchor := fmt('{},23,{},0,{},{},{},5',col, row, 1+col+lineCount, colCount+col-1, 1+row+lineCount);
clientData.Anchor := format('%d,23,%d,0,%d,%d,%d,5',col, row, 1+col+lineCount, colCount+col-1, 1+row+lineCount);
clientData.Row := row - 1;
ClientData.Column := col - 1;
node.UnMarshal(clientData.Marshal());
+1 -1
View File
@@ -101,7 +101,7 @@ private
name := "列" $ col_index++;
excel_.WorkBook().SetCellValue(sheetName_, cell, name);
end
table_str += fmt('<tableColumn id="{}" name="{}" />', id++, name);
table_str += format('<tableColumn id="%d" name="%s" />', id, name);
end
table_str += "</tableColumns>";