完善range

This commit is contained in:
csh
2023-12-20 09:06:40 +08:00
parent f0560b2330
commit b9e419541b
29 changed files with 1553 additions and 494 deletions
+114
View File
@@ -0,0 +1,114 @@
Type TSDocxListFormat = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(docx, pPr);
Function Apply();virtual;
Function GetNumId(type);
protected
docx_;
pr_; // TOfficeObj("TwpPr")
document_;
public
// Methods
Function ApplyBulletDefault(DefaultListBehavior);virtual;
Function ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior);virtual;
Function ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel);virtual;
Function ApplyNumberDefault(DefaultListBehavior);virtual;
Function ApplyOutlineNumberDefault(DefaultListBehavior);virtual;
Function CanContinuePreviousList(ListTemplate);virtual;
Function ConvertNumbersToText();virtual;
Function ListIndent();virtual;
Function ListOutdent();virtual;
Function RemoveNumbers(NumberType);virtual;
// Properties
property List read ReadList;
property ListLevelNumber read ReadListLevelNumber write WriteListLevelNumber;
property ListPictureBullet read ReadListPictureBullet;
property ListString read ReadListString;
property ListTemplate read ReadListTemplate;
property ListType read ReadListType;
property ListValue read ReadListValue;
property SingleList read ReadSingleList;
property SingleListTemplate read ReadSingleListTemplate;
Function ReadSingleListTemplate();virtual;
Function ReadSingleList();virtual;
Function ReadListValue();virtual;
Function ReadListType();virtual;
Function ReadListTemplate();virtual;
Function ReadListString();virtual;
Function ReadListPictureBullet();virtual;
Function WriteListLevelNumber(value);virtual;
Function ReadListLevelNumber();virtual;
Function ReadList();virtual;
End;
// ============== 实现 ================= //
Function TSDocxListFormat.Init(docx, pr);
Begin
docx_ := docx;
pr_ := pr;
document_ := self.Parent;
while not (document_ is class(TSDocxDocument)) do
document_ := document_.Parent;
End;
Function TSDocxListFormat.GetNumId(type);
Begin
numid := document_.GetParam(type);
if not ifnil(numid) then return numid;
case type of
"BulletDefault": numid := docx_.NumberingObject().NumberId("bullet", 0);
"NumberDefault": numid := docx_.NumberingObject().NumberId("singlelevel", "decimal");
"OutlineNumberDefault": numid := docx_.NumberingObject().NumberId("multilevel", "decimal");
end;
document_.SetParam(type, numid);
return numid;
End;
Function TSDocxListFormat.Apply();virtual;
Begin
pr_.Update("first");
End;
Function TSDocxListFormat.ApplyBulletDefault(DefaultListBehavior);
Begin
pr_.NumPr.Level := 0;
pr_.NumPr.NumId := self.GetNumId("BulletDefault");
pr_.Update("first");
End;
Function TSDocxListFormat.ApplyNumberDefault(DefaultListBehavior);
Begin
pr_.NumPr.Level := 0;
pr_.NumPr.NumId := self.GetNumId("NumberDefault");
pr_.Update("first");
End;
Function TSDocxListFormat.ApplyOutlineNumberDefault(DefaultListBehavior);virtual;
Begin
get_level := function(obj);
begin
if not ifObj(obj) then return '';
level := obj.HeadingLevel();
if level = "" then
begin
id := obj.Value("BasedOn", true);
return ##get_level(docx_.StyleObject().GetStyleById(id));
end
end
value := pr_.Value("OutlineLevel");
if ifnil(value) then
begin
obj := docx_.StyleObject().GetStyleById(styleid);
value := ##get_level(obj);
end
pr_.NumPr.Level := value;
pr_.NumPr.NumId := self.GetNumId("OutlineNumberDefault");
pr_.Update("first");
End;
+177
View File
@@ -0,0 +1,177 @@
Type TSDocxListFormatRange = Class(TSDocxListFormat)
Uses TSDocxEnumerations;
public
Function Init(docx, rangeObj);
Function Apply();override;
private
Function CallFunction(pf, value);overload;
Function CallFunction(pf);overload;
private
paragraph_arr_;
public
// Methods
Function ApplyBulletDefault(DefaultListBehavior);override;
Function ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior);override;
Function ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel);override;
Function ApplyNumberDefault(DefaultListBehavior);override;
Function ApplyOutlineNumberDefault(DefaultListBehavior);override;
Function CanContinuePreviousList(ListTemplate);override;
Function ConvertNumbersToText();override;
Function ListIndent();override;
Function ListOutdent();override;
Function RemoveNumbers(NumberType);override;
// Properties
Function ReadSingleListTemplate();override;
Function ReadSingleList();override;
Function ReadListValue();override;
Function ReadListType();override;
Function ReadListTemplate();override;
Function ReadListString();override;
Function ReadListPictureBullet();override;
Function WriteListLevelNumber(value);override;
Function ReadListLevelNumber();override;
Function ReadList();override;
End;
// ============== 实现 ================= //
Function TSDocxListFormatRange.Init(docx, rangeObj);
Begin
class(TSDocxListFormat).Init(docx, nil);
paragraph_arr_ := sselect distinct(["tparagraph"]) from rangeObj.data_ end;
End;
Function TSDocxListFormatRange.Apply();override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).Apply), nil);
End;
Function TSDocxListFormatRange.CallFunction(pf, value);overload;
Begin
for i:=0 to length(paragraph_arr_)-1 do
begin
pr_ := paragraph_arr_[i].pPr;
if not ifObj(pr_.Root()) then continue;
##pf(value);
end
End;
Function TSDocxListFormatRange.CallFunction(pf);overload;
Begin
ret := nil;
for i:=0 to length(paragraph_arr_)-1 do
begin
pr_ := paragraph_arr_[i].pPr;
if not ifObj(pr_.Root()) then continue;
cur := ##pf();
if ifnil(ret) then ret := cur;
if ret <> cur then return TSDocxEnumerations.wdUndefined();
end
return ret;
End;
// Methods
Function TSDocxListFormatRange.ApplyBulletDefault(DefaultListBehavior);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).ApplyBulletDefault), DefaultListBehavior);
End;
Function TSDocxListFormatRange.ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior);override;
Begin
End;
Function TSDocxListFormatRange.ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel);override;
Begin
End;
Function TSDocxListFormatRange.ApplyNumberDefault(DefaultListBehavior);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).ApplyNumberDefault), DefaultListBehavior);
End;
Function TSDocxListFormatRange.ApplyOutlineNumberDefault(DefaultListBehavior);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).ApplyOutlineNumberDefault), DefaultListBehavior);
End;
Function TSDocxListFormatRange.CanContinuePreviousList(ListTemplate);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).CanContinuePreviousList), ListTemplate);
End;
Function TSDocxListFormatRange.ConvertNumbersToText();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ConvertNumbersToText));
End;
Function TSDocxListFormatRange.ListIndent();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ListIndent));
End;
Function TSDocxListFormatRange.ListOutdent();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ListOutdent));
End;
Function TSDocxListFormatRange.RemoveNumbers(NumberType);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).RemoveNumbers), NumberType);
End;
Function TSDocxListFormatRange.ReadSingleListTemplate();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadSingleListTemplate));
End;
Function TSDocxListFormatRange.ReadSingleList();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadSingleList));
End;
Function TSDocxListFormatRange.ReadListValue();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListValue));
End;
Function TSDocxListFormatRange.ReadListType();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListType));
End;
Function TSDocxListFormatRange.ReadListTemplate();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListTemplate));
End;
Function TSDocxListFormatRange.ReadListString();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListString));
End;
Function TSDocxListFormatRange.ReadListPictureBullet();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListPictureBullet));
End;
Function TSDocxListFormatRange.WriteListLevelNumber(value);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormatRange).WriteListLevelNumber), Value);
End;
Function TSDocxListFormatRange.ReadListLevelNumber();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListLevelNumber));
End;
Function TSDocxListFormatRange.ReadList();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadList));
End;