v1.4.7
This commit is contained in:
parent
5f1064794d
commit
db71b8cd2c
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.4.6
|
// Version 1.4.7
|
||||||
|
|
||||||
Function TOfficeObj(n);
|
Function TOfficeObj(n);
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -13922,25 +13922,21 @@ Type TDocumentBody = Class(DocObject)
|
||||||
p := new TParagraph(pNode);
|
p := new TParagraph(pNode);
|
||||||
//统计数字项目编号
|
//统计数字项目编号
|
||||||
numArr := array();
|
numArr := array();
|
||||||
ilvl := -1;
|
numId := getNumPr('numId', docx, p);
|
||||||
numId := '';
|
ilvl := getNumPr('Level', docx, p);
|
||||||
|
if not ilvl then ilvl := 0;
|
||||||
if ifarray(numIds) then Begin
|
if ifarray(numIds) then Begin
|
||||||
sectPr.Append(p);
|
sectPr.Append(p);
|
||||||
numId := p.Format.NumPr.Value('numId');
|
if ilvl >= 0 and ilvl < 10 then Begin
|
||||||
lvlStr := p.Format.NumPr.Value('Level');
|
if not istable(numIds[numId]) then
|
||||||
if not ifnil(numId) and not ifnil(lvlStr) then Begin
|
numIds[numId] := array(0,0,0,0,0,0,0,0,0,0);
|
||||||
ilvl := Class(TSXml).SafeStrToIntDef(lvlStr, -1);
|
prev := numIds[numId, ilvl];
|
||||||
if ilvl >= 0 and ilvl < 10 then Begin
|
if prev then Begin
|
||||||
if not istable(numIds[numId]) then
|
for i:=ilvl+1 to 9 do
|
||||||
numIds[numId] := array(0,0,0,0,0,0,0,0,0,0);
|
numIds[numId, i] := 0;
|
||||||
prev := numIds[numId, ilvl];
|
|
||||||
if prev then Begin
|
|
||||||
for i:=ilvl+1 to 9 do
|
|
||||||
numIds[numId, i] := 0;
|
|
||||||
End;
|
|
||||||
numIds[numId, ilvl]++;
|
|
||||||
numArr := numIds[numId];
|
|
||||||
End;
|
End;
|
||||||
|
numIds[numId, ilvl]++;
|
||||||
|
numArr := numIds[numId];
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
if bHeadList then Begin //统计大纲显示(目录)
|
if bHeadList then Begin //统计大纲显示(目录)
|
||||||
|
|
@ -13948,7 +13944,7 @@ Type TDocumentBody = Class(DocObject)
|
||||||
if styleId <> '' then Begin
|
if styleId <> '' then Begin
|
||||||
obj := docx.StyleObject().GetStyleById(styleId);
|
obj := docx.StyleObject().GetStyleById(styleId);
|
||||||
if ifObj(obj) then Begin
|
if ifObj(obj) then Begin
|
||||||
level := obj.HeadingLevel();
|
level := getHeadingLevel(docx, obj);
|
||||||
iLevel := Class(TSXml).SafeStrToIntDef(level, -1);
|
iLevel := Class(TSXml).SafeStrToIntDef(level, -1);
|
||||||
if p.Text() <> "" and iLevel+1 >= UpperHeadingLevel and iLevel+1 <= LowerHeadingLevel then Begin
|
if p.Text() <> "" and iLevel+1 >= UpperHeadingLevel and iLevel+1 <= LowerHeadingLevel then Begin
|
||||||
r[ind]['Level'] := strtoint(level);
|
r[ind]['Level'] := strtoint(level);
|
||||||
|
|
@ -13988,6 +13984,40 @@ Type TDocumentBody = Class(DocObject)
|
||||||
End;
|
End;
|
||||||
return r;
|
return r;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function getNumPr(field, docx, p);
|
||||||
|
Begin
|
||||||
|
value := p.Format.NumPr.Value(field);
|
||||||
|
if value then return value;
|
||||||
|
styleId := p.Format.Value('StyleId', 1);
|
||||||
|
return getFieldByStyle(field, docx, docx.StyleObject().GetStyleById(styleid));
|
||||||
|
End;
|
||||||
|
|
||||||
|
Function getFieldByStyle(field, docx, obj);
|
||||||
|
Begin
|
||||||
|
if not ifObj(obj) then return '';
|
||||||
|
numId := obj.pPr.numPr.Value(field);
|
||||||
|
if numId = '' then
|
||||||
|
begin
|
||||||
|
id := o.Value('BasedOn');
|
||||||
|
return getNumIdByStyle(docx, docx.StyleObject().GetStyleById(id));
|
||||||
|
end
|
||||||
|
return numId;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Function getHeadingLevel(docx, obj);
|
||||||
|
Begin
|
||||||
|
if not ifObj(obj) then return '';
|
||||||
|
o := obj;
|
||||||
|
level := obj.HeadingLevel();
|
||||||
|
if level = '' then
|
||||||
|
begin
|
||||||
|
id := o.Value('BasedOn');
|
||||||
|
return getHeadingLevel(docx, docx.StyleObject().GetStyleById(id));
|
||||||
|
end
|
||||||
|
return level;
|
||||||
|
End;
|
||||||
|
|
||||||
|
|
||||||
Function getPictureMaxId();
|
Function getPictureMaxId();
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -14661,7 +14691,7 @@ Type TTable = Class(DocObject, TTableImpl)
|
||||||
cellObj.mergeSpan_ := c[1];
|
cellObj.mergeSpan_ := c[1];
|
||||||
return cellObj;
|
return cellObj;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
///设置列宽
|
///设置列宽
|
||||||
Function ColumnWidth(n, wth);
|
Function ColumnWidth(n, wth);
|
||||||
Begin
|
Begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.4.6
|
// Version 1.4.7
|
||||||
|
|
||||||
Type TSDocxFile = Class
|
Type TSDocxFile = Class
|
||||||
///Version: V1.0 2022-09-20
|
///Version: V1.0 2022-09-20
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.4.6
|
// Version 1.4.7
|
||||||
|
|
||||||
Type TSExcelFile = Class
|
Type TSExcelFile = Class
|
||||||
///Version: V1.0 2022-08-08
|
///Version: V1.0 2022-08-08
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ Type TTableContent = class
|
||||||
Begin
|
Begin
|
||||||
Create(docx, nil);
|
Create(docx, nil);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function Create(docx, node);overload;
|
Function Create(docx, node);overload;
|
||||||
Begin
|
Begin
|
||||||
node_ := node;
|
node_ := node;
|
||||||
|
|
@ -15,7 +15,7 @@ Type TTableContent = class
|
||||||
//contentType := docx.Zip().Get('[Content_Types].xml');
|
//contentType := docx.Zip().Get('[Content_Types].xml');
|
||||||
//class(TSXml).AddOverrideContentType(contentType, 'wmf', 'image/x-wmf');
|
//class(TSXml).AddOverrideContentType(contentType, 'wmf', 'image/x-wmf');
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function SetDefaultFormat();
|
Function SetDefaultFormat();
|
||||||
Begin
|
Begin
|
||||||
defultFont := impl_.sdtPr.rPr;
|
defultFont := impl_.sdtPr.rPr;
|
||||||
|
|
@ -39,7 +39,7 @@ Type TTableContent = class
|
||||||
//impl_.sdtEndPr.rPr.SzCs := 22;
|
//impl_.sdtEndPr.rPr.SzCs := 22;
|
||||||
impl_.sdtEndPr.rPr.Bold := true;
|
impl_.sdtEndPr.rPr.Bold := true;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
///应用目录样式
|
///应用目录样式
|
||||||
Function Apply(); override;
|
Function Apply(); override;
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -50,7 +50,7 @@ Type TTableContent = class
|
||||||
arr := tmp_impl.Marshal();
|
arr := tmp_impl.Marshal();
|
||||||
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
|
class(TSXml).UpdateNode(node_, arr['attributes'], arr['children']);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
///添加目录条目
|
///添加目录条目
|
||||||
///UpperHeadingLevel:标题最高级别
|
///UpperHeadingLevel:标题最高级别
|
||||||
///LowerHeadingLevel:标题最低级别
|
///LowerHeadingLevel:标题最低级别
|
||||||
|
|
@ -79,26 +79,26 @@ Type TTableContent = class
|
||||||
//mParagraph.Run.rPr.Size := 21/2;
|
//mParagraph.Run.rPr.Size := 21/2;
|
||||||
//mParagraph.Run.rPr.Bold := true;
|
//mParagraph.Run.rPr.Bold := true;
|
||||||
_AddStdContent(mParagraph);
|
_AddStdContent(mParagraph);
|
||||||
|
|
||||||
goback := TOfficeObj('TParagraph');
|
goback := TOfficeObj('TParagraph');
|
||||||
id := docx_.Document().GetBookMarkID();
|
id := docx_.Document().GetBookMarkID();
|
||||||
goback.MarkStart.Name := '_GoBack';
|
goback.MarkStart.Name := '_GoBack';
|
||||||
goback.MarkStart.ID := id;
|
goback.MarkStart.ID := id;
|
||||||
goback.MarkEnd.ID := id;
|
goback.MarkEnd.ID := id;
|
||||||
//_AddStdContent(goback);
|
//_AddStdContent(goback);
|
||||||
|
|
||||||
//缺省目录,需要word或wps打开后,更新目录
|
//缺省目录,需要word或wps打开后,更新目录
|
||||||
//_AddDefaultTableContent(UpperHeadingLevel, LowerHeadingLevel);
|
//_AddDefaultTableContent(UpperHeadingLevel, LowerHeadingLevel);
|
||||||
|
|
||||||
//自定义页码计算与word、wps有差异,不推荐使用
|
//自定义页码计算与word、wps有差异,不推荐使用
|
||||||
_AddTableContent(posOpt, UpperHeadingLevel, LowerHeadingLevel);
|
_AddTableContent(posOpt, UpperHeadingLevel, LowerHeadingLevel);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function _AddDefaultTableContent(UpperHeadingLevel, LowerHeadingLevel);
|
Function _AddDefaultTableContent(UpperHeadingLevel, LowerHeadingLevel);
|
||||||
Begin
|
Begin
|
||||||
p := _AddItem(UpperHeadingLevel, LowerHeadingLevel, UpperHeadingLevel - 1, true);
|
p := _AddItem(UpperHeadingLevel, LowerHeadingLevel, UpperHeadingLevel - 1, true);
|
||||||
_AddStdContent(p);
|
_AddStdContent(p);
|
||||||
|
|
||||||
p2 := TOfficeObj('TParagraph');
|
p2 := TOfficeObj('TParagraph');
|
||||||
//p2.Format.SpaceAfter := 0;
|
//p2.Format.SpaceAfter := 0;
|
||||||
run := p2.AddRun();
|
run := p2.AddRun();
|
||||||
|
|
@ -107,7 +107,7 @@ Type TTableContent = class
|
||||||
run.fldCharType := 'end';
|
run.fldCharType := 'end';
|
||||||
_AddStdContent(p2);
|
_AddStdContent(p2);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function _AddItem(UpperHeadingLevel, LowerHeadingLevel, level, first);
|
Function _AddItem(UpperHeadingLevel, LowerHeadingLevel, level, first);
|
||||||
Begin
|
Begin
|
||||||
p := TOfficeObj('TParagraph');
|
p := TOfficeObj('TParagraph');
|
||||||
|
|
@ -162,7 +162,7 @@ Type TTableContent = class
|
||||||
End
|
End
|
||||||
if numStr <> '' then run_t := numStr + ' ' + r[i]['Text'];
|
if numStr <> '' then run_t := numStr + ' ' + r[i]['Text'];
|
||||||
else run_t := r[i]['Text'];
|
else run_t := r[i]['Text'];
|
||||||
r1.SetText(run_t);
|
r1.SetText(run_t, 1);
|
||||||
|
|
||||||
r2 := h.AddRun();
|
r2 := h.AddRun();
|
||||||
r2.rPr.noProof := true;
|
r2.rPr.noProof := true;
|
||||||
|
|
@ -203,7 +203,6 @@ Type TTableContent = class
|
||||||
r8.fldCharType := 'end';
|
r8.fldCharType := 'end';
|
||||||
|
|
||||||
_AddStdContent(p);
|
_AddStdContent(p);
|
||||||
|
|
||||||
End;
|
End;
|
||||||
|
|
||||||
p2 := TOfficeObj('TParagraph');
|
p2 := TOfficeObj('TParagraph');
|
||||||
|
|
@ -215,7 +214,7 @@ Type TTableContent = class
|
||||||
_AddStdContent(p2);
|
_AddStdContent(p2);
|
||||||
|
|
||||||
End;
|
End;
|
||||||
|
|
||||||
///更新目录
|
///更新目录
|
||||||
Function UpdatePageNumbers();
|
Function UpdatePageNumbers();
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -240,24 +239,24 @@ Type TTableContent = class
|
||||||
end
|
end
|
||||||
return r;
|
return r;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function Marshal();
|
Function Marshal();
|
||||||
Begin
|
Begin
|
||||||
return impl_.Marshal();
|
return impl_.Marshal();
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Property Format read readFormat;
|
Property Format read readFormat;
|
||||||
Function readFormat();
|
Function readFormat();
|
||||||
Begin
|
Begin
|
||||||
return impl_.sdtPr;
|
return impl_.sdtPr;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Property EndFormat read readEndFormat;
|
Property EndFormat read readEndFormat;
|
||||||
Function readEndFormat();
|
Function readEndFormat();
|
||||||
Begin
|
Begin
|
||||||
return impl_.sdtEndPr;
|
return impl_.sdtEndPr;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Property Font read readFont;
|
Property Font read readFont;
|
||||||
Function readFont();
|
Function readFont();
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -268,7 +267,7 @@ Type TTableContent = class
|
||||||
Begin
|
Begin
|
||||||
impl_.SdtContent.NewChildNode( array("field":"", "name":"w:p", "obj":o, "attrEx":"", "nodeType":"") );
|
impl_.SdtContent.NewChildNode( array("field":"", "name":"w:p", "obj":o, "attrEx":"", "nodeType":"") );
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function _GetStyle(level);
|
Function _GetStyle(level);
|
||||||
Begin
|
Begin
|
||||||
styleName := ifstring(level) ? level : 'TOC' $ (level + 1);
|
styleName := ifstring(level) ? level : 'TOC' $ (level + 1);
|
||||||
|
|
@ -278,30 +277,30 @@ Type TTableContent = class
|
||||||
End;
|
End;
|
||||||
return style.StyleId;
|
return style.StyleId;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function _GetBookMarkId(p);
|
Function _GetBookMarkId(p);
|
||||||
Begin
|
Begin
|
||||||
node := p.node_.FirstChildElement('w:bookmarkStart');
|
node := p.node_.FirstChildElement('w:bookmarkStart');
|
||||||
if ifObj(node) then
|
if ifObj(node) then
|
||||||
return node.GetAttribute('w:name');
|
return node.GetAttribute('w:name');
|
||||||
bookMarkID := docx_.Document().GetBookMarkID();
|
bookMarkID := docx_.Document().GetBookMarkID();
|
||||||
return p.AddBookMark();
|
return p.AddBookMark();
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function _CheckNodes(name);
|
Function _CheckNodes(name);
|
||||||
Begin
|
Begin
|
||||||
z := docx_.Zip();
|
z := docx_.Zip();
|
||||||
xml := z.Get('word/' + name);
|
xml := z.Get('word/' + name);
|
||||||
if not ifObj(xml) then Begin
|
if not ifObj(xml) then Begin
|
||||||
xmlData := TOfficeTemplate(name);
|
xmlData := TOfficeTemplate(name);
|
||||||
if not ifString(xmlData) then
|
if not ifString(xmlData) then
|
||||||
return ;
|
return ;
|
||||||
z.Add('word/' + name, xmlData);
|
z.Add('word/' + name, xmlData);
|
||||||
rels := 'word/_rels/document.xml.rels';
|
rels := 'word/_rels/document.xml.rels';
|
||||||
relsObj := z.Get(rels);
|
relsObj := z.Get(rels);
|
||||||
[rId, target] := class(TSXml).FindRelationshipRid(relsObj, '');
|
[rId, target] := class(TSXml).FindRelationshipRid(relsObj, '');
|
||||||
rId ++;
|
rId ++;
|
||||||
|
|
||||||
if name = 'endnotes.xml' then Begin
|
if name = 'endnotes.xml' then Begin
|
||||||
class(TSXml).AddRelationshipRid(relsObj, name, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes', 'rId' $ rId);
|
class(TSXml).AddRelationshipRid(relsObj, name, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes', 'rId' $ rId);
|
||||||
contentType := z.Get('[Content_Types].xml');
|
contentType := z.Get('[Content_Types].xml');
|
||||||
|
|
@ -314,7 +313,7 @@ Type TTableContent = class
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
docx_;
|
docx_;
|
||||||
node_;
|
node_;
|
||||||
impl_;
|
impl_;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue