Compare commits
25
Commits
7283b7ac28
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0aa9639ae0 | ||
|
|
a68cfb01d7 | ||
|
|
46a8fb020b | ||
|
|
e4a6d3f0c2 | ||
|
|
649d7d868a | ||
|
|
1f7d5f403b | ||
|
|
dbebc2805c | ||
|
|
e917dce1df | ||
|
|
f685fdced1 | ||
|
|
4cac47522a | ||
|
|
5196e6424c | ||
|
|
b2040b1db5 | ||
|
|
dffa3f8192 | ||
|
|
3ba20a7c5e | ||
|
|
1ac447c94e | ||
|
|
b4649653d9 | ||
|
|
e592781419 | ||
|
|
c59043f90b | ||
|
|
9a846d935d | ||
|
|
c5bdd38506 | ||
|
|
ffbde2f964 | ||
|
|
5a002f9767 | ||
|
|
b9e419541b | ||
|
|
f0560b2330 | ||
|
|
3781bc96e7 |
@@ -1 +1,50 @@
|
||||
# TSOfficeVba 项目: 基于 TSOffice 项目,以类 VBA 方式,用 TSL 实现对 excel、word 的操作
|
||||
# TSOfficeVba
|
||||
|
||||
## 介绍
|
||||
|
||||
该项目主要是以类`VBA`的方式完成对 office 文件的读写,使用方式与`VBA`大致相同,可参考[微软 VBA 文档][1]
|
||||
|
||||
如:打开一个 word 文件
|
||||
|
||||
vba打开:
|
||||
|
||||
```vbs
|
||||
Dim path As String
|
||||
Dim doc As Document
|
||||
set path = "./default.docx"
|
||||
set doc = Documents.Open FileName:=path ' 打开一个文件
|
||||
doc.Activate ' 可设置doc为ActiveDocument
|
||||
Msgbox ActiveDocument.Paragraphs.Count ' 可用doc/ActiveDocument进行操作
|
||||
```
|
||||
|
||||
tsl 打开:
|
||||
|
||||
```cpp
|
||||
path := "./default.docx"
|
||||
application := new TSDocxApplication(); // new一个Application对象
|
||||
doc := application.Documents.Open(FileName: path) // 通过application打开文件
|
||||
doc.Activate; // 激活
|
||||
ActiveDocument := application.ActiveDocument; // 需要通过application属性赋值才能使用ActiveDocument
|
||||
echo ActiveDocument.Paragraphs.Count; // 也可用doc进行操作
|
||||
```
|
||||
|
||||
## 帮助文档
|
||||
|
||||
[帮助文档][3]涵盖了**TSOfficeVBA**对`VBA`的支持情况,以及相关的**FAQ**
|
||||
|
||||
也可生成你的帮助文档
|
||||
|
||||
```txt
|
||||
tsl .\demo\TSVbaDocxHelp.tsl --path=C:\\xxx\\funcext
|
||||
```
|
||||
|
||||
`TSVbaDocxHelp.tsl`:帮助脚本文件,克隆后在demo目录下
|
||||
`--path=`: 部署的路径
|
||||
|
||||
## 部署
|
||||
|
||||
该项目基于[**TSOffice**][2],所以部署到`funcext`时需要检查**TSOffice**是否部署
|
||||
|
||||
[1]: https://learn.microsoft.com/en-us/office/vba/api/overview/library-reference
|
||||
[2]: https://git.mytsl.cn/tinysoft/OfficePlugin
|
||||
[3]: ./TSVbaDocxHelp.docx
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,479 @@
|
||||
Uses TSDocxEnumerations;
|
||||
Application := new TSDocxApplication();
|
||||
|
||||
path := SysparamStr(1);
|
||||
if path and LeftStr(path, 7) = "--path=" then
|
||||
begin
|
||||
path := path[8:] $ "\\OfficeVBA\\docx\\";
|
||||
end
|
||||
savepath := "TSVbaDocxHelp.docx";
|
||||
|
||||
// document := Application.Documents.Open(FileName: openpath);
|
||||
document := Application.Documents.Add;
|
||||
document.Activate;
|
||||
ActiveDocument := Application.ActiveDocument;
|
||||
|
||||
FirstPage(ActiveDocument);
|
||||
Preface(ActiveDocument);
|
||||
SupportedList(path, ActiveDocument);
|
||||
FAQ(ActiveDocument);
|
||||
AddTablesOfContents(ActiveDocument);
|
||||
|
||||
ActiveDocument.SaveAs2(FileName : savepath);
|
||||
echo "ActiveDocument.SaveAs2 = " $ savepath $ "\n";
|
||||
return;
|
||||
|
||||
Function FirstPage(ActiveDocument);
|
||||
Begin
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.Text := "TSVBA";
|
||||
para.Range.InsertBefore("天软");
|
||||
para.Range.InsertAfter("帮助文档");
|
||||
para.Range.Font.Bold := true;
|
||||
para.Range.Font.Size := 25;
|
||||
para.Range.Font.Apply();
|
||||
para.Format.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
para.Format.Style := "Title";
|
||||
para.Format.Apply(); // 写属性后要apply
|
||||
|
||||
image := TOfficeTemplate('tinysoft.gif',true);
|
||||
shape := ActiveDocument.InlineShapes.AddPicture(image);
|
||||
shape.Width := 410;
|
||||
shape.Height := 75;
|
||||
shape.Apply();
|
||||
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
ActiveDocument.Paragraphs(3).Range.InsertParagraphAfter();
|
||||
ActiveDocument.Paragraphs(4).Range.InsertParagraphBefore();
|
||||
range := ActiveDocument.Paragraphs(4).Range;
|
||||
range.Collapse(TSDocxEnumerations.wdCollapseEnd());
|
||||
table := ActiveDocument.Tables.Add(Range:=range, NumRows:=3, NumColumns:=2, DefaultTableBehavior:=TSDocxEnumerations.wdWord9TableBehavior);
|
||||
// println("ActiveDocument.Paragraphs.Count = {}", ActiveDocument.Paragraphs.Count);
|
||||
table.Columns(1).Width := 120;
|
||||
table.Columns(2).Width := 320;
|
||||
data := array(("文档名称", "TSVBA"), ("文档版本", "Version 1.0"), ("修订日期", Datetimetostr(now())));
|
||||
for i:=1 to 3 do
|
||||
begin
|
||||
cell := table.Cell(i, 1);
|
||||
cell.Shading.Texture := TSDocxEnumerations.wdTexture27Pt5Percent;
|
||||
cell.Shading.ForegroundPatternColor := TSDocxEnumerations.wdColorAutomatic;
|
||||
cell.Shading.BackgroundPatternColor := TSDocxEnumerations.wdColorGray15;
|
||||
cell.Shading.Apply();
|
||||
cell.Range.Text := data[i-1][0];
|
||||
cell.Range.Font.Bold := true;
|
||||
cell.Range.Font.Apply();
|
||||
|
||||
cell := table.Cell(i, 2);
|
||||
cell.VerticalAlignment := TSDocxEnumerations.wdCellAlignVerticalCenter;
|
||||
cell.Range.Text := data[i-1][1];
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
end
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.InsertBreak(TSDocxEnumerations.wdPageBreak());
|
||||
End;
|
||||
|
||||
Function AddTitle(ActiveDocument, text, level);
|
||||
Begin
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
info := array(
|
||||
(22, TSDocxEnumerations.wdViolet(), TSDocxEnumerations.wdOutlineLevel1(), 0),
|
||||
(16, TSDocxEnumerations.wdDarkRed(), TSDocxEnumerations.wdOutlineLevel2(), 2),
|
||||
(16, TSDocxEnumerations.wdTeal(), TSDocxEnumerations.wdOutlineLevel3(), 15),
|
||||
);
|
||||
index := level - 1;
|
||||
para.Range.Text := text;
|
||||
para.Range.Font.Size := info[index][0];
|
||||
para.Range.Font.Bold := true;
|
||||
para.Range.Font.ColorIndex := info[index][1];
|
||||
para.Range.Font.Apply();
|
||||
para.Format.OutlineLevel := info[index][2];
|
||||
para.Format.LeftIndent := info[index][3];
|
||||
// para.Format.CharacterUnitLeftIndent := 0;
|
||||
para.Format.Apply();
|
||||
para.Range.ListFormat.ApplyOutlineNumberDefault();
|
||||
End;
|
||||
|
||||
Function Preface(ActiveDocument);
|
||||
Begin
|
||||
AddTitle(ActiveDocument, "前言", 1);
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Format.PageBreakBefore := true;
|
||||
para.Format.Apply();
|
||||
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.Text := "该文档由docx_vba_help.tsl脚本自动生成。";
|
||||
para.Range.Font.Size := 14;
|
||||
para.Range.Font.Italic := true;
|
||||
para.Range.Font.ColorIndex := TSDocxEnumerations.wdPink();
|
||||
para.Range.Font.Apply();
|
||||
para.Format.CharacterUnitFirstLineIndent := 2;
|
||||
para.Format.FirstLineIndent := 20;
|
||||
para.Format.Apply();
|
||||
font := para.Range.Font.Duplicate;
|
||||
format := para.Format.Duplicate;
|
||||
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.Text := "本项目基于TSOffice,使用前请先部署TSOffice。该项目以类VBA的方式,用TSL实现对excel、word的操作。";
|
||||
para.Range.Font := font;
|
||||
para.Format := format;
|
||||
para.Range.Font.Italic := false;
|
||||
para.Range.Font.ColorIndex := TSDocxEnumerations.wdBlack();
|
||||
para.Range.Font.Apply();
|
||||
font := para.Range.Font.Duplicate;
|
||||
format := para.Format.Duplicate;
|
||||
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.Text := "项目目前仅支持常用的操作,比如对段落、表格的操作。需注意该项目在使用时可能存在与VBA有差异的情况。具体支持列表如下:";
|
||||
para.Range.Font := font;
|
||||
para.Format := format;
|
||||
End;
|
||||
|
||||
Function SupportedList(path, ActiveDocument);
|
||||
Begin
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
AddTitle(ActiveDocument, "TSVBA支持对象", 1);
|
||||
|
||||
// println("\n\nAuto generate classInfo..");
|
||||
echo "Auto generate classInfo...\n";
|
||||
files := array(
|
||||
path + "TSDocxApplication.tsf",
|
||||
path + "border\\TSDocxBorder.tsf",
|
||||
path + "border\\TSDocxBorders.tsf",
|
||||
path + "TSDocxCell.tsf",
|
||||
path + "TSDocxCells.tsf",
|
||||
path + "TSDocxColumn.tsf",
|
||||
path + "TSDocxColumns.tsf",
|
||||
path + "TSDocxDocument.tsf",
|
||||
path + "TSDocxDocuments.tsf",
|
||||
path + "font\\TSDocxFont.tsf",
|
||||
path + "listformat\\TSDocxListFormat.tsf",
|
||||
path + "TSDocxInlineShape.tsf",
|
||||
path + "TSDocxInlineShapes.tsf",
|
||||
path + "TSDocxTable.tsf",
|
||||
path + "TSDocxTables.tsf",
|
||||
path + "TSDocxTablesOfContents.tsf",
|
||||
path + "paragraphformat\\TSDocxParagraphFormat.tsf",
|
||||
path + "TSDocxParagraphs.tsf",
|
||||
path + "TSDocxParagraph.tsf",
|
||||
path + "TSDocxRange.tsf",
|
||||
// path + "TSDocxRows.tsf",
|
||||
// path + "TSDocxRow.tsf",
|
||||
path + "shading\\TSDocxShading.tsf",
|
||||
);
|
||||
// files := array(
|
||||
// path + "TSDocxTables.tsf",
|
||||
// );
|
||||
for i:=0 to length(files)-1 do
|
||||
begin
|
||||
file := files[i];
|
||||
name := ExtractFileName(file);
|
||||
name := name[7:length(name)-4];
|
||||
AddTitle(ActiveDocument, name, 2);
|
||||
|
||||
methods := array();
|
||||
properties := array();
|
||||
LoadClassInfo(file, methods, properties);
|
||||
AddMethods(ActiveDocument, methods);
|
||||
AddProperties(ActiveDocument, properties);
|
||||
// println("file = {}, is OK!", file);
|
||||
echo "file = " $ file $ " , is OK!\n";
|
||||
end
|
||||
End;
|
||||
|
||||
Function AddMethods(ActiveDocument, arr);
|
||||
Begin
|
||||
if not istable(arr) then return;
|
||||
methods := array();
|
||||
for k, v in arr do
|
||||
if v = 2 then methods[k] := v;
|
||||
for k, v in arr do
|
||||
methods[k] := v;
|
||||
|
||||
AddTitle(ActiveDocument, "方法支持情况", 3);
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
row := length(methods) + 1;
|
||||
para.Range.Collapse(TSDocxEnumerations.wdCollapseEnd());
|
||||
table := ActiveDocument.Tables.Add(Range := para.Range, NumRows := row, NumColumns := 2, DefaultTableBehavior := TSDocxEnumerations.wdWord9TableBehavior);
|
||||
table.Columns(1).Width := 220;
|
||||
table.Columns(2).Width := 220;
|
||||
|
||||
init_title := function(cell, title);
|
||||
begin
|
||||
cell.Shading.Texture := TSDocxEnumerations.wdTexture12Pt5Percent;
|
||||
cell.Shading.ForegroundPatternColor := TSDocxEnumerations.wdColorAutomatic;
|
||||
cell.Shading.BackgroundPatternColorIndex := TSDocxEnumerations.wdTurquoise;
|
||||
cell.Shading.Apply();
|
||||
cell.Range.Text := title;
|
||||
cell.Range.Font.Bold := true;
|
||||
cell.Range.Font.Size := 14;
|
||||
cell.Range.Font.ColorIndex := TSDocxEnumerations.wdRed();
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
border := cell.Borders(TSDocxEnumerations.wdBorderBottom);
|
||||
border.LineStyle := TSDocxEnumerations.wdLineStyleTriple();
|
||||
border.ColorIndex := TSDocxEnumerations.wdBlue();
|
||||
border.Apply();
|
||||
end
|
||||
##init_title(table.Cell(1, 1), "VBA函数");
|
||||
##init_title(table.Cell(1, 2), "TSVBA是否支持");
|
||||
i := 2;
|
||||
for k, v in methods do
|
||||
begin
|
||||
cell := table.Cell(i, 1);
|
||||
cell.Range.Text := k;
|
||||
cell.Range.Font.NameAscii := "Consolas";
|
||||
cell.Range.Font.NameFarEast := "微软雅黑";
|
||||
cell.Range.Font.Size := 11;
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
cell := table.Cell(i, 2);
|
||||
cell.Range.Text := v = 2 ? "✅" : "❌";
|
||||
cell.Range.Font.NameAscii := "Segoe UI Emoji";
|
||||
cell.Range.Font.NameOther := "Segoe UI Emoji";
|
||||
cell.Range.Font.NameBi := "Segoe UI Emoji";
|
||||
cell.Range.Font.Size := 11;
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
i++;
|
||||
end
|
||||
End;
|
||||
|
||||
Function AddProperties(ActiveDocument, arr);
|
||||
Begin
|
||||
if not istable(arr) then return;
|
||||
properties := array();
|
||||
for k, v in arr do
|
||||
if v["r"] = 2 or v["w"] = 2 then properties[k] := v;
|
||||
for k, v in arr do
|
||||
properties[k] := v;
|
||||
|
||||
AddTitle(ActiveDocument, "属性支持情况", 3);
|
||||
|
||||
row := length(properties) + 2;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.Collapse(TSDocxEnumerations.wdCollapseEnd());
|
||||
table := ActiveDocument.Tables.Add(Range := para.Range, NumRows := row, NumColumns := 4, DefaultTableBehavior := TSDocxEnumerations.wdWord9TableBehavior);
|
||||
table.Columns(1).Width := 110;
|
||||
table.Columns(2).Width := 110;
|
||||
table.Columns(3).Width := 110;
|
||||
table.Columns(4).Width := 110;
|
||||
table.Cell(1, 1).Merge(table.Cell(1, 2));
|
||||
table.Cell(1, 3).Merge(table.Cell(1, 4));
|
||||
|
||||
init_title := function(cell, title);
|
||||
begin
|
||||
cell.Shading.Texture := TSDocxEnumerations.wdTexture22Pt5Percent;
|
||||
cell.Shading.ForegroundPatternColor := TSDocxEnumerations.wdColorAutomatic;
|
||||
cell.Shading.BackgroundPatternColor := TSDocxEnumerations.wdColorLime;
|
||||
cell.Shading.Apply();
|
||||
cell.Range.Text := title;
|
||||
cell.Range.Font.Bold := true;
|
||||
cell.Range.Font.Size := 14;
|
||||
cell.Range.Font.ColorIndex := TSDocxEnumerations.wdRed();
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
border := cell.Borders(TSDocxEnumerations.wdBorderBottom);
|
||||
border.LineStyle := TSDocxEnumerations.wdLineStyleTriple();
|
||||
border.ColorIndex := TSDocxEnumerations.wdBlue();
|
||||
border.Apply();
|
||||
end
|
||||
##init_title(table.Cell(1, 1), "VBA属性");
|
||||
##init_title(table.Cell(1, 3), "TSVBA是否支持");
|
||||
init_info := function(cell, content);
|
||||
begin
|
||||
cell.Range.Text := content;
|
||||
cell.Range.Font.NameAscii := "Consolas";
|
||||
cell.Range.Font.NameFarEast := "微软雅黑";
|
||||
cell.Range.Font.Size := 12;
|
||||
cell.Range.Font.ColorIndex := TSDocxEnumerations.wdViolet();
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
cell.Shading.Texture := TSDocxEnumerations.wdTexture7Pt5Percent;
|
||||
cell.Shading.ForegroundPatternColor := TSDocxEnumerations.wdColorAutomatic;
|
||||
cell.Shading.BackgroundPatternColor := TSDocxEnumerations.wdColorGray30;
|
||||
cell.Shading.Apply();
|
||||
end
|
||||
##init_info(table.Cell(2, 1), "属性名称");
|
||||
##init_info(table.Cell(2, 2), "读写");
|
||||
##init_info(table.Cell(2, 3), "读");
|
||||
##init_info(table.Cell(2, 4), "写");
|
||||
|
||||
i := 3;
|
||||
for k, v in properties do
|
||||
begin
|
||||
cell := table.Cell(i, 1);
|
||||
// println("k = {}", k);
|
||||
cell.Range.Text := k;
|
||||
cell.Range.Font.NameAscii := "Consolas";
|
||||
cell.Range.Font.NameFarEast := "微软雅黑";
|
||||
cell.Range.Font.Size := 11;
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
|
||||
content := "";
|
||||
if v["r"] then content += "读";
|
||||
if v["w"] then content += "/写";
|
||||
cell := table.Cell(i, 2);
|
||||
cell.Range.Text := content;
|
||||
cell.Range.Font.NameAscii := "Consolas";
|
||||
cell.Range.Font.NameFarEast := "微软雅黑";
|
||||
cell.Range.Font.Size := 11;
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
|
||||
r := v["r"] = 2 ? "✅" : "❌";
|
||||
cell := table.Cell(i, 3);
|
||||
cell.Range.Text := r;
|
||||
cell.Range.Font.NameAscii := "Segoe UI Emoji";
|
||||
cell.Range.Font.NameOther := "Segoe UI Emoji";
|
||||
cell.Range.Font.NameBi := "Segoe UI Emoji";
|
||||
cell.Range.Font.Size := 11;
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
|
||||
font := cell.Range.Font;
|
||||
w := v["w"] = 2 ? "✅" : "❌";
|
||||
cell := table.Cell(i, 4);
|
||||
cell.Range.Text := w;
|
||||
cell.Range.Font.NameAscii := "Segoe UI Emoji";
|
||||
cell.Range.Font.NameOther := "Segoe UI Emoji";
|
||||
cell.Range.Font.NameBi := "Segoe UI Emoji";
|
||||
cell.Range.Font.Size := 11;
|
||||
cell.Range.Font.Apply();
|
||||
cell.Range.ParagraphFormat.Alignment := TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
cell.Range.ParagraphFormat.Apply();
|
||||
i++;
|
||||
end
|
||||
End;
|
||||
|
||||
Function FAQ(ActiveDocument);
|
||||
Begin
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
AddTitle(ActiveDocument, "FAQ", 1);
|
||||
|
||||
AddTitle(ActiveDocument, "TSVBA在使用上有哪些特别的地方", 2);
|
||||
FAQContent(ActiveDocument, "TSVBA重载了[]运算符,对于诸如Documents, Paragraphs, Tables, Borders等,均可用[]获取对应的对象");
|
||||
FAQContent(ActiveDocument, "Documents := ActiveDocument.Documents; // 获取Documents对象");
|
||||
FAQContent(ActiveDocument, "Document := Documents[2]; // 等价于 Documents.Item(2);");
|
||||
|
||||
AddTitle(ActiveDocument, "为什么设置了Font, Shading等时未生效", 2);
|
||||
FAQContent(ActiveDocument, "考虑到性能问题,类似xxx.Range.Font.Size := 10;并不会立即生效,需要手动调用Apply方法,如:");
|
||||
FAQContent(ActiveDocument, "paragraph.Range.Font.Name := 'Consolas';");
|
||||
FAQContent(ActiveDocument, "paragraph.Range.Font.Size := 12;");
|
||||
FAQContent(ActiveDocument, "paragraph.Range.Font.Apply();");
|
||||
FAQContent(ActiveDocument, "注意一:在应用Font, Shading, ParagraphFormat, border, ListFormat以及InlineShape时均需要执行Apply方法使得设置生效");
|
||||
FAQContent(ActiveDocument, "注意二:使用这些类时,最多支持到两级赋值,比如说paragraph.Range.Font中,Range是第一级,paragraph是第二级。若使用paragraphs.Item(1).Range.Font,则不会生效。这里出现了第三级Paragraphs");
|
||||
|
||||
AddTitle(ActiveDocument, "如何使用VBA中的Enumerations", 2);
|
||||
FAQContent(ActiveDocument, "用了TSL的Unit特性,将用到的枚举项均封装到了TSDocxEnumerations中");
|
||||
FAQContent(ActiveDocument, "Uses TSDocxEnumerations;");
|
||||
FAQContent(ActiveDocument, "xxx := TSDocxEnumerations.WdBlack;");
|
||||
|
||||
AddTitle(ActiveDocument, "为什么目录无法计算页码", 2);
|
||||
FAQContent(ActiveDocument, "由于目录页码计算比较复杂,目前仅提供生成目录项功能,不支持页码的计算。");
|
||||
FAQContent(ActiveDocument, "另外使用TablesOfContents.Add生成目录时,仅支持Range, UpperHeadingLevel, LowerHeadingLevel三个参数的设置,其余参数设置均无效。");
|
||||
|
||||
AddTitle(ActiveDocument, "为什么添加图片的FileName参数不生效", 2);
|
||||
FAQContent(ActiveDocument, "因为TSVBA中,FileName是一个二进制格式,需要传入的是图片的二进制内容,而不是路径");
|
||||
End;
|
||||
|
||||
Function FAQContent(ActiveDocument, text);
|
||||
Begin
|
||||
ActiveDocument.Paragraphs.Add;
|
||||
para := ActiveDocument.Paragraphs.Last;
|
||||
para.Range.Text := text;
|
||||
para.Range.Font.Name := "Consolas";
|
||||
para.Range.Font.NameAscii := "Consolas";
|
||||
para.Range.Font.NameFarEast := "微软雅黑";
|
||||
para.Range.Font.Size := 12;
|
||||
para.Range.Font.Apply();
|
||||
para.Format.CharacterUnitFirstLineIndent := 2;
|
||||
para.Format.FirstLineIndent := 20;
|
||||
para.Format.Apply();
|
||||
End;
|
||||
|
||||
Function AddTablesOfContents(ActiveDocument);
|
||||
Begin
|
||||
range := ActiveDocument.Paragraphs(16).Range;
|
||||
// println("range.text = {}", range.Text);
|
||||
range.Collapse(TSDocxEnumerations.wdCollapseStart());
|
||||
ActiveDocument.TablesOfContents.Add(Range := range, UseHeadingStyles := true, UpperHeadingLevel := 1, LowerHeadingLevel := 9);
|
||||
End;
|
||||
|
||||
Function LoadClassInfo(f, methods, properties);
|
||||
Begin
|
||||
[err,fh] := io_open(f);
|
||||
if err then return t;
|
||||
[err, data] := io_read(fh);
|
||||
io_close(fh);
|
||||
if err then return t;
|
||||
|
||||
lines := str2array(string(data), "\n");
|
||||
flag := true;
|
||||
for i:=0 to length(lines)-1 do
|
||||
begin
|
||||
line := lines[i];
|
||||
if AnsiContainsText(line, "// Methods") then flag := false;
|
||||
if AnsiContainsText(line, "// Properties") then flag := true;
|
||||
|
||||
if not flag and ParseRegExpr("\\s\+Function\\s\+(\\w+)\\(", line, "i", result, MPos, Mlen) and length(result) then
|
||||
methods[result[0][1]] := 1;
|
||||
if AnsiContainsText(line, "property") then
|
||||
begin
|
||||
ParseRegExpr("\\s\+property\\s\+(\\w+)\\s\+read\\s\+(\\w+)(\\s\+write\\s\+(\\w+))\?", line, "", result, MPos, Mlen);
|
||||
if not istable(result) then continue;
|
||||
rw := array();
|
||||
if result[0][2] then rw["r"] := 1;
|
||||
if result[0][4] then rw["w"] := 1;
|
||||
properties[result[0][1]] := rw;
|
||||
end
|
||||
if StartsText("End;", line) then break;
|
||||
// if AnsiContainsText(line, "End;") then break;
|
||||
end
|
||||
for j:=i to length(lines)-1 do
|
||||
begin
|
||||
line := lines[j];
|
||||
if not AnsiContainsText(line, "Function") then continue;
|
||||
if ParseRegExpr("Function\\s\+.*\\.(\\w+)\\(", line, "i", result, MPos, Mlen) and istable(result) then
|
||||
begin
|
||||
name := result[0][1];
|
||||
if not name then continue;
|
||||
if methods[name] then
|
||||
begin
|
||||
methods[name] := 2;
|
||||
continue;
|
||||
end
|
||||
if AnsiContainsText(name, "Read") then
|
||||
begin
|
||||
rname := name[5:];
|
||||
if properties[rname] then properties[rname]["r"] := 2;
|
||||
end
|
||||
else if AnsiContainsText(name, "Write") then
|
||||
begin
|
||||
wname := name[6:];
|
||||
if properties[wname] then properties[wname]["w"] := 2;
|
||||
end
|
||||
end
|
||||
end
|
||||
End;
|
||||
|
||||
Function Test();
|
||||
Begin
|
||||
line := "Function TSDocxTables.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior);";
|
||||
ParseRegExpr("Function\\s\+.*\\.(\\w+)\\(", line, "i", result, MPos, Mlen);
|
||||
println("result = {}", result);
|
||||
End;
|
||||
@@ -4,7 +4,11 @@ public
|
||||
Function Create();
|
||||
Function Init();
|
||||
|
||||
private
|
||||
documents_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Activate();
|
||||
Function AddAddress(TagID, Value);
|
||||
Function AutomaticChange();
|
||||
@@ -53,7 +57,7 @@ public
|
||||
Function PointsToMillimeters(Points);
|
||||
Function PointsToPicas(Points);
|
||||
Function PointsToPixels(Points, fVertical);
|
||||
Function PrintOut(Background, Append, Range, OutputFileName, From_, To_, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight);
|
||||
Function PrintOut(Background, Append, Range, OutputFileName, _From, _To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight);
|
||||
Function ProductCode();
|
||||
Function PutFocusInMailHeader();
|
||||
Function Quit(SaveChanges, OriginalFormat, RouteDocument);
|
||||
@@ -67,6 +71,7 @@ public
|
||||
Function SubstituteFont(UnavailableFont, SubstituteFont);
|
||||
Function ToggleKeyboard();
|
||||
|
||||
// Properties
|
||||
property ActiveDocument read ReadActiveDocument;
|
||||
property ActiveEncryptionSession read ReadActiveEncryptionSession;
|
||||
property ActivePrinter read ReadActivePrinter write WriteActivePrinter;
|
||||
@@ -338,15 +343,12 @@ public
|
||||
Function ReadActiveEncryptionSession();
|
||||
Function ReadActiveDocument();
|
||||
|
||||
private
|
||||
documents_;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxApplication.Create();
|
||||
Begin
|
||||
Class(TSVbaBase).Create(self, random(10000000), self);
|
||||
Class(TSVbaBase).Create(self, random(100000000), self);
|
||||
Init();
|
||||
End;
|
||||
|
||||
@@ -356,12 +358,11 @@ Begin
|
||||
documents_.Init();
|
||||
End;
|
||||
|
||||
|
||||
// property
|
||||
// Properties
|
||||
Function TSDocxApplication.ReadDocuments(Index)
|
||||
Begin
|
||||
if ifnil(Index) then return documents_;
|
||||
return documents_[Index];
|
||||
return documents_.Item(Index);
|
||||
End;
|
||||
|
||||
Function TSDocxApplication.ReadActiveDocument();
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
Type TSDocxBorder = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(borders, borderType);
|
||||
|
||||
private
|
||||
border_;
|
||||
|
||||
public
|
||||
property ArtStyle read ReadArtStyle write WriteArtStyle;
|
||||
property ArtWidth read ReadArtWidth write WriteArtWidth;
|
||||
property Color read ReadColor write WriteColor;
|
||||
property ColorIndex read ReadColorIndex write WriteColorIndex;
|
||||
property Inside read ReadInside;
|
||||
property LineStyle read ReadLineStyle write WriteLineStyle;
|
||||
property LineWidth read ReadLineWidth write WriteLineWidth;
|
||||
property Visible read ReadVisible write WriteVisible;
|
||||
Function WriteVisible();
|
||||
Function ReadVisible();
|
||||
Function WriteLineWidth();
|
||||
Function ReadLineWidth();
|
||||
Function WriteLineStyle(value);virtual;
|
||||
Function ReadLineStyle();
|
||||
Function ReadInside();
|
||||
Function WriteColorIndex();
|
||||
Function ReadColorIndex();
|
||||
Function WriteColor();
|
||||
Function ReadColor();
|
||||
Function WriteArtWidth();
|
||||
Function ReadArtWidth();
|
||||
Function WriteArtStyle();
|
||||
Function ReadArtStyle();
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBorder.Init(borders, borderType);
|
||||
Begin
|
||||
|
||||
case borderType of
|
||||
TSDocxEnumerations.wdBorderBottom():
|
||||
border_ := borders.Bottom;
|
||||
TSDocxEnumerations.wdBorderDiagonalDown():
|
||||
border_ := borders.tl2br;
|
||||
TSDocxEnumerations.wdBorderDiagonalUp():
|
||||
border_ := borders.tr2bl;
|
||||
TSDocxEnumerations.wdBorderHorizontal():
|
||||
border_ := borders.InsideH;
|
||||
TSDocxEnumerations.wdBorderLeft():
|
||||
border_ := borders.Left;
|
||||
TSDocxEnumerations.wdBorderRight():
|
||||
border_ := borders.Right;
|
||||
TSDocxEnumerations.wdBorderTop():
|
||||
border_ := borders.Top;
|
||||
TSDocxEnumerations.wdBorderVertical():
|
||||
border_ := borders.InsideV;
|
||||
end;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxBorder.WriteLineStyle(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdLineStyleDashDot():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashDotDot():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashDotStroked():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashLargeGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashSmallGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDot():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDouble():
|
||||
border_.Val := "double";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDoubleWavy():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleEmboss3D():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleEngrave3D():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleInset():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleNone():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleOutset():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleSingle():
|
||||
border_.Val := "single";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleSingleWavy():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThickThinLargeGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThickThinMedGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThickThinSmallGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickLargeGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickMedGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickSmallGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickThinLargeGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickThinMedGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickThinSmallGap():
|
||||
border_.Val := "nil";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleTriple():
|
||||
border_.Val := "nil";
|
||||
|
||||
end;
|
||||
border_.Update();
|
||||
|
||||
End;
|
||||
@@ -1,36 +0,0 @@
|
||||
Type TSDocxBorderTable = Class(TSDocxBorder)
|
||||
|
||||
public
|
||||
Function Init(table, borderType);
|
||||
|
||||
public
|
||||
Function WriteLineStyle(value);override;
|
||||
|
||||
private
|
||||
table_;
|
||||
border_type_;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBorderTable.Init(table, borderType);
|
||||
Begin
|
||||
table_ := table;
|
||||
border_type_ := borderType;
|
||||
End;
|
||||
|
||||
|
||||
// property
|
||||
Function TSDocxBorderTable.WriteLineStyle(value);override;
|
||||
Begin
|
||||
for r:=1 to table_.Rows() do
|
||||
begin
|
||||
for c:=1 to table_.Cols() do
|
||||
begin
|
||||
cell := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
||||
cell.Init(table_, r, c);
|
||||
cell.Borders(border_type_).LineStyle := value;
|
||||
end
|
||||
end
|
||||
End;
|
||||
+275
-62
@@ -2,21 +2,33 @@ Type TSDocxCell = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(table, row, column);
|
||||
Function Init(docx, table, r, c);overload;
|
||||
Function Init(node);overload;
|
||||
|
||||
private
|
||||
Function GetCell();
|
||||
Function SetCellTcPrWidth(row, col, widthValue, widthType);
|
||||
Function SetCellTcPrWidth(r, c, widthValue, widthType);overload;
|
||||
Function SetCellTcPrWidth(tcpr, widthValue, widthType);overload;
|
||||
Function GetTcprObject(r, c);
|
||||
Function GetTrPrObject();
|
||||
Function AdjustSameWidth();
|
||||
Function AdjustFirstColumn(widthValue);
|
||||
Function ProcessWidthValue(widthValue, widthType);
|
||||
|
||||
private
|
||||
docx_;
|
||||
table_; // TOfficeObj("TTable")
|
||||
row_;
|
||||
column_;
|
||||
tcpr_; // TOfficeObj("TwTcPr")
|
||||
trpr_; // TOfficeObj("TwTrPr")
|
||||
cell_; // TOfficeObj("TCell")
|
||||
min_dxa_width_; // 最小宽度 321
|
||||
range_;
|
||||
row_;
|
||||
column_;
|
||||
shading_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function AutoSum();
|
||||
Function Delete(ShiftCells);
|
||||
Function Formula(Formula, NumFormat);
|
||||
@@ -26,6 +38,7 @@ public
|
||||
Function SetWidth(ColumnWidth, RulerStyle);
|
||||
Function Split(NumRows, NumColumns);
|
||||
|
||||
// Properties
|
||||
property Borders read ReadBorders;
|
||||
property BottomPadding read ReadBottomPadding write WriteBottomPadding;
|
||||
property Column read ReadColumn;
|
||||
@@ -50,19 +63,19 @@ public
|
||||
property VerticalAlignment read ReadVerticalAlignment write WriteVerticalAlignment;
|
||||
property Width read ReadWidth write WriteWidth;
|
||||
property WordWrap read ReadWordWrap write WriteWordWrap;
|
||||
Function WriteWordWrap(wrap);
|
||||
Function WriteWordWrap(value);
|
||||
Function ReadWordWrap();
|
||||
Function WriteWidth(width);
|
||||
Function WriteWidth(value);
|
||||
Function ReadWidth();
|
||||
Function WriteVerticalAlignment(alignment);
|
||||
Function WriteVerticalAlignment(value);
|
||||
Function ReadVerticalAlignment();
|
||||
Function WriteTopPadding(top);
|
||||
Function WriteTopPadding(value);
|
||||
Function ReadTopPadding();
|
||||
Function ReadTables(index);
|
||||
Function ReadShading();
|
||||
Function ReadRowIndex();
|
||||
Function ReadRow();
|
||||
Function WriteRightPadding(right);
|
||||
Function WriteRightPadding(value);
|
||||
Function ReadRightPadding();
|
||||
Function ReadRange();
|
||||
Function ReadPrevious();
|
||||
@@ -72,38 +85,45 @@ public
|
||||
Function ReadPreferredWidth();
|
||||
Function ReadNext();
|
||||
Function ReadNestingLevel();
|
||||
Function WriteLeftPadding(left);
|
||||
Function WriteLeftPadding(value);
|
||||
Function ReadLeftPadding();
|
||||
Function WriteID();
|
||||
Function ReadID();
|
||||
Function WriteHeightRule();
|
||||
Function WriteHeightRule(value);
|
||||
Function ReadHeightRule();
|
||||
Function WriteHeight();
|
||||
Function WriteHeight(value);
|
||||
Function ReadHeight();
|
||||
Function WriteFitText();
|
||||
Function ReadFitText();
|
||||
Function ReadColumnIndex();
|
||||
Function ReadColumn();
|
||||
Function WriteBottomPadding(bottom);
|
||||
Function WriteBottomPadding(value);
|
||||
Function ReadBottomPadding();
|
||||
Function ReadBorders(index);
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxCell.Init(table, row, column);
|
||||
Function TSDocxCell.Init(docx, table, r, c);overload;
|
||||
Begin
|
||||
docx_ := docx;
|
||||
table_ := table;
|
||||
row_ := row;
|
||||
column_ := column;
|
||||
row_ := r;
|
||||
column_ := c;
|
||||
min_dxa_width_ := 321;
|
||||
cell := table_.GetCells()[row_-1, column_-1];
|
||||
if not ifnil(cell) then
|
||||
begin
|
||||
tcpr_node := class(TSXml).GetNode(cell[0], "w:tcPr", "first");
|
||||
tcpr_ := TOfficeObj("TwTcPr");
|
||||
tcpr_.InitRootNode(tcpr_node);
|
||||
end
|
||||
tcpr_ := GetTcprObject(row_, column_);
|
||||
trpr_ := nil; // 延迟访问
|
||||
cell_ := nil;
|
||||
range_ := nil;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.Init(node);overload;
|
||||
Begin
|
||||
cell_ := TOfficeObj("tcell");
|
||||
cell_.Create(node);
|
||||
tcpr_node := class(TSXml).GetNode(node, "w:tcPr", "first");
|
||||
tcpr_ := TOfficeObj("TwTcPr");
|
||||
tcpr_.InitRootNode(tcpr_node);
|
||||
End;
|
||||
|
||||
Function TSDocxCell.GetCell();
|
||||
@@ -113,16 +133,55 @@ Begin
|
||||
return cell_;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.SetCellTcPrWidth(row, col, widthValue, widthType);
|
||||
Function TSDocxCell.ProcessWidthValue(widthValue, widthType);
|
||||
Begin
|
||||
cell := table_.GetCells()[row-1, col-1];
|
||||
if ifnil(cell) then return;
|
||||
case widthType of
|
||||
"dxa":
|
||||
begin
|
||||
widthValue := widthValue * 20;
|
||||
if widthValue < min_dxa_width_ then widthValue := min_dxa_width_;
|
||||
end
|
||||
"pct":
|
||||
begin
|
||||
widthValue := widthValue * 50;
|
||||
end
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.GetTrPrObject();
|
||||
Begin
|
||||
if ifObj(trpr_) then return trpr_;
|
||||
tr_node := class(TSXml).GetNodeN(table_.Root(), "w:tr", column_);
|
||||
trpr_node := tr_node.FirstChild("w:trPr");
|
||||
if not ifObj(trpr_node) then trpr_node := tr_node.InsertFirstChild("element", "w:trPr");
|
||||
trpr_:= TOfficeObj("TwTrPr");
|
||||
trpr_.InitRootNode(trpr_node);
|
||||
return trpr_;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.SetCellTcPrWidth(r, c, widthValue, widthType);overload;
|
||||
Begin
|
||||
tcpr_obj := GetTcprObject(r, c);
|
||||
if ifnil(tcpr_obj) then return;
|
||||
SetCellTcPrWidth(tcpr_obj, widthValue, widthType);
|
||||
End;
|
||||
|
||||
Function TSDocxCell.SetCellTcPrWidth(tcpr, widthValue, widthType);overload;
|
||||
Begin
|
||||
ProcessWidthValue(widthValue, widthType);
|
||||
tcpr.Width := widthValue;
|
||||
tcpr.Type := widthType;
|
||||
tcpr.Update();
|
||||
End;
|
||||
|
||||
Function TSDocxCell.GetTcprObject(r, c);
|
||||
Begin
|
||||
cell := table_.GetCell(r, c);
|
||||
if ifnil(cell) then return nil;
|
||||
tcpr_node := class(TSXml).GetNode(cell[0], "w:tcPr", "first");
|
||||
tcpr_obj := TOfficeObj("TwTcPr");
|
||||
tcpr_obj.InitRootNode(tcpr_node);
|
||||
tcpr_obj.Width := widthValue;
|
||||
tcpr_obj.Type := widthType;
|
||||
tcpr_obj.Update();
|
||||
tcpr := TOfficeObj("TwTcPr");
|
||||
tcpr.InitRootNode(tcpr_node);
|
||||
return tcpr;
|
||||
End;
|
||||
|
||||
// function
|
||||
@@ -144,6 +203,79 @@ Begin
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.SetHeight(RowHeight, HeightRule);
|
||||
Begin
|
||||
trpr_obj := GetTrPrObject();
|
||||
case HeightRule of
|
||||
TSDocxEnumerations.wdRowHeightAtLeast:
|
||||
begin
|
||||
h_rule := "least";
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdRowHeightAuto:
|
||||
begin
|
||||
h_rule := "auto";
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdRowHeightExactly:
|
||||
begin
|
||||
h_rule := "exact";
|
||||
end
|
||||
end;
|
||||
trpr_obj.Rule := h_rule;
|
||||
trpr_obj.Height := RowHeight * 20;
|
||||
trpr_obj.Update();
|
||||
End;
|
||||
|
||||
Function TSDocxCell.SetWidth(ColumnWidth, RulerStyle);
|
||||
Begin
|
||||
if ifnil(RulerStyle) then RulerStyle := TSDocxEnumerations.wdAdjustNone();
|
||||
width_value := ColumnWidth;
|
||||
case RulerStyle of
|
||||
TSDocxEnumerations.wdAdjustFirstColumn():
|
||||
AdjustFirstColumn(width_value);
|
||||
|
||||
TSDocxEnumerations.wdAdjustNone():
|
||||
begin
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdAdjustProportional():
|
||||
begin
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdAdjustSameWidth():
|
||||
AdjustSameWidth();
|
||||
end;
|
||||
SetCellTcPrWidth(tcpr_, width_value, "dxa");
|
||||
End;
|
||||
|
||||
Function TSDocxCell.AdjustFirstColumn(widthValue);
|
||||
Begin
|
||||
tcpr_next := GetTcprObject(row_, column_ + 1);
|
||||
if not tcpr_next then return;
|
||||
ww := tcpr_next.Value("width");
|
||||
new_width := ww + tcpr_.Value("width") - widthValue;
|
||||
SetCellTcPrWidth(tcpr_next, new_width, "dxa");
|
||||
End;
|
||||
|
||||
Function TSDocxCell.AdjustSameWidth();
|
||||
Begin
|
||||
if column_ <> table_.Cols() then
|
||||
begin
|
||||
after_total_width := 0;
|
||||
tcpr_arr := array();
|
||||
for i:=column_+1 to table_.Cols() do
|
||||
begin
|
||||
tcpr := GetTcprObject(row_, i);
|
||||
after_total_width += tcpr.Value("Width");
|
||||
tcpr_arr[length(tcpr_arr)] := tcpr;
|
||||
end
|
||||
after_width := integer(after_total_width / length(tcpr_arr));
|
||||
for i:=0 to length(tcpr_arr)-1 do
|
||||
SetCellTcPrWidth(tcpr_arr[i], after_width, "dxa");
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxCell.Merge(MergeTo);
|
||||
Begin
|
||||
table_.Merge(self.RowIndex, self.ColumnIndex, MergeTo.RowIndex, MergeTo.ColumnIndex, false);
|
||||
@@ -168,20 +300,36 @@ Begin
|
||||
End;
|
||||
|
||||
// VBA width=100,xml是2000
|
||||
Function TSDocxCell.WriteWidth(width);
|
||||
Function TSDocxCell.WriteWidth(value);
|
||||
Begin
|
||||
tcpr_.Width := width * 20;
|
||||
tcpr_.Type := "dxa";
|
||||
width_type := tcpr_.Value("Type");
|
||||
width_value := value;
|
||||
case width_type of
|
||||
"auto":
|
||||
begin
|
||||
width_value := width_value * 20;
|
||||
width_type := "dxa";
|
||||
end
|
||||
"dxa": width_value := width_value * 20;
|
||||
"pct": width_value := width_value * 12.05;
|
||||
end;
|
||||
tcpr_.Width := integer(width_value);
|
||||
tcpr_.Type := width_type;
|
||||
tcpr_.Update();
|
||||
End;
|
||||
Function TSDocxCell.ReadWidth();
|
||||
Begin
|
||||
return tcpr_.Value("width") / 20;
|
||||
width_type := tcpr_.Value("Type");
|
||||
width_value := tcpr_.Value("width");
|
||||
case width_type of
|
||||
"dxa", "auto": return width_value / 20;
|
||||
"pct": return width_value / 12.05;
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteWordWrap(wrap);
|
||||
Function TSDocxCell.WriteWordWrap(value);
|
||||
Begin
|
||||
tcpr_.noWrap := wrap ? 0 : 1;
|
||||
tcpr_.noWrap := value ? 0 : 1;
|
||||
tcpr_.Update();
|
||||
End;
|
||||
Function TSDocxCell.ReadWordWrap();
|
||||
@@ -189,9 +337,9 @@ Begin
|
||||
return tcpr_.Value("noWrap") ? false : true;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteVerticalAlignment(alignment);
|
||||
Function TSDocxCell.WriteVerticalAlignment(value);
|
||||
Begin
|
||||
case alignment of
|
||||
case value of
|
||||
TSDocxEnumerations.wdCellAlignVerticalBottom():
|
||||
begin
|
||||
tcpr_.vAlign := "bottom";
|
||||
@@ -222,9 +370,9 @@ Begin
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteTopPadding(top);
|
||||
Function TSDocxCell.WriteTopPadding(value);
|
||||
Begin
|
||||
tcpr_.CellMar.Top := 20 * top;
|
||||
tcpr_.CellMar.Top := 20 * value;
|
||||
tcpr_.CellMar.TopType := "dxa";
|
||||
tcpr_.Update();
|
||||
End;
|
||||
@@ -233,9 +381,9 @@ Begin
|
||||
return tcpr_.CellMar.Value("Top") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteLeftPadding(left);
|
||||
Function TSDocxCell.WriteLeftPadding(value);
|
||||
Begin
|
||||
tcpr_.CellMar.Left := 20 * left;
|
||||
tcpr_.CellMar.Left := 20 * value;
|
||||
tcpr_.CellMar.LeftType := "dxa";
|
||||
tcpr_.Update();
|
||||
End;
|
||||
@@ -244,9 +392,9 @@ Begin
|
||||
return tcpr_.CellMar.Value("Left") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteBottomPadding(bottom);
|
||||
Function TSDocxCell.WriteBottomPadding(value);
|
||||
Begin
|
||||
tcpr_.CellMar.Bottom := 20 * bottom;
|
||||
tcpr_.CellMar.Bottom := 20 * value;
|
||||
tcpr_.CellMar.BottomType := "dxa";
|
||||
tcpr_.Update();
|
||||
End;
|
||||
@@ -255,9 +403,9 @@ Begin
|
||||
return tcpr_.CellMar.Value("Bottom") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteRightPadding(right);
|
||||
Function TSDocxCell.WriteRightPadding(value);
|
||||
Begin
|
||||
tcpr_.CellMar.Right := 20 * right;
|
||||
tcpr_.CellMar.Right := 20 * value;
|
||||
tcpr_.CellMar.RightType := "dxa";
|
||||
tcpr_.Update();
|
||||
End;
|
||||
@@ -275,16 +423,19 @@ End;
|
||||
|
||||
Function TSDocxCell.ReadShading();
|
||||
Begin
|
||||
shading_obj := new TSDocxShading(self.Application, self.Creator, self);
|
||||
shading_obj.Init(tcpr_);
|
||||
return shading_obj;
|
||||
if ifnil(shading_) then
|
||||
begin
|
||||
shading_ := new TSDocxShading(self.Application, self.Creator, self);
|
||||
shading_.Init(tcpr_.Shading);
|
||||
end
|
||||
return shading_;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.ReadBorders(index);
|
||||
Begin
|
||||
borders_obj := new TSDocxBorders(self.Application, self.Creator, self);
|
||||
borders_obj.Init(tcpr_.Borders);
|
||||
return ifnil(index) ? obj : obj[index];
|
||||
borders_obj := new TSDocxBordersCell(self.Application, self.Creator, self);
|
||||
borders_obj.Init(GetCell());
|
||||
return ifnil(index) ? borders_obj : borders_obj.Item(index);
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WritePreferredWidthType(value);
|
||||
@@ -317,10 +468,7 @@ Begin
|
||||
width_type := "dxa";
|
||||
end
|
||||
end;
|
||||
if ifnil(width_value) and ifnil(width_type) then return;
|
||||
for r:=1 to table_.Rows() do
|
||||
for c:=1 to table_.Cols() do
|
||||
SetCellTcPrWidth(r, c, width_value, width_type);
|
||||
SetCellTcPrWidth(row_, column_, width_value, width_type);
|
||||
End;
|
||||
Function TSDocxCell.ReadPreferredWidthType();
|
||||
Begin
|
||||
@@ -335,22 +483,18 @@ End;
|
||||
Function TSDocxCell.WritePreferredWidth(value);
|
||||
Begin
|
||||
width_type := self.PreferredWidthType;
|
||||
width_value := 0;
|
||||
width_value := value;
|
||||
case width_type of
|
||||
TSDocxEnumerations.wdPreferredWidthAuto(),
|
||||
TSDocxEnumerations.wdPreferredWidthPoints():
|
||||
begin
|
||||
width_type := "dxa";
|
||||
width_value := 20 * value;
|
||||
if width_type > min_dxa_width_ then width_type := min_dxa_width_;
|
||||
SetCellTcPrWidth(row_, column_, width_value, width_type);
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdPreferredWidthPercent():
|
||||
begin
|
||||
width_type := "pct";
|
||||
if value < 0 or value > 100 then return;
|
||||
width_value := 50 * value;
|
||||
SetCellTcPrWidth(row_, column_, width_value, width_type);
|
||||
end
|
||||
end;
|
||||
@@ -364,3 +508,72 @@ Begin
|
||||
"pct": return width_value / 50;
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteHeight(value);
|
||||
Begin
|
||||
SetHeight(value, self.HeightRule);
|
||||
End;
|
||||
Function TSDocxCell.ReadHeight();
|
||||
Begin
|
||||
trpr_obj := GetTrPrObject();
|
||||
value := trpr_obj.Value("Height");
|
||||
return ifnil(value) ? 0 : value / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxCell.WriteHeightRule(value);
|
||||
Begin
|
||||
trpr_obj := GetTrPrObject();
|
||||
case value of
|
||||
TSDocxEnumerations.wdRowHeightAuto():
|
||||
trpr_obj.Rule := "auto";
|
||||
|
||||
TSDocxEnumerations.wdRowHeightAtLeast():
|
||||
trpr_obj.Rule := "least";
|
||||
|
||||
TSDocxEnumerations.wdRowHeightExactly():
|
||||
trpr_obj.Rule := "exact";
|
||||
end;
|
||||
trpr_obj.Update();
|
||||
End;
|
||||
Function TSDocxCell.ReadHeightRule();
|
||||
Begin
|
||||
trpr_obj := GetTrPrObject();
|
||||
rule := trpr_obj.Value("Rule");
|
||||
case rule of
|
||||
"auto": return TSDocxEnumerations.wdRowHeightAuto();
|
||||
"least": return TSDocxEnumerations.wdRowHeightAtLeast();
|
||||
"exact": return TSDocxEnumerations.wdRowHeightExactly();
|
||||
end;
|
||||
return TSDocxEnumerations.wdRowHeightAtLeast();
|
||||
End;
|
||||
|
||||
Function TSDocxCell.ReadNext();
|
||||
Begin
|
||||
if column_ = table_.Cols() then
|
||||
begin
|
||||
if row_ = table_.Rows() then return nil;
|
||||
return self.Parent.Cell(row_ + 1, 1);
|
||||
end
|
||||
return self.Parent.Cell(row_, column_ + 1);
|
||||
End;
|
||||
|
||||
Function TSDocxCell.ReadPrevious();
|
||||
Begin
|
||||
if column_ = 1 then
|
||||
begin
|
||||
if row_ = 1 then return nil;
|
||||
return self.Parent.Cell(row_ - 1, table_.Cols());
|
||||
end
|
||||
return self.Parent.Cell(row_, column_ - 1);
|
||||
End;
|
||||
|
||||
Function TSDocxCell.ReadRange();
|
||||
Begin
|
||||
if ifnil(range_) then
|
||||
begin
|
||||
obj := new TSWdRange(docx_.Body().Root(), GetCell().Root());
|
||||
range_ := new TSDocxRange(self.Application, self.Creator, self);
|
||||
range_.Init(docx_, obj);
|
||||
end
|
||||
return range_;
|
||||
End;
|
||||
|
||||
+27
-1
@@ -1,12 +1,16 @@
|
||||
Type TSDocxCells = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(table);
|
||||
Function Init(table, row, column);
|
||||
Function Operator[](index);
|
||||
|
||||
private
|
||||
table_; // TOfficeObj("TTable")
|
||||
row_;
|
||||
column_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Add(BeforeCell);
|
||||
Function AutoFit();
|
||||
Function Delete(ShiftCells);
|
||||
@@ -18,6 +22,7 @@ public
|
||||
Function SetWidth(ColumnWidth, RulerStyle);
|
||||
Function Split(NumRows, NumColumns, MergeBeforeSplit);
|
||||
|
||||
// Properties
|
||||
property Borders read ReadBorders;
|
||||
property Count read ReadCount;
|
||||
property Height read ReadHeight write WriteHeight;
|
||||
@@ -48,3 +53,24 @@ public
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxCells.Init(table, row, column);
|
||||
Begin
|
||||
table_ := table;
|
||||
row_ := row;
|
||||
column_ := column;
|
||||
End;
|
||||
|
||||
Function Operator TSDocxCells.[](index);
|
||||
Begin
|
||||
row := ifnil(row_) ? index : row_;
|
||||
column := ifnil(column_) ? index : column_;
|
||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self);
|
||||
cell_obj.Init(nil, table_, row, column);
|
||||
return cell_obj;
|
||||
End;
|
||||
|
||||
// function
|
||||
Function TSDocxCells.Item(Index);
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
|
||||
+30
-136
@@ -5,21 +5,22 @@ public
|
||||
Function Init(table, column);
|
||||
|
||||
private
|
||||
Function SetColumnWidth(column, wvalue, type);
|
||||
Function SerializeTblGrid();
|
||||
|
||||
private
|
||||
table_;
|
||||
column_;
|
||||
min_dxa_width_; // 最小宽度 321
|
||||
cells_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function AutoFit();
|
||||
Function Delete();
|
||||
Function Select();
|
||||
Function SetWidth(ColumnWidth, RulerStyle);
|
||||
Function Sort(ExcludeHeader, SortFieldType, SortOrder, CaseSensitive, BidiSort, IgnoreThe, IgnoreKashida, IgnoreDiacritics, IgnoreHe, LanguageID);
|
||||
|
||||
// Properties
|
||||
property Borders read ReadBorders;
|
||||
property Cells read ReadCells;
|
||||
property Index read ReadIndex;
|
||||
@@ -45,7 +46,7 @@ public
|
||||
Function ReadIsLast();
|
||||
Function ReadIsFirst();
|
||||
Function ReadIndex();
|
||||
Function ReadCells();
|
||||
Function ReadCells(n);
|
||||
Function ReadBorders();
|
||||
|
||||
End;
|
||||
@@ -55,24 +56,8 @@ Function TSDocxColumn.Init(table, column);
|
||||
Begin
|
||||
table_ := table;
|
||||
column_ := column;
|
||||
min_dxa_width_ := 321;
|
||||
End;
|
||||
|
||||
Function TSDocxColumn.SetColumnWidth(column, wvalue, type);
|
||||
Begin
|
||||
if ifnil(wvalue) and ifnil(type) then return;
|
||||
tcells := table_.GetCells();
|
||||
for r:=0 to table_.Rows()-1 do
|
||||
begin
|
||||
cell := tcells[r, column-1];
|
||||
if ifnil(cell) then continue;
|
||||
tcpr := class(TSXml).GetNode(cell[0], "w:tcPr", "first");
|
||||
obj := TOfficeObj("TwTcPr");
|
||||
obj.InitRootNode(tcpr);
|
||||
obj.Width := wvalue;
|
||||
obj.Type := type;
|
||||
obj.Update();
|
||||
end
|
||||
cells_ := new TSDocxCells(self.Application, self.Creator, self);
|
||||
cells_.Init(table_, nil, column_);
|
||||
End;
|
||||
|
||||
Function TSDocxColumn.SerializeTblGrid();
|
||||
@@ -90,149 +75,58 @@ Begin
|
||||
return array(total_width, grid_col_arr);
|
||||
End;
|
||||
|
||||
// function
|
||||
// Methods
|
||||
Function TSDocxColumn.SetWidth(ColumnWidth, RulerStyle);
|
||||
Begin
|
||||
if ifnil(RulerStyle) then RulerStyle := TSDocxEnumerations.wdAdjustNone();
|
||||
width_value := ColumnWidth * 20;
|
||||
[total_width, grid_col_arr] := SerializeTblGrid();
|
||||
// 设置w:tblPr的总宽度
|
||||
table_.TblPr.Width := total_width;
|
||||
table_.TblPr.WidthType := "dxa";
|
||||
table_.TblPr.Update();
|
||||
|
||||
case RulerStyle of
|
||||
TSDocxEnumerations.wdAdjustFirstColumn():
|
||||
begin
|
||||
if column_ < length(grid_col_arr)-1 then
|
||||
begin
|
||||
new_width := grid_col_arr[column_][1] + grid_col_arr[column_-1][1] - width_value;
|
||||
if new_width < min_dxa_width_ then new_width := min_dxa_width_;
|
||||
grid_col_arr[column_][0].SetAttribute("w:w", new_width);
|
||||
SetColumnWidth(column_ + 1, new_w, "dxa");
|
||||
end
|
||||
end
|
||||
// 不再调整列宽 "w:tblGrid/w:gridCol",复杂表格列数不好判定
|
||||
for i:=1 to table_.Rows() do
|
||||
self.Cells(i).SetWidth(ColumnWidth, RulerStyle);
|
||||
|
||||
TSDocxEnumerations.wdAdjustNone():
|
||||
begin
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdAdjustProportional():
|
||||
begin
|
||||
// TODO : 需要搞懂算法
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdAdjustSameWidth():
|
||||
begin
|
||||
after_width := grid_col_arr[column_-1][1] - width_value;
|
||||
for i:=column_ to length(grid_col_arr)-1 do
|
||||
after_width += grid_col_arr[i][1];
|
||||
if length(grid_col_arr) > column_ then // 不是最后一列
|
||||
begin
|
||||
num := length(grid_col_arr) - column_;
|
||||
new_width := integer(after_width / num);
|
||||
for c:=column_+1 to length(grid_col_arr) do
|
||||
begin
|
||||
grid_col_arr[c-1][0].SetAttribute("w:w", new_width);
|
||||
SetColumnWidth(c, new_width, "dxa");
|
||||
end
|
||||
end
|
||||
end
|
||||
end;
|
||||
grid_col_arr[column_-1][0].SetAttribute("w:w", width_value);
|
||||
SetColumnWidth(column_, width_value, "dxa");
|
||||
End;
|
||||
|
||||
//property
|
||||
// Properties
|
||||
Function TSDocxColumn.WriteWidth(value);
|
||||
Begin
|
||||
for i:=1 to table_.Rows() do
|
||||
self.Cells(i).Width := value;
|
||||
End;
|
||||
Function TSDocxColumn.ReadWidth();
|
||||
Begin
|
||||
return self.Cells(1).Width;
|
||||
End;
|
||||
|
||||
Function TSDocxColumn.WritePreferredWidthType(value);
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdPreferredWidthAuto():
|
||||
begin
|
||||
table_.TblPr.Width := 0;
|
||||
table_.TblPr.WidthType := "auto";
|
||||
table_.TblPr.Update();
|
||||
for c:=1 to table_.Cols() do
|
||||
SetColumnWidth(c, 0, "auto");
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdPreferredWidthPercent():
|
||||
begin
|
||||
table_.TblPr.Width := 5000;
|
||||
table_.TblPr.WidthType := "pct";
|
||||
table_.TblPr.Update();
|
||||
|
||||
width_value := integer(5000 / table_.Cols());
|
||||
for c:=1 to table_.Cols() do
|
||||
SetColumnWidth(c, width_value, "pct");
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdPreferredWidthPoints():
|
||||
begin
|
||||
for c:=1 to table_.Cols() do
|
||||
SetColumnWidth(c, nil, "dxa");
|
||||
end
|
||||
end;
|
||||
for i:=1 to table_.Rows() do
|
||||
self.Cells(i).PreferredWidthType := value;
|
||||
End;
|
||||
Function TSDocxColumn.ReadPreferredWidthType();
|
||||
Begin
|
||||
tcells := table_.GetCells();
|
||||
cell := tcells[1, column_ - 1];
|
||||
if ifnil(cell) then return nil;
|
||||
tcpr := class(TSXml).GetNode(cell[0], "w:tcPr", "first");
|
||||
obj := TOfficeObj("TwTcPr");
|
||||
obj.InitRootNode(tcpr);
|
||||
width_type := obj.Value("Type");
|
||||
tcpr.print;
|
||||
case width_type of
|
||||
"auto": return TSDocxEnumerations.wdPreferredWidthAuto();
|
||||
"dxa": return TSDocxEnumerations.wdPreferredWidthPoints();
|
||||
"pct": return TSDocxEnumerations.wdPreferredWidthPercent();
|
||||
end;
|
||||
return self.Cells(1).PreferredWidthType;
|
||||
End;
|
||||
|
||||
Function TSDocxColumn.WritePreferredWidth(value);
|
||||
Begin
|
||||
width_type := self.PreferredWidthType;
|
||||
width_value := 0;
|
||||
case width_type of
|
||||
TSDocxEnumerations.wdPreferredWidthAuto(),
|
||||
TSDocxEnumerations.wdPreferredWidthPoints():
|
||||
begin
|
||||
width_type := "dxa";
|
||||
width_value := 20 * value;
|
||||
if width_type > min_dxa_width_ then width_type := min_dxa_width_;
|
||||
SetColumnWidth(column_, width_value, width_type);
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdPreferredWidthPercent():
|
||||
begin
|
||||
width_type := "pct";
|
||||
if value < 0 or value > 100 then return;
|
||||
width_value := 50 * value;
|
||||
SetColumnWidth(column_, width_value, width_type);
|
||||
end
|
||||
end;
|
||||
for i:=1 to table_.Rows() do
|
||||
self.Cells(i).PreferredWidth := value;
|
||||
End;
|
||||
Function TSDocxColumn.ReadPreferredWidth();
|
||||
Begin
|
||||
tcells := table_.GetCells();
|
||||
cell := tcells[1, column_ - 1];
|
||||
if ifnil(cell) then return nil;
|
||||
tcpr := class(TSXml).GetNode(cell[0], "w:tcPr", "first");
|
||||
obj := TOfficeObj("TwTcPr");
|
||||
obj.InitRootNode(tcpr);
|
||||
width_type := obj.Value("Type");
|
||||
width_value := obj.Value("Width");
|
||||
case width_type of
|
||||
"auto", "dxa": return width_value / 20;
|
||||
"pct": return width_value / 50;
|
||||
end;
|
||||
return self.Cells(1).PreferredWidth;
|
||||
End;
|
||||
|
||||
Function TSDocxColumn.ReadIndex();
|
||||
Begin
|
||||
return column_;
|
||||
End;
|
||||
|
||||
Function TSDocxColumn.ReadCells(n);
|
||||
Begin
|
||||
return ifnil(n) ? cells_: cells_.Item(n);
|
||||
End;
|
||||
|
||||
+3
-14
@@ -9,6 +9,7 @@ private
|
||||
table_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Add(BeforeColumn);
|
||||
Function AutoFit();
|
||||
Function Delete();
|
||||
@@ -17,6 +18,7 @@ public
|
||||
Function Select();
|
||||
Function SetWidth(ColumnWidth, RulerStyle);
|
||||
|
||||
// Properties
|
||||
property Borders read ReadBorders;
|
||||
property Count read ReadCount;
|
||||
property First read ReadFirst;
|
||||
@@ -49,7 +51,7 @@ End;
|
||||
|
||||
Function Operator TSDocxColumns.[](index);
|
||||
Begin
|
||||
column_obj := TSDocxColumn(self.Application, self.Creator, self);
|
||||
column_obj := new TSDocxColumn(self.Application, self.Creator, self);
|
||||
column_obj.Init(table_, index);
|
||||
return column_obj;
|
||||
End;
|
||||
@@ -66,16 +68,3 @@ Begin
|
||||
return table_.Cols();
|
||||
End;
|
||||
|
||||
Function TSDocxColumns.WritePreferredWidthType(value);
|
||||
Begin
|
||||
End;
|
||||
Function TSDocxColumns.ReadPreferredWidthType();
|
||||
Begin
|
||||
End;
|
||||
|
||||
Function TSDocxColumns.WritePreferredWidth(value);
|
||||
Begin
|
||||
End;
|
||||
Function TSDocxColumns.ReadPreferredWidth();
|
||||
Begin
|
||||
End;
|
||||
|
||||
+100
-23
@@ -1,7 +1,10 @@
|
||||
Type TSDocxDocument = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(docx, name, fullname);
|
||||
Function Init(docx, collection, name, fullname);
|
||||
Function GetParam(k);
|
||||
Function SetParam(k, v);
|
||||
|
||||
private
|
||||
collection_;
|
||||
@@ -9,8 +12,14 @@ private
|
||||
file_name_;
|
||||
full_name_;
|
||||
tables_;
|
||||
paragraphs_;
|
||||
tables_of_contents_;
|
||||
inline_shapes_;
|
||||
|
||||
params_; // 存一些全局参数
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function AcceptAllRevisions();
|
||||
Function AcceptAllRevisionsShown();
|
||||
Function Activate(); // Completed
|
||||
@@ -37,15 +46,15 @@ public
|
||||
Function CountNumberedItems(NumberType, Level);
|
||||
Function CreateLetterContent(DateFormat, IncludeHeaderFooter, PageDesign, LetterStyle, Letterhead, LetterheadLocation, LetterheadSize, RecipientName, RecipientAddress, Salutation, SalutationType, RecipientReference, MailingInstructions, AttentionLine, Subject, CCList, ReturnAddress, SenderName, Closing, SenderCompany, SenderJobTitle, SenderInitials, EnclosureNumber, InfoBlock, RecipientCode, RecipientGender, ReturnAddressShortForm, SenderCity, SenderCode, SenderGender, SenderReference);
|
||||
Function DataForm();
|
||||
Function DeleteAllComments(); // TODO
|
||||
Function DeleteAllCommentsShown(); // TODO
|
||||
Function DeleteAllComments();
|
||||
Function DeleteAllCommentsShown();
|
||||
Function DeleteAllEditableRanges(EditorID);
|
||||
Function DeleteAllInkAnnotations();
|
||||
Function DetectLanguage();
|
||||
Function DowngradeTSDocxDocument();
|
||||
Function EndReview();
|
||||
Function ExportAsFixedFormat(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, Range, From_, To_, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, FixedFormatExtClassPtr);
|
||||
Function ExportAsFixedFormat2(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, Range, From_, To_, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, OptimizeForImageQuality, FixedFormatExtClassPtr);
|
||||
Function ExportAsFixedFormat(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, Range, _From, _To, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, FixedFormatExtClassPtr);
|
||||
Function ExportAsFixedFormat2(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, Range, _From, _To, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, OptimizeForImageQuality, FixedFormatExtClassPtr);
|
||||
Function FitToPages();
|
||||
Function FollowHyperlink (Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo);
|
||||
Function FreezeLayout();
|
||||
@@ -60,10 +69,10 @@ public
|
||||
Function Merge(Name, MergeTarget, DetectFormatChanges, UseFormattingFrom, AddToRecentFiles);
|
||||
Function Post();
|
||||
Function PresentIt();
|
||||
Function PrintOut(Background, Append, Range, OutputFileName, From_, To_, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight);
|
||||
Function PrintOut(Background, Append, Range, OutputFileName, _From, _To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight);
|
||||
Function PrintPreview();
|
||||
Function Protect(Type, NoReset, Password, UseIRM, EnforceStyleLock);
|
||||
Function Range(Start, End_); // TODO
|
||||
Function Protect(_Type, NoReset, Password, UseIRM, EnforceStyleLock);
|
||||
Function Range(Start, _End);
|
||||
Function Redo(Times);
|
||||
Function RejectAllRevisions();
|
||||
Function RejectAllRevisionsShown();
|
||||
@@ -111,9 +120,10 @@ public
|
||||
Function ViewPropertyBrowser();
|
||||
Function WebPagePreview();
|
||||
|
||||
// Properties
|
||||
property ActiveTheme read ReadActiveTheme;
|
||||
property ActiveThemeDisplayName read ReadActiveThemeDisplayName;
|
||||
property ActiveWindow read ReadActiveWindow; // TODO
|
||||
property ActiveWindow read ReadActiveWindow;
|
||||
property ActiveWritingStyle read ReadActiveWritingStyle write WriteActiveWritingStyle;
|
||||
property AttachedTemplate read ReadAttachedTemplate write WriteAttachedTemplate;
|
||||
property AutoFormatOverride read ReadAutoFormatOverride write WriteAutoFormatOverride;
|
||||
@@ -273,7 +283,7 @@ public
|
||||
property Tables read ReadTables;
|
||||
property TablesOfAuthorities read ReadTablesOfAuthorities write WriteTablesOfAuthorities;
|
||||
property TablesOfAuthoritiesCategories read ReadTablesOfAuthoritiesCategories write WriteTablesOfAuthoritiesCategories;
|
||||
property TablesOfContents read ReadTablesOfContents write WriteTablesOfContents;
|
||||
property TablesOfContents read ReadTablesOfContents;
|
||||
property TablesOfFigures read ReadTablesOfFigures write WriteTablesOfFigures;
|
||||
property TextEncoding read ReadTextEncoding write WriteTextEncoding;
|
||||
property TextLineEnding read ReadTextLineEnding write WriteTextLineEnding;
|
||||
@@ -332,7 +342,6 @@ public
|
||||
Function ReadTextEncoding();
|
||||
Function WriteTablesOfFigures();
|
||||
Function ReadTablesOfFigures();
|
||||
Function WriteTablesOfContents();
|
||||
Function ReadTablesOfContents();
|
||||
Function WriteTablesOfAuthoritiesCategories();
|
||||
Function ReadTablesOfAuthoritiesCategories();
|
||||
@@ -403,8 +412,8 @@ public
|
||||
Function ReadPasswordEncryptionKeyLength();
|
||||
Function ReadPasswordEncryptionFileProperties();
|
||||
Function ReadPasswordEncryptionAlgorithm();
|
||||
Function WritePassword(password);
|
||||
Function ReadParagraphs();
|
||||
Function WritePassword(value);
|
||||
Function ReadParagraphs(index);
|
||||
Function ReadPageSetup();
|
||||
Function ReadOriginalTSDocxDocumentTitle();
|
||||
Function WriteOptimizeForWord97();
|
||||
@@ -578,14 +587,28 @@ public
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxDocument.Init(docx, name, fullname);
|
||||
Function TSDocxDocument.Init(docx, collection, name, fullname);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
file_name_ := name;
|
||||
full_name_ := fullname;
|
||||
collection_ := class(Collection).GetInstance('document');
|
||||
tables_ := new TSDocxTables(self.Application, self.Parent, self);
|
||||
tables.Init(docx);
|
||||
collection_ := collection;
|
||||
tables_ := nil;
|
||||
paragraphs_ := nil;
|
||||
tables_of_contents_ := nil;
|
||||
inline_shapes_ := nil;
|
||||
|
||||
params_ := array();
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.GetParam(k);
|
||||
Begin
|
||||
return params_[k];
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.SetParam(k, v);
|
||||
Begin
|
||||
params_[k] := v;
|
||||
End;
|
||||
|
||||
// function
|
||||
@@ -596,8 +619,18 @@ End;
|
||||
|
||||
Function TSDocxDocument.Close(SaveChanges, OriginalFormat, RouteTSDocxDocument)
|
||||
Begin
|
||||
[err, msg] := docx_.Save();
|
||||
if not err then collection_.RemoveCollection(file_name_);
|
||||
if ifnil(SaveChanges) then SaveChanges := TSDocxEnumerations.wdDoNotSaveChanges();
|
||||
case SaveChanges of
|
||||
TSDocxEnumerations.wdDoNotSaveChanges():
|
||||
collection_.RemoveCollection(file_name_);
|
||||
TSDocxEnumerations.wdPromptToSaveChanges():
|
||||
return;
|
||||
TSDocxEnumerations.wdSaveChanges():
|
||||
begin
|
||||
[err, msg] := docx_.Save();
|
||||
if not err then collection_.RemoveCollection(file_name_);
|
||||
end
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.Save();
|
||||
@@ -614,6 +647,16 @@ Begin
|
||||
docx_.SaveAs("", FileName);
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.Range(Start, _End);
|
||||
Begin
|
||||
// Range[0, 1) 左开右闭
|
||||
obj := new TSWdRange(docx_.Body().Root(), Start, _End);
|
||||
range_obj := new TSDocxRange(self.Application, self.Creator, self);
|
||||
range_obj.Init(docx_, obj);
|
||||
return range_obj;
|
||||
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxDocument.ReadFullName();
|
||||
Begin
|
||||
@@ -625,9 +668,9 @@ Begin
|
||||
return file_name_;
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.WritePassword(passwd);
|
||||
Function TSDocxDocument.WritePassword(value);
|
||||
Begin
|
||||
docx_.SetPassword(passwd);
|
||||
docx_.SetPassword(value);
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.ReadPath();
|
||||
@@ -637,6 +680,40 @@ End;
|
||||
|
||||
Function TSDocxDocument.ReadTables(index);
|
||||
Begin
|
||||
if ifnil(index) then return tables_;
|
||||
return tables_[index];
|
||||
if ifnil(tables_) then
|
||||
begin
|
||||
tables_ := new TSDocxTables(self.Application, self.Creator, self);
|
||||
tables_.Init(docx_);
|
||||
end
|
||||
return ifnil(index) ? tables_ : tables.Item(index);
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.ReadParagraphs(index);
|
||||
Begin
|
||||
if ifnil(paragraphs_) then
|
||||
begin
|
||||
paragraphs_ := new TSDocxParagraphs(self.Application, self.Creator, self);
|
||||
paragraphs_.Init(docx_);
|
||||
end
|
||||
return ifnil(index) ? paragraphs_ : paragraphs_.Item(index);
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.ReadTablesOfContents();
|
||||
Begin
|
||||
if ifnil(tables_of_contents_) then
|
||||
begin
|
||||
tables_of_contents_ := new TSDocxTablesOfContents(self.Application, self.Create, self);
|
||||
tables_of_contents_.Init(docx_);
|
||||
end
|
||||
return tables_of_contents_;
|
||||
End;
|
||||
|
||||
Function TSDocxDocument.ReadInlineShapes();
|
||||
Begin
|
||||
if ifnil(inline_shapes_) then
|
||||
begin
|
||||
inline_shapes_ := new TSDocxInlineShapes(self.Application, self.Create, self);
|
||||
inline_shapes_.Init(docx_);
|
||||
end
|
||||
return inline_shapes_;
|
||||
End;
|
||||
|
||||
+22
-12
@@ -12,38 +12,41 @@ private
|
||||
collection_;
|
||||
|
||||
public
|
||||
Function Add(Template, NewTemplate, DocumentType, Visible); // Completed
|
||||
// Methods
|
||||
Function Add(Template, NewTemplate, DocumentType, Visible);
|
||||
Function AddBlogDocument(ProviderID, PostURL, BlogName, PostID);
|
||||
Function CanCheckOut(FileName);
|
||||
Function CheckOut(FileName);
|
||||
Function Close(SaveChanges, OriginalFormat, RouteDocument);
|
||||
Function Item(Index); // Completed
|
||||
Function Item(Index);
|
||||
Function Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
|
||||
PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format,
|
||||
Encoding, Visible, OpenConflictDocument, OpenAndRepair, DocumentDirection, NoEncodingDialog); // Completed
|
||||
Encoding, Visible, OpenConflictDocument, OpenAndRepair, DocumentDirection, NoEncodingDialog); overload;
|
||||
Function OpenNoRepairDialog(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
|
||||
PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,
|
||||
WritePasswordTemplate, Format, Encoding, Visible, OpenAndRepair,
|
||||
DocumentDirection, NoEncodingDialog, XMLTransform);
|
||||
Function Save(NoPrompt, OriginalFormat); // Completed
|
||||
|
||||
// Properties
|
||||
property Count read ReadCount;
|
||||
Function ReadCount(); // Completed
|
||||
Function ReadCount();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxDocuments.Init();
|
||||
Begin
|
||||
collection_ := class(Collection).GetInstance('document');
|
||||
collection_ := new Collection();
|
||||
End;
|
||||
|
||||
Function TSDocxDocuments.AddDocument(docx, fullname);
|
||||
Begin
|
||||
name := ExtractFileName(fullname);
|
||||
document := new TSDocxDocument(self.Application, self.Creator, self);
|
||||
document.Init(docx, name, fullname);
|
||||
document.Init(docx, collection_, name, fullname);
|
||||
collection_.AddCollection(document, name);
|
||||
return document;
|
||||
End;
|
||||
|
||||
Function Operator TSDocxDocuments.[](index);
|
||||
@@ -56,17 +59,24 @@ Begin
|
||||
return collection_.GetActivation();
|
||||
End;
|
||||
|
||||
// function
|
||||
// Methods
|
||||
Function TSDocxDocuments.Add(Template, NewTemplate, DocumentType, Visible);
|
||||
Begin
|
||||
docx := new TSDocxFile();
|
||||
docx.NewFile();
|
||||
AddDocument(docx, collection_.CalNewName("文档"));
|
||||
return AddDocument(docx, collection_.CalNewName("文档"));
|
||||
End;
|
||||
|
||||
Function TSDocxDocuments.Item(index);
|
||||
Function TSDocxDocuments.Close(SaveChanges, OriginalFormat, RouteDocument);
|
||||
Begin
|
||||
return self[index];
|
||||
num := self.Count;
|
||||
for i:=1 to num do
|
||||
self[i].Close(SaveChanges, OriginalFormat, RouteDocument);
|
||||
End;
|
||||
|
||||
Function TSDocxDocuments.Item(Index);
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
|
||||
Function TSDocxDocuments.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
|
||||
@@ -76,7 +86,7 @@ Begin
|
||||
docx := new TSDocxFile();
|
||||
[err, msg] := docx.OpenFile("", FileName, PasswordDocument);
|
||||
if err then return;
|
||||
AddDocument(docx, docx.FileName());
|
||||
return AddDocument(docx, docx.FileName());
|
||||
End;
|
||||
|
||||
Function TSDocxDocuments.Save(NoPrompt, OriginalFormat);
|
||||
@@ -86,7 +96,7 @@ Begin
|
||||
self[i].Save();
|
||||
End;
|
||||
|
||||
// property
|
||||
// Properties
|
||||
Function TSDocxDocuments.ReadCount();
|
||||
Begin
|
||||
return collection_.GetCount();
|
||||
|
||||
+2171
-3
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,125 @@
|
||||
Type TSDocxInlineShape = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(docx, trun);
|
||||
Function Apply();
|
||||
|
||||
private
|
||||
docx_;
|
||||
trun_;
|
||||
base_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function ConvertToShape();
|
||||
Function Delete();
|
||||
Function Reset();
|
||||
Function Select();
|
||||
|
||||
// Properties
|
||||
property AlternativeText read ReadAlternativeText write WriteAlternativeText;
|
||||
property Borders read ReadBorders;
|
||||
property Chart read ReadChart;
|
||||
property Field read ReadField;
|
||||
property Fill read ReadFill;
|
||||
property Glow read ReadGlow;
|
||||
property GroupItems read ReadGroupItems;
|
||||
property HasChart read ReadHasChart;
|
||||
property HasSmartArt read ReadHasSmartArt;
|
||||
property Height read ReadHeight write WriteHeight;
|
||||
property HorizontalLineFormat read ReadHorizontalLineFormat;
|
||||
property Hyperlink read ReadHyperlink;
|
||||
property IsPictureBullet read ReadIsPictureBullet;
|
||||
property Line read ReadLine;
|
||||
property LinkFormat read ReadLinkFormat;
|
||||
property LinkFormat read ReadLinkFormat;
|
||||
property LockAspectRatio read ReadLockAspectRatio write WriteLockAspectRatio;
|
||||
property OLEFormat read ReadOLEFormat;
|
||||
property PictureFormat read ReadPictureFormat;
|
||||
property Range read ReadRange;
|
||||
property Reflection read ReadReflection;
|
||||
property ScaleHeight read ReadScaleHeight write WriteScaleHeight;
|
||||
property ScaleWidth read ReadScaleWidth write WriteScaleWidth;
|
||||
property Script read ReadScript;
|
||||
property Shadow read ReadShadow;
|
||||
property SmartArt read ReadSmartArt;
|
||||
property SoftEdge read ReadSoftEdge;
|
||||
property TextEffect read ReadTextEffect;
|
||||
property Title read ReadTitle write WriteTitle;
|
||||
property Type read ReadType;
|
||||
property Width read ReadWidth write WriteWidth;
|
||||
Function WriteWidth(value);
|
||||
Function ReadWidth();
|
||||
Function ReadType();
|
||||
Function WriteTitle(value);
|
||||
Function ReadTitle();
|
||||
Function ReadTextEffect();
|
||||
Function ReadSoftEdge();
|
||||
Function ReadSmartArt();
|
||||
Function ReadShadow();
|
||||
Function ReadScript();
|
||||
Function WriteScaleWidth(value);
|
||||
Function ReadScaleWidth();
|
||||
Function WriteScaleHeight(value);
|
||||
Function ReadScaleHeight();
|
||||
Function ReadReflection();
|
||||
Function ReadRange();
|
||||
Function ReadPictureFormat();
|
||||
Function ReadOLEFormat();
|
||||
Function WriteLockAspectRatio(value);
|
||||
Function ReadLockAspectRatio();
|
||||
Function ReadLinkFormat();
|
||||
Function ReadLine();
|
||||
Function ReadIsPictureBullet();
|
||||
Function ReadHyperlink();
|
||||
Function ReadHorizontalLineFormat();
|
||||
Function WriteHeight(value);
|
||||
Function ReadHeight();
|
||||
Function ReadHasSmartArt();
|
||||
Function ReadHasChart();
|
||||
Function ReadGroupItems();
|
||||
Function ReadGlow();
|
||||
Function ReadFill();
|
||||
Function ReadField();
|
||||
Function ReadChart();
|
||||
Function ReadBorders();
|
||||
Function WriteAlternativeText(value);
|
||||
Function ReadAlternativeText();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxInlineShape.Init(docx, trun);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
trun_ := trun;
|
||||
base_ := 12700;
|
||||
End;
|
||||
|
||||
Function TSDocxInlineShape.Apply();
|
||||
Begin
|
||||
trun_.Update();
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxInlineShape.WriteHeight(value);
|
||||
Begin
|
||||
cy := value * base_;
|
||||
trun_.Drawing.WInline.cy := cy;
|
||||
trun_.Drawing.WInline.Graphic.GraphicData.Pic.spPr.XFrm.Ext.CY := cy;
|
||||
End;
|
||||
Function TSDocxInlineShape.ReadHeight();
|
||||
Begin
|
||||
return trun_.Drawing.WInline.Value("cy") / base_;
|
||||
End;
|
||||
|
||||
Function TSDocxInlineShape.WriteWidth(value);
|
||||
Begin
|
||||
cx := value * base_;
|
||||
trun_.Drawing.WInline.cx := cx;
|
||||
trun_.Drawing.WInline.Graphic.GraphicData.Pic.spPr.XFrm.Ext.CX := cx;
|
||||
End;
|
||||
Function TSDocxInlineShape.ReadWidth();
|
||||
Begin
|
||||
return trun_.Drawing.WInline.Value("cx") / base_;
|
||||
End;
|
||||
@@ -0,0 +1,118 @@
|
||||
Type TSDocxInlineShapes = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(docx);
|
||||
Function Operator[](index);
|
||||
|
||||
Function SerializeInlineShapes();
|
||||
Function FindInlineShapePosition(node);
|
||||
|
||||
private
|
||||
docx_;
|
||||
inline_shapes_;
|
||||
document_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function AddChart2(Style, Type, Range, NewLayout);
|
||||
Function AddHorizontalLine(FileName, Range);
|
||||
Function AddHorizontalLineStandard(Range);
|
||||
Function AddOLEControl(ClassType, Range);
|
||||
Function AddOLEObject(ClassType, FileName, LinkToFile, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Range);
|
||||
Function AddPicture(FileName, LinkToFile, SaveWithDocument, Range);
|
||||
Function AddPictureBullet(FileName, Range);
|
||||
Function AddSmartArt(Layout, Range);
|
||||
Function AddWebVideo(EmbedCode, VideoWidth, VideoHeight, PosterFrameImage, Url, Range);
|
||||
Function Item(Index);
|
||||
Function New(Range);
|
||||
|
||||
// Properties
|
||||
property Count read ReadCount;
|
||||
Function ReadCount();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxInlineShapes.Init(docx);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
inline_shapes_ := array();
|
||||
document_ := self.Parent;
|
||||
self.SerializeInlineShapes();
|
||||
End;
|
||||
|
||||
Function Operator TSDocxInlineShapes.[](index);
|
||||
Begin
|
||||
inline_shape_obj := new TSDocxInlineShape(self.Application, self.Creator, self.Parent);
|
||||
inline_shape_obj.Init(docx_, inline_shapes_[index - 1]);
|
||||
return inline_shape_obj;
|
||||
End;
|
||||
|
||||
Function TSDocxInlineShapes.SerializeInlineShapes();
|
||||
Begin
|
||||
paragraphs := document_.Paragraphs;
|
||||
num := paragraphs.Count;
|
||||
for i:=1 to num do
|
||||
begin
|
||||
paragraph := paragraphs.Item(i);
|
||||
node := paragraph.Object().Root();
|
||||
if ifObj(node) then
|
||||
begin
|
||||
run := node.FirstChildElement("w:r");
|
||||
while ifObj(run) do
|
||||
begin
|
||||
drawing := run.FirstChildElement("w:drawing");
|
||||
if ifObj(drawing) then
|
||||
begin
|
||||
trun := TOfficeObj("TRun");
|
||||
trun.Init(run);
|
||||
inline_shapes_[length(inline_shapes_)] := trun;
|
||||
end
|
||||
run := run.NextElement("w:r");
|
||||
end
|
||||
end
|
||||
end
|
||||
End;
|
||||
|
||||
// Methods
|
||||
Function TSDocxInlineShapes.AddPicture(FileName, LinkToFile, SaveWithDocument, Range);
|
||||
Begin
|
||||
if not ifBinary(FileName) then raise "TSVBA::Parameter LinkToFile must be in binary.";
|
||||
picture := TOfficeObj("TPicture");
|
||||
picture.Image := FileName;
|
||||
if ifObj(Range) then
|
||||
begin
|
||||
paragraph := Range.InsertNewParagraph();
|
||||
pic := docx_.AddPicture(picture, paragraph.Object());
|
||||
document_.Paragraphs.AddParagraph(paragraph.Index(), pic.Root());
|
||||
paragraph.Range.Delete();
|
||||
self.SerializeInlineShapes();
|
||||
run := pic.Root().FirstChildElement("w:r");
|
||||
trun := TOfficeObj("TRun");
|
||||
trun.Init(run);
|
||||
end
|
||||
else begin
|
||||
last := document_.Paragraphs.Item(document_.Paragraphs.Count);
|
||||
pic := docx_.AddPicture(picture, last.Object());
|
||||
document_.Paragraphs.AddParagraph(nil, pic.Root());
|
||||
run := pic.Root().FirstChildElement("w:r");
|
||||
trun := TOfficeObj("TRun");
|
||||
trun.Init(run);
|
||||
inline_shapes_[length(inline_shapes_)] := trun;
|
||||
end
|
||||
inline_shape_obj := new TSDocxInlineShape(self.Application, self.Creator, self.Parent);
|
||||
inline_shape_obj.Init(docx_, trun);
|
||||
return inline_shape_obj;
|
||||
End;
|
||||
|
||||
Function TSDocxInlineShapes.Item(Index);
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxInlineShapes.ReadCount();
|
||||
Begin
|
||||
return length(inline_shapes_);
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
Type TSDocxParagraph = Class(TSDocxParagraphFormat)
|
||||
|
||||
public
|
||||
Function Init(docx, paragraph, index);
|
||||
Function Object();
|
||||
Function Index();
|
||||
|
||||
private
|
||||
paragraph_; // TOfficeObj("TParagraph")
|
||||
index_; // 第N个段落,1开始计数
|
||||
range_;
|
||||
document_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Indent();
|
||||
Function JoinList();
|
||||
Function ListAdvanceTo();
|
||||
Function Next(Count);
|
||||
Function Outdent();
|
||||
Function OutlineDemote();
|
||||
Function OutlineDemoteToBody();
|
||||
Function OutlinePromote();
|
||||
Function Previous(Count);
|
||||
Function ResetAdvanceTo();
|
||||
Function SelectNumber();
|
||||
Function SeparateList();
|
||||
|
||||
// Properties
|
||||
property CollapsedState read ReadCollapsedState write WriteCollapsedState;
|
||||
property DropCap read ReadDropCap;
|
||||
property Format read ReadFormat write WriteFormat;
|
||||
property ID read ReadID write WriteID;
|
||||
property IsStyleSeparator read ReadIsStyleSeparator;
|
||||
property ListNumberOriginal read ReadListNumberOriginal;
|
||||
property Range read ReadRange;
|
||||
Function WriteCollapsedState(value);
|
||||
Function ReadCollapsedState();
|
||||
Function ReadDropCap();
|
||||
Function WriteFormat(value);
|
||||
Function ReadFormat();
|
||||
Function WriteID(value);
|
||||
Function ReadID();
|
||||
Function ReadIsStyleSeparator();
|
||||
Function ReadListNumberOriginal();
|
||||
Function ReadRange();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxParagraph.Init(docx, paragraph, index);
|
||||
Begin
|
||||
paragraph_ := paragraph;
|
||||
index_ := index;
|
||||
range_ := nil;
|
||||
class(TSDocxParagraphFormat).Init(docx, paragraph_.pPr);
|
||||
document_ := self.Parent;
|
||||
while not (document_ is class(TSDocxDocument)) do
|
||||
document_ := document_.Parent;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraph.Object();
|
||||
Begin
|
||||
return paragraph_;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraph.Index();
|
||||
Begin
|
||||
return index_;
|
||||
End;
|
||||
|
||||
// Methods
|
||||
Function TSDocxParagraph.Next(Count);
|
||||
Begin
|
||||
return document_.Paragraphs.Item(index_ + Count);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraph.Previous(Count);
|
||||
Begin
|
||||
return document_.Paragraphs.Item(index_ - Count);
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxParagraph.ReadRange();
|
||||
Begin
|
||||
if ifnil(range_) then
|
||||
begin
|
||||
obj := new TSWdRange(docx_.Body().Root(), paragraph_.Root());
|
||||
range_ := new TSDocxRange(self.Application, self.Creator, self);
|
||||
range_.Init(docx_, obj);
|
||||
end
|
||||
return range_;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraph.ReadFormat();
|
||||
Begin
|
||||
return self;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraph.WriteFormat(value);
|
||||
Begin
|
||||
self.ReWrite(value);
|
||||
End;
|
||||
@@ -0,0 +1,312 @@
|
||||
Type TSDocxParagraphs = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(docx);
|
||||
Function Operator[](index);
|
||||
Function SerializeParagraphs(root, arr, lastNode);
|
||||
Function ParseTable(root, arr, lastNode);
|
||||
|
||||
Function FindNewParagraphPosition(findNode, direction);
|
||||
Function AddParagraph(pos, newNode);overload;
|
||||
Function AddParagraph(findNode, newNode, direction);overload;
|
||||
Function AddTableToParagraphs(findNode, tTable);
|
||||
Function DeleteParagraph(findNode);
|
||||
|
||||
private
|
||||
docx_;
|
||||
lastnode_;
|
||||
paragraphs_; // TOfficeObj("TParagraph")数组
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Add(Range);
|
||||
Function CloseUp();
|
||||
Function DecreaseSpacing();
|
||||
Function IncreaseSpacing();
|
||||
Function Indent();
|
||||
Function IndentCharWidth(_Count);
|
||||
Function IndentFirstLineCharWidth(_Count);
|
||||
Function Item(Index);
|
||||
Function OpenOrCloseUp();
|
||||
Function OpenUp();
|
||||
Function Outdent();
|
||||
Function OutlineDemote();
|
||||
Function OutlineDemoteToBody();
|
||||
Function OutlinePromote();
|
||||
Function Reset();
|
||||
Function Space1();
|
||||
Function Space15();
|
||||
Function Space2();
|
||||
Function TabHangingIndent(_Count);
|
||||
Function TabIndent(_Count);
|
||||
|
||||
// Properties
|
||||
property AddSpaceBetweenFarEastAndAlpha read ReadAddSpaceBetweenFarEastAndAlpha write WriteAddSpaceBetweenFarEastAndAlpha;
|
||||
property AddSpaceBetweenFarEastAndDigit read ReadAddSpaceBetweenFarEastAndDigit write WriteAddSpaceBetweenFarEastAndDigit;
|
||||
property Alignment read ReadAlignment write WriteAlignment;
|
||||
property AutoAdjustRightIndent read ReadAutoAdjustRightIndent write WriteAutoAdjustRightIndent;
|
||||
property BaseLineAlignment read ReadBaseLineAlignment write WriteBaseLineAlignment;
|
||||
property Borders read ReadBorders;
|
||||
property CharacterUnitFirstLineIndent read ReadCharacterUnitFirstLineIndent write WriteCharacterUnitFirstLineIndent;
|
||||
property CharacterUnitLeftIndent read ReadCharacterUnitLeftIndent write WriteCharacterUnitLeftIndent;
|
||||
property CharacterUnitRightIndent read ReadCharacterUnitRightIndent write WriteCharacterUnitRightIndent;
|
||||
property Count read ReadCount;
|
||||
property DisableLineHeightGrid read ReadDisableLineHeightGrid write WriteDisableLineHeightGrid;
|
||||
property FarEastLineBreakControl read ReadFarEastLineBreakControl write WriteFarEastLineBreakControl;
|
||||
property First read ReadFirst;
|
||||
property FirstLineIndent read ReadFirstLineIndent write WriteFirstLineIndent;
|
||||
property Format read ReadFormat write WriteFormat;
|
||||
property HalfWidthPunctuationOnTopOfLine read ReadHalfWidthPunctuationOnTopOfLine write WriteHalfWidthPunctuationOnTopOfLine;
|
||||
property HangingPunctuation read ReadHangingPunctuation write WriteHangingPunctuation;
|
||||
property Hyphenation read ReadHyphenation write WriteHyphenation;
|
||||
property KeepTogether read ReadKeepTogether write WriteKeepTogether;
|
||||
property KeepWithNext read ReadKeepWithNext write WriteKeepWithNext;
|
||||
property Last read ReadLast;
|
||||
property LeftIndent read ReadLeftIndent write WriteLeftIndent;
|
||||
property LineSpacing read ReadLineSpacing write WriteLineSpacing;
|
||||
property LineSpacingRule read ReadLineSpacingRule write WriteLineSpacingRule;
|
||||
property LineUnitAfter read ReadLineUnitAfter write WriteLineUnitAfter;
|
||||
property LineUnitBefore read ReadLineUnitBefore write WriteLineUnitBefore;
|
||||
property NoLineNumber read ReadNoLineNumber write WriteNoLineNumber;
|
||||
property OutlineLevel read ReadOutlineLevel write WriteOutlineLevel;
|
||||
property PageBreakBefore read ReadPageBreakBefore write WritePageBreakBefore;
|
||||
property ReadingOrder read ReadReadingOrder write WriteReadingOrder;
|
||||
property RightIndent read ReadRightIndent write WriteRightIndent;
|
||||
property Shading read ReadShading;
|
||||
property SpaceAfter read ReadSpaceAfter write WriteSpaceAfter;
|
||||
property SpaceAfterAuto read ReadSpaceAfterAuto write WriteSpaceAfterAuto;
|
||||
property SpaceBefore read ReadSpaceBefore write WriteSpaceBefore;
|
||||
property SpaceBeforeAuto read ReadSpaceBeforeAuto write WriteSpaceBeforeAuto;
|
||||
property Style read ReadStyle write WriteStyle;
|
||||
property TabStops read ReadTabStops write WriteTabStops;
|
||||
property WidowControl read ReadWidowControl write WriteWidowControl;
|
||||
property WordWrap read ReadWordWrap write WriteWordWrap;
|
||||
Function WriteWordWrap(value);
|
||||
Function ReadWordWrap();
|
||||
Function WriteWidowControl(value);
|
||||
Function ReadWidowControl();
|
||||
Function WriteTabStops(value);
|
||||
Function ReadTabStops();
|
||||
Function WriteStyle(value);
|
||||
Function ReadStyle();
|
||||
Function WriteSpaceBeforeAuto(value);
|
||||
Function ReadSpaceBeforeAuto();
|
||||
Function WriteSpaceBefore(value);
|
||||
Function ReadSpaceBefore();
|
||||
Function WriteSpaceAfterAuto(value);
|
||||
Function ReadSpaceAfterAuto();
|
||||
Function WriteSpaceAfter(value);
|
||||
Function ReadSpaceAfter();
|
||||
Function ReadShading();
|
||||
Function WriteRightIndent(value);
|
||||
Function ReadRightIndent();
|
||||
Function WriteReadingOrder(value);
|
||||
Function ReadReadingOrder();
|
||||
Function WritePageBreakBefore(value);
|
||||
Function ReadPageBreakBefore();
|
||||
Function WriteOutlineLevel(value);
|
||||
Function ReadOutlineLevel();
|
||||
Function WriteNoLineNumber(value);
|
||||
Function ReadNoLineNumber();
|
||||
Function WriteLineUnitBefore(value);
|
||||
Function ReadLineUnitBefore();
|
||||
Function WriteLineUnitAfter(value);
|
||||
Function ReadLineUnitAfter();
|
||||
Function WriteLineSpacingRule(value);
|
||||
Function ReadLineSpacingRule();
|
||||
Function WriteLineSpacing(value);
|
||||
Function ReadLineSpacing();
|
||||
Function WriteLeftIndent(value);
|
||||
Function ReadLeftIndent();
|
||||
Function ReadLast();
|
||||
Function WriteKeepWithNext(value);
|
||||
Function ReadKeepWithNext();
|
||||
Function WriteKeepTogether(value);
|
||||
Function ReadKeepTogether();
|
||||
Function WriteHyphenation(value);
|
||||
Function ReadHyphenation();
|
||||
Function WriteHangingPunctuation(value);
|
||||
Function ReadHangingPunctuation();
|
||||
Function WriteHalfWidthPunctuationOnTopOfLine(value);
|
||||
Function ReadHalfWidthPunctuationOnTopOfLine();
|
||||
Function WriteFormat(value);
|
||||
Function ReadFormat();
|
||||
Function WriteFirstLineIndent(value);
|
||||
Function ReadFirstLineIndent();
|
||||
Function ReadFirst();
|
||||
Function WriteFarEastLineBreakControl(value);
|
||||
Function ReadFarEastLineBreakControl();
|
||||
Function WriteDisableLineHeightGrid(value);
|
||||
Function ReadDisableLineHeightGrid();
|
||||
Function ReadCount();
|
||||
Function WriteCharacterUnitRightIndent(value);
|
||||
Function ReadCharacterUnitRightIndent();
|
||||
Function WriteCharacterUnitLeftIndent(value);
|
||||
Function ReadCharacterUnitLeftIndent();
|
||||
Function WriteCharacterUnitFirstLineIndent(value);
|
||||
Function ReadCharacterUnitFirstLineIndent();
|
||||
Function ReadBorders();
|
||||
Function WriteBaseLineAlignment(value);
|
||||
Function ReadBaseLineAlignment();
|
||||
Function WriteAutoAdjustRightIndent(value);
|
||||
Function ReadAutoAdjustRightIndent();
|
||||
Function WriteAlignment(value);
|
||||
Function ReadAlignment();
|
||||
Function WriteAddSpaceBetweenFarEastAndDigit(value);
|
||||
Function ReadAddSpaceBetweenFarEastAndDigit();
|
||||
Function WriteAddSpaceBetweenFarEastAndAlpha(value);
|
||||
Function ReadAddSpaceBetweenFarEastAndAlpha();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxParagraphs.Init(docx);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
paragraphs_ := array();
|
||||
lastnode_ := nil;
|
||||
self.SerializeParagraphs(docx_.Body().Node(), paragraphs_, lastnode_);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.SerializeParagraphs(root, arr, lastNode);
|
||||
Begin
|
||||
node := root.FirstChildElement();
|
||||
while ifObj(node) do
|
||||
begin
|
||||
name := node.GetName();
|
||||
if name = "w:p" then
|
||||
begin
|
||||
obj := TOfficeObj("TParagraph");
|
||||
obj.Init(node);
|
||||
arr[length(arr)] := obj;
|
||||
lastNode := node;
|
||||
end
|
||||
else if name = "w:tbl" then
|
||||
begin
|
||||
self.ParseTable(node, arr, lastNode);
|
||||
lastNode := node;
|
||||
end
|
||||
node := node.NextElement();
|
||||
End;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.ParseTable(root, arr, lastNode);
|
||||
Begin
|
||||
tr := root.FirstChildElement("w:tr");
|
||||
while ifObj(tr) do
|
||||
begin
|
||||
tc := tr.FirstChildElement("w:tc");
|
||||
while ifObj(tc) do
|
||||
begin
|
||||
SerializeParagraphs(tc, arr, lastNode);
|
||||
tc := tc.NextElement("w:tc");
|
||||
end
|
||||
arr[length(arr)] := TOfficeObj("TParagraph");
|
||||
tr := tr.NextElement("w:tr");
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.FindNewParagraphPosition(findNode, direction);
|
||||
Begin
|
||||
pos := length(paragraphs_);
|
||||
for i:=0 to length(paragraphs_)-1 do
|
||||
begin
|
||||
if not ifObj(paragraphs_[i].Root()) then continue;
|
||||
if paragraphs_[i].Root().Eq(findNode) then
|
||||
begin
|
||||
pos := direction = "after" ? i + 1 : i;
|
||||
break;
|
||||
end
|
||||
end
|
||||
return pos;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.AddParagraph(pos, newNode);overload;
|
||||
Begin
|
||||
if ifnil(pos) then pos := length(paragraphs_);
|
||||
if pos = length(paragraphs_) then lastnode_ := newNode;
|
||||
for i:=length(paragraphs_) downto pos do
|
||||
paragraphs_[i] := paragraphs_[i-1];
|
||||
obj := TOfficeObj("TParagraph");
|
||||
obj.Init(newNode);
|
||||
paragraphs_[pos] := obj;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.AddParagraph(findNode, newNode, direction);overload;
|
||||
Begin
|
||||
pos := self.FindNewParagraphPosition(findNode, direction);
|
||||
self.AddParagraph(pos, newNode);
|
||||
return pos;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.AddTableToParagraphs(findNode, tTable);
|
||||
Begin
|
||||
pos := self.FindNewParagraphPosition(findNode, "after");
|
||||
// 序列化表格为段落
|
||||
node := tTable.Root();
|
||||
if pos = length(paragraphs_) then lastnode_ := node;
|
||||
arr := array();
|
||||
last_node := nil;
|
||||
self.ParseTable(node, arr, last_node);
|
||||
len := length(arr);
|
||||
for i:=length(paragraphs_)-1 downto pos do
|
||||
paragraphs_[i+len] := paragraphs_[i];
|
||||
for i:=pos to pos + len - 1 do
|
||||
paragraphs_[i] := arr[i-pos];
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.DeleteParagraph(findNode);
|
||||
Begin
|
||||
pos := self.FindNewParagraphPosition(findNode, "before");
|
||||
if ifObj(findNode) then findNode.Parent().DeleteChild(findNode);
|
||||
for i:=pos to length(paragraphs_)-2 do
|
||||
paragraphs_[i] := paragraphs_[i+1];
|
||||
reindex(paragraphs_, array(length(paragraphs_)-1 : nil));
|
||||
End;
|
||||
|
||||
Function Operator TSDocxParagraphs.[](index);
|
||||
Begin
|
||||
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
||||
paragraph_obj.Init(docx_, paragraphs_[index - 1], index);
|
||||
return paragraph_obj;
|
||||
End;
|
||||
|
||||
// Methods
|
||||
Function TSDocxParagraphs.Add(Range);
|
||||
Begin
|
||||
if Range is Class(TSDocxRange) then
|
||||
begin
|
||||
Range.AddParagraph();
|
||||
end
|
||||
else begin
|
||||
if lastnode_ then
|
||||
node := docx_.Body().Root().InsertAfterChild(lastnode_, "element", "w:p");
|
||||
else
|
||||
node := docx_.Body().Root().InsertEndChild("element", "w:p");
|
||||
lastnode_ := node;
|
||||
obj := TOfficeObj("TParagraph");
|
||||
obj.Init(node);
|
||||
paragraphs_[length(paragraphs_)] := obj;
|
||||
return self.Item(length(paragraphs_) - 1);
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.Item(Index);
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.ReadCount();
|
||||
Begin
|
||||
return length(paragraphs_);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.ReadFirst();
|
||||
Begin
|
||||
return self.Item(1);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphs.ReadLast();
|
||||
Begin
|
||||
return self.Item(self.Count);
|
||||
End;
|
||||
@@ -0,0 +1,778 @@
|
||||
Type TSDocxRange = class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(docx, rangeObj);
|
||||
Function AddParagraph();overload;
|
||||
Function AddParagraph(direction);overload;
|
||||
Function AddTable(numRows, numColumns);
|
||||
Function InsertNewParagraph();
|
||||
Function Clear(deleteAll);
|
||||
|
||||
private
|
||||
Function CopyRunFormat(sourceRun, destRun);
|
||||
Function BreakIntoParagraphs(direction);
|
||||
|
||||
private
|
||||
docx_;
|
||||
range_obj_; // TSWdRange
|
||||
range_font_; // TSDocxFontRange
|
||||
range_shading_; // TSDocxShadingRange
|
||||
paragraph_format_range_; // TSDocxParagraphFormatRange
|
||||
list_format_range_; // TSDocxListFormatRange
|
||||
borders_range_; // TSDocxBordersRange
|
||||
document_; // TSDocxDocument
|
||||
collapse_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function AutoFormat();
|
||||
Function Calculate();
|
||||
Function CheckGrammar();
|
||||
Function CheckSpelling(CustomDictionary, IgnoreUppercase, AlwaysSuggest, CustomDictionary2, CustomDictionary3, CustomDictionary4, CustomDictionary5, CustomDictionary6, CustomDictionary7, CustomDictionary8, CustomDictionary9, CustomDictionary10);
|
||||
Function CheckSynonyms();
|
||||
Function Collapse(Direction);
|
||||
Function ComputeStatistics(Statistic);
|
||||
Function ConvertHangulAndHanja(ConversionsMode, FastConversion, CheckHangulEnding, EnableRecentOrdering, CustomDictionary);
|
||||
Function ConvertToTable(Separator, NumRows, NumColumns, InitialColumnWidth, Format, ApplyBorders, ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit, AutoFitBehavior, DefaultTableBehavior);
|
||||
Function Copy();
|
||||
Function CopyAsPicture();
|
||||
Function Cut();
|
||||
Function Delete(_Unit, Count);
|
||||
Function DetectLanguage();
|
||||
Function EndOf(_Unit, Extend);
|
||||
Function Expand(_Unit);
|
||||
Function ExportAsFixedFormat(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, ExportCurrentPage, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, FixedFormatExtClassPtr);
|
||||
Function ExportAsFixedFormat2(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, ExportCurrentPage, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, OptimizeForImageQuality, FixedFormatExtClassPtr);
|
||||
Function ExportFragment(FileName, Format);
|
||||
Function GetSpellingSuggestions(CustomDictionary, IgnoreUppercase, MainDictionary, SuggestionMode, CustomDictionary2, CustomDictionary3, CustomDictionary4, CustomDictionary5, CustomDictionary6, CustomDictionary7, CustomDictionary8, CustomDictionary9, CustomDictionary10);
|
||||
Function GoTo(What, Which, Count, Name);
|
||||
Function GoToEditableRange(EditorID);
|
||||
Function GoToNext(What);
|
||||
Function GoToPrevious(What);
|
||||
Function ImportFragment(FileName, MatchDestination);
|
||||
Function InRange(Range);
|
||||
Function InsertAfter(Text);
|
||||
Function InsertAlignmentTab(Alignment, RelativeTo);
|
||||
Function InsertAutoText(Text);
|
||||
Function InsertBefore(Text);
|
||||
Function InsertBreak(Type);
|
||||
Function InsertCaption(_Label, Title, TitleAutoText, Position, ExcludeLabel);
|
||||
Function InsertCrossReference(ReferenceType, ReferenceKind, ReferenceItem, InsertAsHyperlink, IncludePosition, SeparateNumbers, SeparatorString);
|
||||
Function InsertDatabase(Format, Style, LinkToSource, Connection, SQLStatement, SQLStatement1, PasswordDocument, PasswordTemplate, WritePasswordDocument, WritePasswordTemplate, DataSource, From_, To_, IncludeFields);
|
||||
Function InsertDateTime(DateTimeFormat, InsertAsField, InsertAsFullWidth, DateLanguage, CalendarType);
|
||||
Function InsertFile(FileName, Range, ConfirmConversions, Link, Attachment);
|
||||
Function InsertParagraph();
|
||||
Function InsertParagraphAfter();
|
||||
Function InsertParagraphBefore();
|
||||
Function InsertSymbol(CharacterNumber, Font, Unicode, Bias);
|
||||
Function InsertXML(XML, Transform);
|
||||
Function InStory(Range);
|
||||
Function IsEqual(Range);
|
||||
Function LookupNameProperties();
|
||||
Function ModifyEnclosure(Style, Symbol, EnclosedText);
|
||||
Function Move(_Unit, Count);
|
||||
Function MoveEnd(_Unit, Count);
|
||||
Function MoveEndUntil(Cset, Count);
|
||||
Function MoveEndWhile(Cset, Count);
|
||||
Function MoveStart(_Unit, Count);
|
||||
Function MoveStartUntil(Cset, Count);
|
||||
Function MoveStartWhile(Cset, Count);
|
||||
Function MoveUnti(Cset, Count);
|
||||
Function MoveWhile(Cset, Count);
|
||||
Function Next(_Unit, Count);
|
||||
Function NextSubdocument();
|
||||
Function Paste();
|
||||
Function PasteAndFormat(Type);
|
||||
Function PasteAppendTable();
|
||||
Function PasteAsNestedTable();
|
||||
Function PasteExcelTable(LinkedToExcel, WordFormatting, RTF);
|
||||
Function PasteSpecial(IconIndex, Link, Placement, DisplayAsIcon, DataType, IconFileName, IconLabel);
|
||||
Function PhoneticGuide(Text, Alignment, Raise_, FontSize, FontName);
|
||||
Function Previous(_Unit, Count);
|
||||
Function PreviousSubdocument();
|
||||
Function Relocate(Direction);
|
||||
Function Select();
|
||||
Function SetListLevel(Level);
|
||||
Function SetRange(Start, _End);
|
||||
Function Sort(ExcludeHeader, FieldNumber, SortFieldType, SortOrder, FieldNumber2, SortFieldType2, SortOrder2, FieldNumber3, SortFieldType3, SortOrder3, SortColumn, Separator, CaseSensitive, BidiSort, IgnoreThe, IgnoreKashida, IgnoreDiacritics, IgnoreHe, LanguageID);
|
||||
Function SortAscending();
|
||||
Function SortByHeadings(SortFieldType, SortOrder, CaseSensitive, BidiSort, IgnoreThe, IgnoreKashida, IgnoreDiacritics, IgnoreHe, LanguageID);
|
||||
Function SortDescending();
|
||||
Function StartOf(_Unit, Extend);
|
||||
Function TCSCConverter(WdTCSCConverterDirection, CommonTerms, UseVariants);
|
||||
Function WholeStory();
|
||||
|
||||
// Properties
|
||||
property Bold read ReadBold write WriteBold;
|
||||
property BoldBi read ReadBoldBi write WriteBoldBi;
|
||||
property BookmarkID read ReadBookmarkID;
|
||||
property Bookmarks read ReadBookmarks;
|
||||
property Borders read ReadBorders;
|
||||
property Case_ read ReadCase write WriteCase;
|
||||
property Cells read ReadCells;
|
||||
property Characters read ReadCharacters;
|
||||
property CharacterStyle read ReadCharacterStyle;
|
||||
property CharacterWidth read ReadCharacterWidth write WriteCharacterWidth;
|
||||
property Columns read ReadColumns;
|
||||
property CombineCharacters read ReadCombineCharacters write WriteCombineCharacters;
|
||||
property Comments read ReadComments;
|
||||
property Conflicts read ReadConflicts;
|
||||
property ContentControls read ReadContentControls;
|
||||
property DisableCharacterSpaceGrid read ReadDisableCharacterSpaceGrid write WriteDisableCharacterSpaceGrid;
|
||||
property Document read ReadDocument;
|
||||
property Duplicate read ReadDuplicate;
|
||||
property Editors read ReadEditors;
|
||||
property EmphasisMark read ReadEmphasisMark write WriteEmphasisMark;
|
||||
property _End read ReadEnd write WriteEnd;
|
||||
property EndnoteOptions read ReadEndnoteOptions;
|
||||
property Endnotes read ReadEndnotes;
|
||||
property EnhMetaFileBits read ReadEnhMetaFileBits;
|
||||
property Fields read ReadFields;
|
||||
property Find read ReadFind;
|
||||
property FitTextWidth read ReadFitTextWidth write WriteFitTextWidth;
|
||||
property Font read ReadFont write WriteFont;
|
||||
property FootnoteOptions read ReadFootnoteOptions;
|
||||
property Footnotes read ReadFootnotes;
|
||||
property FormattedText read ReadFormattedText write WriteFormattedText;
|
||||
property FormFields read ReadFormFields;
|
||||
property Frames read ReadFrames;
|
||||
property GrammarChecked read ReadGrammarChecked write WriteGrammarChecked;
|
||||
property GrammaticalErrors read ReadGrammaticalErrors;
|
||||
property HighlightColorIndex read ReadHighlightColorIndex write WriteHighlightColorIndex;
|
||||
property HorizontalInVertical read ReadHorizontalInVertical write WriteHorizontalInVertical;
|
||||
property HTMLDivisions read ReadHTMLDivisions;
|
||||
property Hyperlinks read ReadHyperlinks;
|
||||
property ID read ReadID write WriteID;
|
||||
property Information read ReadInformation;
|
||||
property InlineShapes read ReadInlineShapes;
|
||||
property IsEndOfRowMark read ReadIsEndOfRowMark;
|
||||
property Italic read ReadItalic write WriteItalic;
|
||||
property ItalicBi read ReadItalicBi write WriteItalicBi;
|
||||
property Kana read ReadKana write WriteKana;
|
||||
property LanguageDetected read ReadLanguageDetected write WriteLanguageDetected;
|
||||
property LanguageID read ReadLanguageID write WriteLanguageID;
|
||||
property LanguageIDFarEast read ReadLanguageIDFarEast write WriteLanguageIDFarEast;
|
||||
property LanguageIDOther read ReadLanguageIDOther write WriteLanguageIDOther;
|
||||
property ListFormat read ReadListFormat;
|
||||
property ListParagraphs read ReadListParagraphs;
|
||||
property ListStyle read ReadListStyle;
|
||||
property Locks read ReadLocks;
|
||||
property NextStoryRange read ReadNextStoryRange;
|
||||
property NoProofing read ReadNoProofing write WriteNoProofing;
|
||||
property OMaths read ReadOMaths;
|
||||
property Orientation read ReadOrientation write WriteOrientation;
|
||||
property PageSetup read ReadPageSetup;
|
||||
property ParagraphFormat read ReadParagraphFormat write WriteParagraphFormat;
|
||||
property Paragraphs read ReadParagraphs;
|
||||
property ParagraphStyle read ReadParagraphStyle;
|
||||
property ParentContentControl read ReadParentContentControl;
|
||||
property PreviousBookmarkID read ReadPreviousBookmarkID;
|
||||
property ReadabilityStatistics read ReadReadabilityStatistics;
|
||||
property Revisions read ReadRevisions;
|
||||
property Rows read ReadRows;
|
||||
property Scripts read ReadScripts;
|
||||
property Sections read ReadSections;
|
||||
property Sentences read ReadSentences;
|
||||
property Shading read ReadShading;
|
||||
property ShapeRange read ReadShapeRange;
|
||||
property ShowAll read ReadShowAll write WriteShowAll;
|
||||
property SpellingChecked read ReadSpellingChecked write WriteSpellingChecked;
|
||||
property SpellingErrors read ReadSpellingErrors;
|
||||
property Start read ReadStart write WriteStart;
|
||||
property StoryLength read ReadStoryLength;
|
||||
property StoryType read ReadStoryType;
|
||||
property Style read ReadStyle write WriteStyle;
|
||||
property Subdocuments read ReadSubdocuments;
|
||||
property SynonymInfo read ReadSynonymInfo;
|
||||
property Tables read ReadTables;
|
||||
property TableStyle read ReadTableStyle;
|
||||
property Text read ReadText write WriteText;
|
||||
property TextRetrievalMode read ReadTextRetrievalMode write WriteTextRetrievalMode;
|
||||
property TextVisibleOnScreen read ReadTextVisibleOnScreen;
|
||||
property TopLevelTables read ReadTopLevelTables;
|
||||
property TwoLinesInOne read ReadTwoLinesInOne write WriteTwoLinesInOne;
|
||||
property Underline read ReadUnderline write WriteUnderline;
|
||||
property Updates read ReadUpdates;
|
||||
property WordOpenXML read ReadWordOpenXML;
|
||||
property Words read ReadWords;
|
||||
property XML read ReadXML;
|
||||
Function ReadXML();
|
||||
Function ReadWords();
|
||||
Function ReadWordOpenXML();
|
||||
Function ReadUpdates();
|
||||
Function WriteUnderline(value);
|
||||
Function ReadUnderline();
|
||||
Function WriteTwoLinesInOne(value);
|
||||
Function ReadTwoLinesInOne();
|
||||
Function ReadTopLevelTables();
|
||||
Function ReadTextVisibleOnScreen();
|
||||
Function WriteTextRetrievalMode(value);
|
||||
Function ReadTextRetrievalMode();
|
||||
Function WriteText(value);
|
||||
Function ReadText();
|
||||
Function ReadTableStyle();
|
||||
Function ReadTables();
|
||||
Function ReadSynonymInfo();
|
||||
Function ReadSubdocuments();
|
||||
Function WriteStyle(value);
|
||||
Function ReadStyle();
|
||||
Function ReadStoryType();
|
||||
Function ReadStoryLength();
|
||||
Function WriteStart(value);
|
||||
Function ReadStart();
|
||||
Function ReadSpellingErrors();
|
||||
Function WriteSpellingChecked(value);
|
||||
Function ReadSpellingChecked();
|
||||
Function WriteShowAll(value);
|
||||
Function ReadShowAll();
|
||||
Function ReadShapeRange();
|
||||
Function ReadShading();
|
||||
Function ReadSentences();
|
||||
Function ReadSections();
|
||||
Function ReadScripts();
|
||||
Function ReadRows();
|
||||
Function ReadRevisions();
|
||||
Function ReadReadabilityStatistics();
|
||||
Function ReadPreviousBookmarkID();
|
||||
Function ReadParentContentControl();
|
||||
Function ReadParagraphStyle();
|
||||
Function ReadParagraphs();
|
||||
Function WriteParagraphFormat(value);
|
||||
Function ReadParagraphFormat();
|
||||
Function ReadPageSetup();
|
||||
Function WriteOrientation(value);
|
||||
Function ReadOrientation();
|
||||
Function ReadOMaths();
|
||||
Function WriteNoProofing(value);
|
||||
Function ReadNoProofing();
|
||||
Function ReadNextStoryRange();
|
||||
Function ReadLocks();
|
||||
Function ReadListStyle();
|
||||
Function ReadListParagraphs();
|
||||
Function ReadListFormat();
|
||||
Function WriteLanguageIDOther(value);
|
||||
Function ReadLanguageIDOther();
|
||||
Function WriteLanguageIDFarEast(value);
|
||||
Function ReadLanguageIDFarEast();
|
||||
Function WriteLanguageID(value);
|
||||
Function ReadLanguageID();
|
||||
Function WriteLanguageDetected(value);
|
||||
Function ReadLanguageDetected();
|
||||
Function WriteKana(value);
|
||||
Function ReadKana();
|
||||
Function WriteItalicBi(value);
|
||||
Function ReadItalicBi();
|
||||
Function WriteItalic(value);
|
||||
Function ReadItalic();
|
||||
Function ReadIsEndOfRowMark();
|
||||
Function ReadInlineShapes();
|
||||
Function ReadInformation(Type);
|
||||
Function WriteID(value);
|
||||
Function ReadID();
|
||||
Function ReadHyperlinks();
|
||||
Function ReadHTMLDivisions();
|
||||
Function WriteHorizontalInVertical(value);
|
||||
Function ReadHorizontalInVertical();
|
||||
Function WriteHighlightColorIndex(value);
|
||||
Function ReadHighlightColorIndex();
|
||||
Function ReadGrammaticalErrors();
|
||||
Function WriteGrammarChecked(value);
|
||||
Function ReadGrammarChecked();
|
||||
Function ReadFrames();
|
||||
Function ReadFormFields();
|
||||
Function WriteFormattedText(value);
|
||||
Function ReadFormattedText();
|
||||
Function ReadFootnotes();
|
||||
Function ReadFootnoteOptions();
|
||||
Function WriteFont(value);
|
||||
Function ReadFont();
|
||||
Function WriteFitTextWidth(value);
|
||||
Function ReadFitTextWidth();
|
||||
Function ReadFind();
|
||||
Function ReadFields();
|
||||
Function ReadEnhMetaFileBits();
|
||||
Function ReadEndnotes();
|
||||
Function ReadEndnoteOptions();
|
||||
Function WriteEnd(value);
|
||||
Function ReadEnd();
|
||||
Function WriteEmphasisMark(value);
|
||||
Function ReadEmphasisMark();
|
||||
Function ReadEditors();
|
||||
Function ReadDuplicate();
|
||||
Function ReadDocument();
|
||||
Function WriteDisableCharacterSpaceGrid(value);
|
||||
Function ReadDisableCharacterSpaceGrid();
|
||||
Function ReadContentControls();
|
||||
Function ReadConflicts();
|
||||
Function ReadComments();
|
||||
Function WriteCombineCharacters(value);
|
||||
Function ReadCombineCharacters();
|
||||
Function ReadColumns();
|
||||
Function WriteCharacterWidth(value);
|
||||
Function ReadCharacterWidth();
|
||||
Function ReadCharacterStyle();
|
||||
Function ReadCharacters();
|
||||
Function ReadCells();
|
||||
Function WriteCase(value);
|
||||
Function ReadCase();
|
||||
Function ReadBorders(index);
|
||||
Function ReadBookmarks();
|
||||
Function ReadBookmarkID();
|
||||
Function WriteBoldBi(value);
|
||||
Function ReadBoldBi();
|
||||
Function WriteBold(value);
|
||||
Function ReadBold();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxRange.Init(docx, rangeObj);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
range_obj_ := rangeObj;
|
||||
range_font_ := new TSDocxFontRange(self.Application, self.Creator, self);
|
||||
range_font_.Init(range_obj_);
|
||||
range_shading_ := new TSDocxShadingRange(self.Application, self.Creator, self);
|
||||
range_shading_.Init(range_obj_);
|
||||
paragraph_format_range_ := new TSDocxParagraphFormatRange(self.Application, self.Creator, self);
|
||||
paragraph_format_range_.Init(docx_, range_obj_);
|
||||
list_format_range_ := new TSDocxListFormatRange(self.Application, self.Creator, self);
|
||||
list_format_range_.Init(docx_, range_obj_);
|
||||
borders_range_ := new TSDocxBordersRange(self.Application, self.Creator, self);
|
||||
borders_range_.Init(range_obj_);
|
||||
collapse_ := nil;
|
||||
document_ := self.Parent;
|
||||
while not (document_ is class(TSDocxDocument)) do
|
||||
document_ := document_.Parent;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.AddParagraph();overload;
|
||||
Begin
|
||||
if collapse_ = TSDocxEnumerations.wdCollapseEnd() then
|
||||
return self.AddParagraph("after");
|
||||
return self.AddParagraph("before");
|
||||
End;
|
||||
|
||||
Function TSDocxRange.AddParagraph(direction);overload;
|
||||
Begin
|
||||
[flag, last_node, new_node] := self.BreakIntoParagraphs(direction);
|
||||
if not flag then
|
||||
new_node := direction = "before" ? last_node.Parent().InsertBeforeChild(last_node, "element", "w:p")
|
||||
: last_node.Parent().InsertAfterChild(last_node, "element", "w:p");
|
||||
pos := document_.Paragraphs.AddParagraph(last_node, new_node, direction);
|
||||
return document_.Paragraphs.Item(pos + 1);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertNewParagraph();
|
||||
Begin
|
||||
case collapse_ of
|
||||
TSDocxEnumerations.wdCollapseStart():
|
||||
return self.AddParagraph("before");
|
||||
|
||||
TSDocxEnumerations.wdCollapseEnd():
|
||||
return self.AddParagraph("after");
|
||||
|
||||
else begin
|
||||
self.Clear();
|
||||
if not range_obj_[0].TParagraph.Empty() then return self.AddParagraph("after");
|
||||
pos := document_.Paragraphs.FindNewParagraphPosition(range_obj_[0].TParagraph.Root());
|
||||
return document_.Paragraphs.Item(pos + 1);
|
||||
end
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.AddTable(numRows, numColumns);
|
||||
Begin
|
||||
padd_table := function(ttable, node);
|
||||
begin
|
||||
if node.Parent().GetName() = "w:tc" then
|
||||
begin
|
||||
docx := new TCell();
|
||||
docx.Create(node);
|
||||
table := docx.InsertTable(ttable, node);
|
||||
end
|
||||
else if node.Parent().GetName() = "w:body" then
|
||||
begin
|
||||
table := docx_.InsertTable(ttable, node);
|
||||
end
|
||||
return table;
|
||||
end
|
||||
|
||||
paragraph := self.AddParagraph();
|
||||
node := paragraph.Object().Root();
|
||||
data := nils(numRows, numColumns);
|
||||
ttable := docx_.CreateTable(data);
|
||||
table := ##padd_table(ttable, node);
|
||||
document_.Paragraphs.AddTableToParagraphs(node, table);
|
||||
paragraph.Range.Clear(true);
|
||||
if ifnil(collapse_) then self.Clear(true);
|
||||
return table;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.Clear(deleteAll);
|
||||
Begin
|
||||
arr := range_obj_.Clear(deleteAll);
|
||||
for i:=0 to length(arr)-1 do
|
||||
document_.Paragraphs.DeleteParagraph(arr[i]);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.CopyRunFormat(sourceRun, destRun);
|
||||
Begin
|
||||
rpr := sourceRun.FirstChildElement("w:rPr");
|
||||
marshal := rpr.Marshal();
|
||||
node := class(TSXml).GetNode(destRun, "w:rPr", "first");
|
||||
class(TSXml).UpdateNode(node, marshal[0]["attribute"], marshal[0]["children"]);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.BreakIntoParagraphs(direction);
|
||||
Begin
|
||||
index := direction = "before" ? 0 : range_obj_.Size()-1;
|
||||
range_obj_.SplitRun(index);
|
||||
run := range_obj_[index].TRun;
|
||||
paragraph := range_obj_[index].TParagraph;
|
||||
root := paragraph.Root();
|
||||
|
||||
if not ifObj(run.Root()) or
|
||||
(not run.Root().NextElement("w:r") and direction = "after") or
|
||||
(not run.Root().PrevElement("w:r") and direction = "before")
|
||||
then return array(false, root, nil);
|
||||
|
||||
parent_node := root.Parent();
|
||||
node := direction = "before" ? parent_node.InsertBeforeChild(root, "element", "w:p") : parent_node.InsertAfterChild(root, "element", "w:p");
|
||||
ppr := root.FirstChildElement("w:pPr");
|
||||
ppr_node := ppr ? node.InsertFirstChild(string(ppr.Data())) : node.InsertFirstChild("element", "w:rPr");
|
||||
|
||||
if direction = "before" then
|
||||
begin
|
||||
run_node := root.FirstChildElement("w:r");
|
||||
while not run_node.Eq(run.Root()) do
|
||||
begin
|
||||
node.InsertEndChild(string(run_node.Data()));
|
||||
delete_node := run_node;
|
||||
run_node := run_node.NextElement("w:r");
|
||||
root.DeleteChild(delete_node);
|
||||
end
|
||||
end
|
||||
else begin
|
||||
run_node := run.Root().NextElement("w:r");
|
||||
while ifObj(run_node) do
|
||||
begin
|
||||
node.InsertEndChild(string(run_node.Data()));
|
||||
delete_node := run_node;
|
||||
run_node := run_node.NextElement("w:r");
|
||||
root.DeleteChild(delete_node);
|
||||
end
|
||||
end
|
||||
return array(true, root, node);
|
||||
End;
|
||||
|
||||
// Methods
|
||||
Function TSDocxRange.InsertAfter(Text); // 无论range是什么,都在段落末尾添加文字
|
||||
Begin
|
||||
size := range_obj_.Size();
|
||||
paragraph := range_obj_[size-1].TParagraph;
|
||||
if paragraph.Empty() then
|
||||
begin
|
||||
run := paragraph.AppendRun();
|
||||
run.AddText(Text);
|
||||
paragraph.CopyRunFormat(false, run.Root());
|
||||
end
|
||||
else begin
|
||||
trun := range_obj_[size-1].TRun;
|
||||
run := paragraph.AppendRun(trun);
|
||||
run.AddText(Text);
|
||||
self.CopyRunFormat(trun.Root(), run.Root());
|
||||
end
|
||||
range_obj_.Refresh();
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertBefore(Text); // 无论range是什么,都在段落前添加文字
|
||||
Begin
|
||||
paragraph := range_obj_[0].TParagraph;
|
||||
if paragraph.Empty() then
|
||||
begin
|
||||
run := paragraph.AppendRun();
|
||||
run.AddText(Text);
|
||||
paragraph.CopyRunFormat(false, run.Root());
|
||||
end
|
||||
else begin
|
||||
trun := range_obj_[0].TRun;
|
||||
run := paragraph.PrependRun(trun);
|
||||
run.AddText(Text);
|
||||
self.CopyRunFormat(trun.Root(), run.Root());
|
||||
end
|
||||
range_obj_.Refresh();
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertBreak(Type);
|
||||
Begin
|
||||
if self.Information(TSDocxEnumerations.wdWithInTable()) then
|
||||
raise "This method is not supported for the table range and cell range";
|
||||
pf := function(t, c);
|
||||
begin
|
||||
case collapse_ of
|
||||
TSDocxEnumerations.wdCollapseStart():
|
||||
index := 0;
|
||||
|
||||
TSDocxEnumerations.wdCollapseEnd():
|
||||
index := range_obj_.Size()-1;
|
||||
|
||||
else begin
|
||||
range_obj_.Clear();
|
||||
index := 0;
|
||||
flag := 1;
|
||||
end
|
||||
end;
|
||||
range_obj_.SplitRun(index);
|
||||
tparagraph := range_obj_[index].TParagraph;
|
||||
run := flag = 1 ? range_obj_[0].TRun : tparagraph.PrependRun(range_obj_[index].TRun);
|
||||
run.Br.Type := t;
|
||||
run.Br.Clear := c;
|
||||
run.Apply();
|
||||
end
|
||||
|
||||
if ifnil(Type) then Type := TSDocxEnumerations.wdPageBreak();
|
||||
case Type of
|
||||
TSDocxEnumerations.wdColumnBreak():
|
||||
begin
|
||||
paragraph_obj := self.InsertNewParagraph();
|
||||
if collapse_ = TSDocxEnumerations.wdCollapseStart() then paragraph_obj := paragraph_obj.Next(1);
|
||||
obj := paragraph_obj.Object();
|
||||
run := obj.PrependRun();
|
||||
run.Br.Type := "column";
|
||||
run.Apply();
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdLineBreak():
|
||||
##pf("textWrapping", nil);
|
||||
|
||||
TSDocxEnumerations.wdLineBreakClearLeft():
|
||||
##pf("textWrapping", "left");
|
||||
|
||||
TSDocxEnumerations.wdLineBreakClearRight():
|
||||
##pf("textWrapping", "right");
|
||||
|
||||
TSDocxEnumerations.wdPageBreak():
|
||||
begin
|
||||
paragraph_obj := self.InsertNewParagraph();
|
||||
paragraph_obj := self.InsertNewParagraph();
|
||||
paragraph_obj.Format.Alignment := TSDocxEnumerations.wdAlignParagraphLeft();
|
||||
paragraph_obj.Format.WidowControl := true;
|
||||
paragraph_obj.Format.Apply();
|
||||
obj := paragraph_obj.Object();
|
||||
run := obj.AppendRun();
|
||||
run.Br.Type := "page";
|
||||
run.Apply();
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdSectionBreakContinuous(),
|
||||
TSDocxEnumerations.wdSectionBreakEvenPage(),
|
||||
TSDocxEnumerations.wdSectionBreakNextPage(),
|
||||
TSDocxEnumerations.wdSectionBreakOddPage():
|
||||
raise "This Type is not suppoted";
|
||||
|
||||
TSDocxEnumerations.wdTextWrappingBreak():
|
||||
##pf("textWrapping", "all");
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.Collapse(Direction);
|
||||
Begin
|
||||
if ifnil(Direction) then Direction := TSDocxEnumerations.wdCollapseStart();
|
||||
collapse_ := Direction;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.Delete(_Unit, Count);
|
||||
Begin
|
||||
self.Clear(true);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertParagraph();
|
||||
Begin
|
||||
self.InsertNewParagraph();
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertParagraphAfter();
|
||||
Begin
|
||||
self.AddParagraph("after");
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertParagraphBefore();
|
||||
Begin
|
||||
self.AddParagraph("before");
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxRange.WriteBoldBi(value);
|
||||
Begin
|
||||
range_font_.BoldBi := value;
|
||||
range_font_.Apply();
|
||||
End;
|
||||
Function TSDocxRange.ReadBoldBi();
|
||||
Begin
|
||||
return range_font_.BoldBi;
|
||||
End;
|
||||
Function TSDocxRange.WriteBold(value);
|
||||
Begin
|
||||
range_font_.Bold := value;
|
||||
range_font_.Apply();
|
||||
End;
|
||||
Function TSDocxRange.ReadBold();
|
||||
Begin
|
||||
return range_font_.Bold;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.WriteFont(value);
|
||||
Begin
|
||||
range_font_.ReWrite(value);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadFont();
|
||||
Begin
|
||||
return range_font_;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadBorders(index);
|
||||
Begin
|
||||
return ifnil(index) ? borders_range_ : borders_range_.Item(index);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.WriteParagraphFormat(value);
|
||||
Begin
|
||||
paragraph_format_range_.ReWrite(value);
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadParagraphFormat();
|
||||
Begin
|
||||
return paragraph_format_range_;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadInformation(Type);
|
||||
Begin
|
||||
case Type of
|
||||
// TSDocxEnumerations.wdActiveEndAdjustedPageNumber():
|
||||
// TSDocxEnumerations.wdActiveEndPageNumber():
|
||||
// TSDocxEnumerations.wdActiveEndSectionNumber():
|
||||
// TSDocxEnumerations.wdAtEndOfRowMarker():
|
||||
// TSDocxEnumerations.wdCapsLock():
|
||||
// TSDocxEnumerations.wdEndOfRangeColumnNumber():
|
||||
// TSDocxEnumerations.wdEndOfRangeRowNumber():
|
||||
// TSDocxEnumerations.wdFirstCharacterColumnNumber():
|
||||
// TSDocxEnumerations.wdFirstCharacterLineNumber():
|
||||
// TSDocxEnumerations.wdFrameIsSelected():
|
||||
// TSDocxEnumerations.wdHeaderFooterType():
|
||||
// TSDocxEnumerations.wdHorizontalPositionRelativeToPage():
|
||||
// TSDocxEnumerations.wdHorizontalPositionRelativeToTextBoundary():
|
||||
// TSDocxEnumerations.wdInBibliography():
|
||||
// TSDocxEnumerations.wdInCitation():
|
||||
// TSDocxEnumerations.wdInClipboard():
|
||||
// TSDocxEnumerations.wdInCommentPane():
|
||||
// TSDocxEnumerations.wdInContentControl():
|
||||
// TSDocxEnumerations.wdInCoverPage():
|
||||
// TSDocxEnumerations.wdInEndnote():
|
||||
// TSDocxEnumerations.wdInFieldCode():
|
||||
// TSDocxEnumerations.wdInFieldResult():
|
||||
// TSDocxEnumerations.wdInFootnote():
|
||||
// TSDocxEnumerations.wdInFootnoteEndnotePane():
|
||||
// TSDocxEnumerations.wdInHeaderFooter():
|
||||
// TSDocxEnumerations.wdInMasterDocument():
|
||||
// TSDocxEnumerations.wdInWordMail():
|
||||
// TSDocxEnumerations.wdMaximumNumberOfColumns():
|
||||
// TSDocxEnumerations.wdMaximumNumberOfRows():
|
||||
// TSDocxEnumerations.wdNumberOfPagesInDocument():
|
||||
// TSDocxEnumerations.wdNumLock():
|
||||
// TSDocxEnumerations.wdOverType():
|
||||
// TSDocxEnumerations.wdReferenceOfType():
|
||||
// TSDocxEnumerations.wdRevisionMarking():
|
||||
// TSDocxEnumerations.wdSelectionMode():
|
||||
// TSDocxEnumerations.wdStartOfRangeColumnNumber():
|
||||
// TSDocxEnumerations.wdStartOfRangeRowNumber():
|
||||
// TSDocxEnumerations.wdVerticalPositionRelativeToPage():
|
||||
// TSDocxEnumerations.wdVerticalPositionRelativeToTextBoundary():
|
||||
TSDocxEnumerations.wdWithInTable():
|
||||
begin
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
node := range_obj_[i].TParagraph.Root();
|
||||
if not (node.Parent().GetName() in array("w:tbl", "w:tc")) then return false;
|
||||
end
|
||||
return true;
|
||||
end
|
||||
// TSDocxEnumerations.wdZoomPercentage():
|
||||
else raise "This Type is not suppoted";
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.WriteStyle(value);
|
||||
Begin
|
||||
paragraph_format_range_.Style := value;
|
||||
paragraph_format_range_.Apply();
|
||||
End;
|
||||
Function TSDocxRange.ReadStyle();
|
||||
Begin
|
||||
return paragraph_format_range_.Style;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.WriteText(value);
|
||||
Begin
|
||||
range_obj_.SplitRun();
|
||||
self.Clear();
|
||||
run := range_obj_[0].TRun;
|
||||
if ifObj(run.Root()) then run.SetText(value);
|
||||
else begin
|
||||
run := range_obj_[0].TParagraph.AppendRun();
|
||||
run.SetText(value);
|
||||
range_obj_[0].TRun := run;
|
||||
end
|
||||
End;
|
||||
Function TSDocxRange.ReadText();
|
||||
Begin
|
||||
range_obj_.SplitRun();
|
||||
txt := "";
|
||||
prev := range_obj_[0].TParagraph;
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
run := range_obj_[i].TRun;
|
||||
if not ifObj(run.Root()) then continue;
|
||||
if prev = range_obj_[i].TParagraph then
|
||||
begin
|
||||
txt += run.Text();
|
||||
end
|
||||
else begin
|
||||
txt += "\n" + run.Text();
|
||||
prev := range_obj_[i].TParagraph;
|
||||
end
|
||||
end
|
||||
return txt;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadListFormat();
|
||||
Begin
|
||||
return list_format_range_;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadShading();
|
||||
Begin
|
||||
return range_shading_;
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadEnd();
|
||||
Begin
|
||||
return range_obj_.GetEnd();
|
||||
End;
|
||||
|
||||
Function TSDocxRange.ReadStart();
|
||||
Begin
|
||||
return range_obj_.GetStart();
|
||||
End;
|
||||
|
||||
Function TSDocxRange.InsertFile(FileName, Range, ConfirmConversions, Link, Attachment);
|
||||
Begin
|
||||
alias := "";
|
||||
paragraph := self.InsertNewParagraph();
|
||||
docx_.InsertFile(alias, FileName, paragraph.Object().Root());
|
||||
paragraph.Range.Delete();
|
||||
document_.Paragraphs.Init(docx_);
|
||||
End;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
Type TSDocxRow = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(table, row);
|
||||
|
||||
@@ -153,3 +153,8 @@ Begin
|
||||
class(TSXml).RemoveNode(table_.Root(), "w:tblPr/w:tblOverlap");
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxRows.ReadCount();
|
||||
Begin
|
||||
return table_.Rows();
|
||||
End;
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
Type TSDocxShading = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(pr);
|
||||
|
||||
private
|
||||
pr_; // xxPr对象,比如Cell: tr.tcPr,或Paragraph: p.pPr
|
||||
|
||||
public
|
||||
property BackgroundPatternColor read ReadBackgroundPatternColor write WriteBackgroundPatternColor;
|
||||
property BackgroundPatternColorIndex read ReadBackgroundPatternColorIndex write WriteBackgroundPatternColorIndex;
|
||||
property ForegroundPatternColor read ReadForegroundPatternColor write WriteForegroundPatternColor;
|
||||
property ForegroundPatternColorIndex read ReadForegroundPatternColorIndex write WriteForegroundPatternColorIndex;
|
||||
property Texture read ReadTexture write WriteTexture;
|
||||
Function WriteTexture(texture);
|
||||
Function ReadTexture();
|
||||
Function WriteForegroundPatternColorIndex();
|
||||
Function ReadForegroundPatternColorIndex();
|
||||
Function WriteForegroundPatternColor();
|
||||
Function ReadForegroundPatternColor();
|
||||
Function WriteBackgroundPatternColorIndex();
|
||||
Function ReadBackgroundPatternColorIndex();
|
||||
Function WriteBackgroundPatternColor();
|
||||
Function ReadBackgroundPatternColor();
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxShading.Init(application, pr);
|
||||
Begin
|
||||
pr_ := pr;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxShading.WriteTexture(texture);
|
||||
Begin
|
||||
case texture of
|
||||
TSDocxEnumerations.wdTextureHorizontal():
|
||||
begin
|
||||
pr_.Shading.Val := "thinHorzStripe";
|
||||
pr_.Update();
|
||||
end
|
||||
end;
|
||||
End;
|
||||
Function TSDocxShading.ReadTexture();
|
||||
Begin
|
||||
End;
|
||||
+47
-37
@@ -7,8 +7,10 @@ public
|
||||
private
|
||||
docx_;
|
||||
table_; // TOfficeObj('TTable') 对象
|
||||
range_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function ApplyStyleDirectFormatting(StyleName);
|
||||
Function AutoFitBehavior(Behavior);
|
||||
Function AutoFormat(Format, ApplyBorders, ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit);
|
||||
@@ -22,6 +24,7 @@ public
|
||||
Function Split(BeforeRow);
|
||||
Function UpdateAutoFormat();
|
||||
|
||||
// Properties
|
||||
property AllowAutoFit read ReadAllowAutoFit write WriteAllowAutoFit;
|
||||
property ApplyStyleColumnBands read ReadApplyStyleColumnBands write WriteApplyStyleColumnBands;
|
||||
property ApplyStyleFirstColumn read ReadApplyStyleFirstColumn write WriteApplyStyleFirstColumn;
|
||||
@@ -105,91 +108,98 @@ Function TSDocxTable.Init(docx, table);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
table_ := table;
|
||||
range_ := nil;
|
||||
End;
|
||||
|
||||
// function
|
||||
Function TSDocxTable.ApplyStyleDirectFormatting(StyleName);
|
||||
Begin
|
||||
table_.TblPr.StyleId := docx_.StyleObject().GetStyle(StyleName).Value('StyleId');
|
||||
table_.Apply();
|
||||
table_.TblPr.Update();
|
||||
End;
|
||||
|
||||
Function TSDocxTable.AutoFitBehavior(Behavior);
|
||||
Begin
|
||||
// TODO : 这里应该使用递归去处理每个单元格
|
||||
// TODO : 等cell方法完善
|
||||
case Behavior of
|
||||
TSDocxEnumerations.wdAutoFitContent():
|
||||
begin
|
||||
table_.TblPr.WidthType := "auto";
|
||||
table_.TblPr.Width := 0;
|
||||
table_.TblApply();
|
||||
col := table_.Cols();
|
||||
row := table_.Rows();
|
||||
for i:=1 to row do
|
||||
begin
|
||||
for j:=1 to col do
|
||||
begin
|
||||
cell := table_.Cell(i, j);
|
||||
cell.TcPr.Type := "auto";
|
||||
cell.TcPr.Width := 0;
|
||||
cell.Apply();
|
||||
end
|
||||
end
|
||||
pr_width_type := "auto";
|
||||
pr_width_value := 0;
|
||||
width_value := 0;
|
||||
width_type := "auto";
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdAutoFitFixed():
|
||||
begin
|
||||
// 需要搞懂算法
|
||||
pr_width_type := "dxa";
|
||||
pr_width_value := 0;
|
||||
end
|
||||
|
||||
TSDocxEnumerations.wdAutoFitWindow():
|
||||
begin
|
||||
table_.TblPr.WidthType := "pct";
|
||||
table_.TblPr.Width := 5000;
|
||||
table_.Apply();
|
||||
pr_width_type := "pct";
|
||||
pr_width_value := 5000;
|
||||
width_type := "pct";
|
||||
width_value := integer(5000 / table_.Cols());
|
||||
end
|
||||
End;
|
||||
table_.TblPr.WidthType := pr_width_type;
|
||||
table_.TblPr.Width := pr_width_value;
|
||||
table_.TblPr.Update();
|
||||
|
||||
for r:=1 to table_.Rows() do
|
||||
begin
|
||||
for c:=1 to table_.Cols() do
|
||||
begin
|
||||
cel := table_.GetCell(r, c);
|
||||
if ifnil(cel) then return nil;
|
||||
tcpr_node := class(TSXml).GetNode(cel[0], "w:tcPr", "first");
|
||||
tcpr := TOfficeObj("TwTcPr");
|
||||
tcpr.InitRootNode(tcpr_node);
|
||||
tcpr.Width := width_value;
|
||||
tcpr.Type := width_type;
|
||||
tcpr.Update();
|
||||
end
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxTable.Cell(Row, Column);
|
||||
Begin
|
||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self);
|
||||
cell_obj.Init(table_, Row, Column);
|
||||
cell_obj.Init(docx_, table_, Row, Column);
|
||||
return cell_obj;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxTable.ReadBorders(index);
|
||||
Begin
|
||||
borders_obj := new TSDocxBordersTable(self.Application, self.Creator, self);
|
||||
borders_obj := new TSDocxBordersTable(self.Application, self.Creator, self.Parent);
|
||||
borders_obj.Init(table_);
|
||||
return ifnil(index) ? borders_obj : borders_obj[index];
|
||||
End;
|
||||
|
||||
Function TSDocxTable.ReadColumns(index);
|
||||
Begin
|
||||
columns_obj := new TSDocxColumns(self.Application, self.Creator, self);
|
||||
columns_obj.Init(table);
|
||||
columns_obj := new TSDocxColumns(self.Application, self.Creator, self.Parent);
|
||||
columns_obj.Init(table_);
|
||||
return ifnil(index) ? columns_obj : columns_obj[index];
|
||||
End;
|
||||
|
||||
Function TSDocxTable.ReadRows(index);
|
||||
Begin
|
||||
rows_obj := new TSDocxRows(self.Application, self.Creator, self);
|
||||
rows_obj := new TSDocxRows(self.Application, self.Creator, self.Parent);
|
||||
rows_obj.Init(table_);
|
||||
return ifnil(index) ? rows_obj : rows_obj[index];
|
||||
End;
|
||||
|
||||
Function TSDocxTable.WritePreferredWidthType(value);
|
||||
Begin
|
||||
End;
|
||||
Function TSDocxTable.ReadPreferredWidthType();
|
||||
Begin
|
||||
End;
|
||||
|
||||
Function TSDocxTable.WritePreferredWidth(value);
|
||||
Begin
|
||||
End;
|
||||
Function TSDocxTable.ReadPreferredWidth();
|
||||
Function TSDocxTable.ReadRange();
|
||||
Begin
|
||||
if ifnil(range_) then
|
||||
begin
|
||||
obj := new TSWdRange(docx_.Body().Root(), table_.Root());
|
||||
range_ := new TSDocxRange(self.Application, self.Creator, self);
|
||||
range_.Init(docx_, obj);
|
||||
end
|
||||
return range_;
|
||||
End;
|
||||
|
||||
+24
-2
@@ -1,4 +1,5 @@
|
||||
Type TSDocxTables = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(docx);
|
||||
@@ -8,9 +9,11 @@ private
|
||||
docx_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior);
|
||||
Function Item(Index);
|
||||
|
||||
// Properties
|
||||
property Count read ReadCount;
|
||||
property NestingLevel read ReadNestingLevel;
|
||||
Function ReadNestingLevel();
|
||||
@@ -32,14 +35,33 @@ Begin
|
||||
return table_obj;
|
||||
End;
|
||||
|
||||
// function
|
||||
// Methods
|
||||
Function TSDocxTables.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior);
|
||||
Begin
|
||||
table := Range.AddTable(NumRows, NumColumns);
|
||||
table_obj := new TSDocxTable(self.Application, self.Creator, self);
|
||||
table_obj.Init(docx_, table);
|
||||
if ifnil(DefaultTableBehavior) then DefaultTableBehavior := TSDocxEnumerations.wdWord8TableBehavior();
|
||||
if DefaultTableBehavior = TSDocxEnumerations.wdWord8TableBehavior() then
|
||||
begin
|
||||
root := table.Root();
|
||||
tplpr := root.FirstChildElement("w:tblPr");
|
||||
style := tplpr.FirstChildElement("w:tblStyle");
|
||||
if style then tplpr.DeleteChild(style);
|
||||
end
|
||||
if ifnil(AutoFitBehavior) then AutoFitBehavior := TSDocxEnumerations.wdAutoFitContent();
|
||||
table_obj.AutoFitBehavior(AutoFitBehavior);
|
||||
return table_obj;
|
||||
End;
|
||||
|
||||
Function TSDocxTables.Item(Index);
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
|
||||
// property
|
||||
// Properties
|
||||
Function TSDocxTables.ReadCount();
|
||||
Begin
|
||||
return docx_.TablesCount();
|
||||
End;
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
Type TSDocxTablesOfContents = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(docx);
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Add(Range, UseHeadingStyles, UpperHeadingLevel, LowerHeadingLevel, UseFields, TableID, RightAlignPageNumbers, IncludePageNumbers, AddedStyles, UseHyperlinks, HidePageNumbersInWeb, UseOutlineLevels);
|
||||
Function Item(Index);
|
||||
Function MarkEntry(Range, Entry, EntryAutoText, TableID, Level);
|
||||
|
||||
// Properties
|
||||
property Count read ReadCount;
|
||||
property Format read ReadFormat write WriteFormat;
|
||||
Function WriteFormat(value);
|
||||
Function ReadFormat();
|
||||
Function ReadCount();
|
||||
|
||||
private
|
||||
docx_;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxTablesOfContents.Init(docx);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
End;
|
||||
|
||||
|
||||
// Methods
|
||||
Function TSDocxTablesOfContents.Add(Range, UseHeadingStyles, UpperHeadingLevel, LowerHeadingLevel, UseFields, TableID, RightAlignPageNumbers, IncludePageNumbers, AddedStyles, UseHyperlinks, HidePageNumbersInWeb, UseOutlineLevels);
|
||||
Begin
|
||||
paragraph := Range.InsertNewParagraph();
|
||||
if ifnil(UpperHeadingLevel) then UpperHeadingLevel := 1;
|
||||
if ifnil(LowerHeadingLevel) then LowerHeadingLevel := 9;
|
||||
docx_.AddTableContent(paragraph.Object(), UpperHeadingLevel, LowerHeadingLevel);
|
||||
paragraph.Range.Clear(True);
|
||||
End;
|
||||
@@ -0,0 +1,446 @@
|
||||
Type TSDocxBorder = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(borders);
|
||||
Function Apply();virtual;
|
||||
|
||||
protected
|
||||
border_;
|
||||
color_;
|
||||
color_index_;
|
||||
|
||||
public
|
||||
// Properties
|
||||
property ArtStyle read ReadArtStyle write WriteArtStyle;
|
||||
property ArtWidth read ReadArtWidth write WriteArtWidth;
|
||||
property Color read ReadColor write WriteColor;
|
||||
property ColorIndex read ReadColorIndex write WriteColorIndex;
|
||||
property Inside read ReadInside;
|
||||
property LineStyle read ReadLineStyle write WriteLineStyle;
|
||||
property LineWidth read ReadLineWidth write WriteLineWidth;
|
||||
property Visible read ReadVisible write WriteVisible;
|
||||
Function WriteVisible(value);virtual;
|
||||
Function ReadVisible();virtual;
|
||||
Function WriteLineWidth(value);virtual;
|
||||
Function ReadLineWidth();virtual;
|
||||
Function WriteLineStyle(value);virtual;
|
||||
Function ReadLineStyle();virtual;
|
||||
Function ReadInside();virtual; // don't complete
|
||||
Function WriteColorIndex(value);virtual;
|
||||
Function ReadColorIndex();virtual;
|
||||
Function WriteColor(value);virtual;
|
||||
Function ReadColor();virtual;
|
||||
Function WriteArtWidth(value);virtual;
|
||||
Function ReadArtWidth();virtual;
|
||||
Function WriteArtStyle(value);virtual;
|
||||
Function ReadArtStyle();virtual;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBorder.Init(border);
|
||||
Begin
|
||||
border_ := border;
|
||||
color_index_ := TSWdColorIndex();
|
||||
color_ := TSWdColor();
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.Apply();virtual;
|
||||
Begin
|
||||
border_.Update("first");
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxBorder.WriteArtStyle(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdArtApples():
|
||||
border_.Val := "apples";
|
||||
// TSDocxEnumerations.wdArtArchedScallops():
|
||||
// TSDocxEnumerations.wdArtBabyPacifier():
|
||||
// TSDocxEnumerations.wdArtBabyRattle():
|
||||
// TSDocxEnumerations.wdArtBalloons3Colors():
|
||||
// TSDocxEnumerations.wdArtBalloonsHotAir():
|
||||
// TSDocxEnumerations.wdArtBasicBlackDashes():
|
||||
// TSDocxEnumerations.wdArtBasicBlackDots():
|
||||
// TSDocxEnumerations.wdArtBasicBlackSquares():
|
||||
// TSDocxEnumerations.wdArtBasicThinLines():
|
||||
// TSDocxEnumerations.wdArtBasicWhiteDashes():
|
||||
// TSDocxEnumerations.wdArtBasicWhiteDots():
|
||||
// TSDocxEnumerations.wdArtBasicWhiteSquares():
|
||||
// TSDocxEnumerations.wdArtBasicWideInline():
|
||||
// TSDocxEnumerations.wdArtBasicWideMidline():
|
||||
// TSDocxEnumerations.wdArtBasicWideOutline():
|
||||
// TSDocxEnumerations.wdArtBats():
|
||||
// TSDocxEnumerations.wdArtBirds():
|
||||
// TSDocxEnumerations.wdArtBirdsFlight():
|
||||
// TSDocxEnumerations.wdArtCabins():
|
||||
// TSDocxEnumerations.wdArtCakeSlice():
|
||||
// TSDocxEnumerations.wdArtCandyCorn():
|
||||
// TSDocxEnumerations.wdArtCelticKnotwork():
|
||||
// TSDocxEnumerations.wdArtCertificateBanner():
|
||||
// TSDocxEnumerations.wdArtChainLink():
|
||||
// TSDocxEnumerations.wdArtChampagneBottle():
|
||||
// TSDocxEnumerations.wdArtCheckedBarBlack():
|
||||
// TSDocxEnumerations.wdArtCheckedBarColor():
|
||||
// TSDocxEnumerations.wdArtCheckered():
|
||||
// TSDocxEnumerations.wdArtChristmasTree():
|
||||
// TSDocxEnumerations.wdArtCirclesLines():
|
||||
// TSDocxEnumerations.wdArtCirclesRectangles():
|
||||
// TSDocxEnumerations.wdArtClassicalWave():
|
||||
// TSDocxEnumerations.wdArtClocks():
|
||||
// TSDocxEnumerations.wdArtCompass():
|
||||
// TSDocxEnumerations.wdArtConfetti():
|
||||
// TSDocxEnumerations.wdArtConfettiGrays():
|
||||
// TSDocxEnumerations.wdArtConfettiOutline():
|
||||
// TSDocxEnumerations.wdArtConfettiStreamers():
|
||||
// TSDocxEnumerations.wdArtConfettiWhite():
|
||||
// TSDocxEnumerations.wdArtCornerTriangles():
|
||||
// TSDocxEnumerations.wdArtCouponCutoutDashes():
|
||||
// TSDocxEnumerations.wdArtCouponCutoutDots():
|
||||
// TSDocxEnumerations.wdArtCrazyMaze():
|
||||
// TSDocxEnumerations.wdArtCreaturesButterfly():
|
||||
// TSDocxEnumerations.wdArtCreaturesFish():
|
||||
// TSDocxEnumerations.wdArtCreaturesInsects():
|
||||
// TSDocxEnumerations.wdArtCreaturesLadyBug():
|
||||
// TSDocxEnumerations.wdArtCrossStitch():
|
||||
// TSDocxEnumerations.wdArtCup():
|
||||
// TSDocxEnumerations.wdArtDecoArch():
|
||||
// TSDocxEnumerations.wdArtDecoArchColor():
|
||||
// TSDocxEnumerations.wdArtDecoBlocks():
|
||||
// TSDocxEnumerations.wdArtDiamondsGray():
|
||||
// TSDocxEnumerations.wdArtDoubleD():
|
||||
// TSDocxEnumerations.wdArtDoubleDiamonds():
|
||||
// TSDocxEnumerations.wdArtEarth1():
|
||||
// TSDocxEnumerations.wdArtEarth2():
|
||||
// TSDocxEnumerations.wdArtEclipsingSquares1():
|
||||
// TSDocxEnumerations.wdArtEclipsingSquares2():
|
||||
// TSDocxEnumerations.wdArtEggsBlack():
|
||||
// TSDocxEnumerations.wdArtFans():
|
||||
// TSDocxEnumerations.wdArtFilm():
|
||||
// TSDocxEnumerations.wdArtFirecrackers():
|
||||
// TSDocxEnumerations.wdArtFlowersBlockPrint():
|
||||
// TSDocxEnumerations.wdArtFlowersDaisies():
|
||||
// TSDocxEnumerations.wdArtFlowersModern1():
|
||||
// TSDocxEnumerations.wdArtFlowersModern2():
|
||||
// TSDocxEnumerations.wdArtFlowersPansy():
|
||||
// TSDocxEnumerations.wdArtFlowersRedRose():
|
||||
// TSDocxEnumerations.wdArtFlowersRoses():
|
||||
// TSDocxEnumerations.wdArtFlowersTeacup():
|
||||
// TSDocxEnumerations.wdArtFlowersTiny():
|
||||
// TSDocxEnumerations.wdArtGems():
|
||||
// TSDocxEnumerations.wdArtGingerbreadMan():
|
||||
// TSDocxEnumerations.wdArtGradient():
|
||||
// TSDocxEnumerations.wdArtHandmade1():
|
||||
// TSDocxEnumerations.wdArtHandmade2():
|
||||
// TSDocxEnumerations.wdArtHeartBalloon():
|
||||
// TSDocxEnumerations.wdArtHeartGray():
|
||||
// TSDocxEnumerations.wdArtHearts():
|
||||
// TSDocxEnumerations.wdArtHeebieJeebies():
|
||||
// TSDocxEnumerations.wdArtHolly():
|
||||
// TSDocxEnumerations.wdArtHouseFunky():
|
||||
// TSDocxEnumerations.wdArtHypnotic():
|
||||
// TSDocxEnumerations.wdArtIceCreamCones():
|
||||
// TSDocxEnumerations.wdArtLightBulb():
|
||||
// TSDocxEnumerations.wdArtLightning1():
|
||||
// TSDocxEnumerations.wdArtLightning2():
|
||||
// TSDocxEnumerations.wdArtMapleLeaf():
|
||||
// TSDocxEnumerations.wdArtMapleMuffins():
|
||||
// TSDocxEnumerations.wdArtMapPins():
|
||||
// TSDocxEnumerations.wdArtMarquee():
|
||||
// TSDocxEnumerations.wdArtMarqueeToothed():
|
||||
// TSDocxEnumerations.wdArtMoons():
|
||||
// TSDocxEnumerations.wdArtMosaic():
|
||||
// TSDocxEnumerations.wdArtMusicNotes():
|
||||
// TSDocxEnumerations.wdArtNorthwest():
|
||||
// TSDocxEnumerations.wdArtOvals():
|
||||
// TSDocxEnumerations.wdArtPackages():
|
||||
// TSDocxEnumerations.wdArtPalmsBlack():
|
||||
// TSDocxEnumerations.wdArtPalmsColor():
|
||||
// TSDocxEnumerations.wdArtPaperClips():
|
||||
// TSDocxEnumerations.wdArtPapyrus():
|
||||
// TSDocxEnumerations.wdArtPartyFavor():
|
||||
// TSDocxEnumerations.wdArtPartyGlass():
|
||||
// TSDocxEnumerations.wdArtPencils():
|
||||
// TSDocxEnumerations.wdArtPeople():
|
||||
// TSDocxEnumerations.wdArtPeopleHats():
|
||||
// TSDocxEnumerations.wdArtPeopleWaving():
|
||||
// TSDocxEnumerations.wdArtPoinsettias():
|
||||
// TSDocxEnumerations.wdArtPostageStamp():
|
||||
// TSDocxEnumerations.wdArtPumpkin1():
|
||||
// TSDocxEnumerations.wdArtPushPinNote1():
|
||||
// TSDocxEnumerations.wdArtPushPinNote2():
|
||||
// TSDocxEnumerations.wdArtPyramids():
|
||||
// TSDocxEnumerations.wdArtPyramidsAbove():
|
||||
// TSDocxEnumerations.wdArtQuadrants():
|
||||
// TSDocxEnumerations.wdArtRings():
|
||||
// TSDocxEnumerations.wdArtSafari():
|
||||
// TSDocxEnumerations.wdArtSawtooth():
|
||||
// TSDocxEnumerations.wdArtSawtoothGray():
|
||||
// TSDocxEnumerations.wdArtScaredCat():
|
||||
// TSDocxEnumerations.wdArtSeattle():
|
||||
// TSDocxEnumerations.wdArtShadowedSquares():
|
||||
// TSDocxEnumerations.wdArtSharksTeeth():
|
||||
// TSDocxEnumerations.wdArtShorebirdTracks():
|
||||
// TSDocxEnumerations.wdArtSkyrocket():
|
||||
// TSDocxEnumerations.wdArtSnowflakeFancy():
|
||||
// TSDocxEnumerations.wdArtSnowflakes():
|
||||
// TSDocxEnumerations.wdArtSombrero():
|
||||
// TSDocxEnumerations.wdArtSouthwest():
|
||||
// TSDocxEnumerations.wdArtStars():
|
||||
// TSDocxEnumerations.wdArtStars3D():
|
||||
// TSDocxEnumerations.wdArtStarsBlack():
|
||||
// TSDocxEnumerations.wdArtStarsShadowed():
|
||||
// TSDocxEnumerations.wdArtStarsTop():
|
||||
// TSDocxEnumerations.wdArtSun():
|
||||
// TSDocxEnumerations.wdArtSwirligig():
|
||||
// TSDocxEnumerations.wdArtTornPaper():
|
||||
// TSDocxEnumerations.wdArtTornPaperBlack():
|
||||
// TSDocxEnumerations.wdArtTrees():
|
||||
// TSDocxEnumerations.wdArtTriangleParty():
|
||||
// TSDocxEnumerations.wdArtTriangles():
|
||||
// TSDocxEnumerations.wdArtTribal1():
|
||||
// TSDocxEnumerations.wdArtTribal2():
|
||||
// TSDocxEnumerations.wdArtTribal3():
|
||||
// TSDocxEnumerations.wdArtTribal4():
|
||||
// TSDocxEnumerations.wdArtTribal5():
|
||||
// TSDocxEnumerations.wdArtTribal6():
|
||||
// TSDocxEnumerations.wdArtTwistedLines1():
|
||||
// TSDocxEnumerations.wdArtTwistedLines2():
|
||||
// TSDocxEnumerations.wdArtVine():
|
||||
// TSDocxEnumerations.wdArtWaveline():
|
||||
// TSDocxEnumerations.wdArtWeavingAngles():
|
||||
// TSDocxEnumerations.wdArtWeavingBraid():
|
||||
// TSDocxEnumerations.wdArtWeavingRibbon():
|
||||
// TSDocxEnumerations.wdArtWeavingStrips():
|
||||
// TSDocxEnumerations.wdArtWhiteFlowers():
|
||||
// TSDocxEnumerations.wdArtWoodwork():
|
||||
// TSDocxEnumerations.wdArtXIllusions():
|
||||
// TSDocxEnumerations.wdArtZanyTriangles():
|
||||
// TSDocxEnumerations.wdArtZigZag():
|
||||
// TSDocxEnumerations.wdArtZigZagStitch():
|
||||
end;
|
||||
End;
|
||||
Function TSDocxBorder.ReadArtStyle();virtual;
|
||||
Begin
|
||||
value := border_.Value("Val");
|
||||
case value of
|
||||
"apples": return TSDocxEnumerations.wdArtApples();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.WriteArtWidth(value);virtual;
|
||||
Begin
|
||||
border_.Size := value;
|
||||
End;
|
||||
Function TSDocxBorder.ReadArtWidth();virtual;
|
||||
Begin
|
||||
return border_.Value("Size");
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.WriteColor(value);virtual;
|
||||
Begin
|
||||
border_.Color := color_[value];
|
||||
End;
|
||||
Function TSDocxBorder.ReadColor();virtual;
|
||||
Begin
|
||||
return color_[border_.Value("Color")];
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.WriteColorIndex(value);virtual;
|
||||
Begin
|
||||
color_index := color_index_[value];
|
||||
if ifnil(color_index) then border_.Root().DeleteAttribute("w:color");
|
||||
else begin
|
||||
border_.Color := color_index;
|
||||
end
|
||||
End;
|
||||
Function TSDocxBorder.ReadColorIndex();virtual;
|
||||
Begin
|
||||
return color_index_[border_.Value("Color")];
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.WriteLineStyle(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdLineStyleDashDot():
|
||||
border_.Val := "dotDash";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashDotDot():
|
||||
border_.Val := "dotDotDash";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashDotStroked():
|
||||
border_.Val := "dashDotStroked";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashLargeGap():
|
||||
border_.Val := "dashed";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDashSmallGap():
|
||||
border_.Val := "dashSmallGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDot():
|
||||
border_.Val := "dotted";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDouble():
|
||||
border_.Val := "double";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleDoubleWavy():
|
||||
border_.Val := "doubleWave";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleEmboss3D():
|
||||
border_.Val := "threeDEmboss";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleEngrave3D():
|
||||
border_.Val := "threeDEngrave";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleInset():
|
||||
border_.Val := "inset";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleNone():
|
||||
border_.Val := "none";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleOutset():
|
||||
border_.Val := "outset";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleSingle():
|
||||
border_.Val := "single";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleSingleWavy():
|
||||
border_.Val := "wave";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThickThinLargeGap():
|
||||
border_.Val := "thickThinLargeGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThickThinMedGap():
|
||||
border_.Val := "thickThinMediumGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThickThinSmallGap():
|
||||
border_.Val := "thickThinSmallGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickLargeGap():
|
||||
border_.Val := "thinThickLargeGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickMedGap():
|
||||
border_.Val := "thinThickMediumGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickSmallGap():
|
||||
border_.Val := "thinThickSmallGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickThinLargeGap():
|
||||
border_.Val := "thinThickThinLargeGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickThinMedGap():
|
||||
border_.Val := "thinThickThinMediumGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleThinThickThinSmallGap():
|
||||
border_.Val := "thinThickThinSmallGap";
|
||||
|
||||
TSDocxEnumerations.wdLineStyleTriple():
|
||||
border_.Val := "triple";
|
||||
|
||||
end;
|
||||
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.ReadLineStyle();virtual;
|
||||
Begin
|
||||
value := border_.Value("Val");
|
||||
case value of
|
||||
"dotDash":
|
||||
return TSDocxEnumerations.wdLineStyleDashDot();
|
||||
|
||||
"dotDotDash":
|
||||
return TSDocxEnumerations.wdLineStyleDashDotDot();
|
||||
|
||||
"dashDotStroked":
|
||||
return TSDocxEnumerations.wdLineStyleDashDotStroked();
|
||||
|
||||
"dashed":
|
||||
return TSDocxEnumerations.wdLineStyleDashLargeGap();
|
||||
|
||||
"dashSmallGap":
|
||||
return TSDocxEnumerations.wdLineStyleDashSmallGap();
|
||||
|
||||
"dotted":
|
||||
return TSDocxEnumerations.wdLineStyleDot();
|
||||
|
||||
"double":
|
||||
return TSDocxEnumerations.wdLineStyleDouble();
|
||||
|
||||
"doubleWave":
|
||||
return TSDocxEnumerations.wdLineStyleDoubleWavy();
|
||||
|
||||
"threeDEmboss":
|
||||
return TSDocxEnumerations.wdLineStyleEmboss3D();
|
||||
|
||||
"threeDEngrave":
|
||||
return TSDocxEnumerations.wdLineStyleEngrave3D();
|
||||
|
||||
"inset":
|
||||
return TSDocxEnumerations.wdLineStyleInset();
|
||||
|
||||
"none":
|
||||
return TSDocxEnumerations.wdLineStyleNone();
|
||||
|
||||
"outset":
|
||||
return TSDocxEnumerations.wdLineStyleOutset();
|
||||
|
||||
"single":
|
||||
return TSDocxEnumerations.wdLineStyleSingle();
|
||||
|
||||
"wave":
|
||||
return TSDocxEnumerations.wdLineStyleSingleWavy();
|
||||
|
||||
"thickThinLargeGap":
|
||||
return TSDocxEnumerations.wdLineStyleThickThinLargeGap();
|
||||
|
||||
"thickThinMediumGap":
|
||||
return TSDocxEnumerations.wdLineStyleThickThinMedGap();
|
||||
|
||||
"thickThinSmallGap":
|
||||
return TSDocxEnumerations.wdLineStyleThickThinSmallGap();
|
||||
|
||||
"thinThickLargeGap":
|
||||
return TSDocxEnumerations.wdLineStyleThinThickLargeGap();
|
||||
|
||||
"thinThickMediumGap":
|
||||
return TSDocxEnumerations.wdLineStyleThinThickMedGap();
|
||||
|
||||
"thinThickSmallGap":
|
||||
return TSDocxEnumerations.wdLineStyleThinThickSmallGap();
|
||||
|
||||
"thinThickThinLargeGap":
|
||||
return TSDocxEnumerations.wdLineStyleThinThickThinLargeGap();
|
||||
|
||||
"thinThickThinMediumGap":
|
||||
return TSDocxEnumerations.wdLineStyleThinThickThinMedGap();
|
||||
|
||||
"thinThickThinSmallGap":
|
||||
return TSDocxEnumerations.wdLineStyleThinThickThinSmallGap();
|
||||
|
||||
"triple":
|
||||
return TSDocxEnumerations.wdLineStyleTriple();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.WriteLineWidth(value);virtual;
|
||||
Begin
|
||||
border_.Size := value;
|
||||
End;
|
||||
Function TSDocxBorder.ReadLineWidth();virtual;
|
||||
Begin
|
||||
return border_.Value("Size");
|
||||
End;
|
||||
|
||||
Function TSDocxBorder.WriteVisible(value);virtual;
|
||||
Begin
|
||||
v := value ? "single" : "nil";
|
||||
border_.Val := v;
|
||||
End;
|
||||
Function TSDocxBorder.ReadVisible();virtual;
|
||||
Begin
|
||||
value := border_.Value("Val");
|
||||
return value = "nil" ? false : true;
|
||||
End;
|
||||
@@ -0,0 +1,192 @@
|
||||
Type TSDocxBorderRange = Class(TSDocxBorder)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(rangeObj, borderType);
|
||||
Function Apply();override;
|
||||
|
||||
private
|
||||
Function GetBorderObjectByNode(node);
|
||||
Function GetBorder(arr, hash);
|
||||
Function CallFunction(fname, value);overload;
|
||||
Function CallFunction(fname);overload;
|
||||
Function SplitRun();
|
||||
|
||||
private
|
||||
range_obj_;
|
||||
border_type_;
|
||||
|
||||
public
|
||||
Function WriteVisible(value);override;
|
||||
Function ReadVisible();override;
|
||||
Function WriteLineWidth(value);override;
|
||||
Function ReadLineWidth();override;
|
||||
Function WriteLineStyle(value);override;
|
||||
Function ReadLineStyle();override;
|
||||
Function WriteColorIndex(value);override;
|
||||
Function ReadColorIndex();override;
|
||||
Function WriteColor(value);override;
|
||||
Function ReadColor();override;
|
||||
Function WriteArtWidth(value);override;
|
||||
Function ReadArtWidth();override;
|
||||
Function WriteArtStyle(value);override;
|
||||
Function ReadArtStyle();override;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBorderRange.Init(rangeObj, borderType);
|
||||
Begin
|
||||
range_obj_ := rangeObj;
|
||||
border_type_ := borderType;
|
||||
class(TSDocxBorder).Init(nil);
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.Apply();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxBorder).Apply));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.SplitRun();
|
||||
Begin
|
||||
range_obj_.SplitRangeRun();
|
||||
self.Parent.SetRangeObj(range_obj_);
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.GetBorder(arr, hash);
|
||||
Begin
|
||||
if arr.Entirety then
|
||||
begin
|
||||
if not ifnil(hash[arr.Entirety]) then nil;
|
||||
hash[arr.Entirety] := true;
|
||||
border := GetBorderObjectByNode(arr.Entirety);
|
||||
end
|
||||
else begin
|
||||
trun := arr.TRun;
|
||||
if not ifObj(trun.Root()) then return nil;
|
||||
border := new TSDocxBorder(self.Application, self.Creator, self.Parent);
|
||||
border.Init(trun.rPr.Bdr);
|
||||
end
|
||||
return border;
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.GetBorderObjectByNode(node);
|
||||
Begin
|
||||
name := node.GetName();
|
||||
if name = "w:p" then
|
||||
begin
|
||||
obj := TOfficeObj("TParagraph");
|
||||
obj.Init(node);
|
||||
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
||||
paragraph_obj.Init(nil, obj, nil);
|
||||
return paragraph_obj.Borders(border_type_);
|
||||
end
|
||||
else if name = "w:tbl" then
|
||||
begin
|
||||
obj := TOfficeObj("TTable");
|
||||
obj.Init(node);
|
||||
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
|
||||
table_obj.Init(nil, obj);
|
||||
return table_obj.Borders(border_type_);
|
||||
end
|
||||
else if name = "w:tc" then
|
||||
begin
|
||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
||||
cell_obj.Init(node);
|
||||
return cell_obj.Borders(border_type_);
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.CallFunction(fname, value);overload;
|
||||
Begin
|
||||
SplitRun();
|
||||
hash := array();
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
border := GetBorder(range_obj_[i], hash);
|
||||
if ifnil(border) then continue;
|
||||
pf := FindFunction(fname, border);
|
||||
pf.Do(value);
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.CallFunction(fname);overload;
|
||||
Begin
|
||||
hash := array();
|
||||
ret := nil;
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
border := GetBorder(range_obj_[i], hash);
|
||||
if ifnil(border) then continue;
|
||||
pf := FindFunction(fname, border);
|
||||
r := pf.Do();
|
||||
if ifnil(ret) then ret := r;
|
||||
if ret <> r then return TSDocxEnumerations.WdUnderline();
|
||||
end
|
||||
return ret;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxBorderRange.WriteVisible(value);override;
|
||||
Begin
|
||||
CallFunction("WriteVisible", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadVisible();override;
|
||||
Begin
|
||||
return CallFunction("ReadVisible");
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.WriteLineWidth(value);override;
|
||||
Begin
|
||||
CallFunction("WriteLineWidth", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadLineWidth();override;
|
||||
Begin
|
||||
return CallFunction("ReadLineWidth");
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.WriteLineStyle(value);override;
|
||||
Begin
|
||||
CallFunction("WriteLineStyle", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadLineStyle();override;
|
||||
Begin
|
||||
return CallFunction("ReadLineStyle");
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.WriteColorIndex(value);override;
|
||||
Begin
|
||||
CallFunction("WriteColorIndex", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadColorIndex();override;
|
||||
Begin
|
||||
return CallFunction("ReadColorIndex");
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.WriteColor(value);override;
|
||||
Begin
|
||||
CallFunction("WriteColor", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadColor();override;
|
||||
Begin
|
||||
return CallFunction("ReadColor");
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.WriteArtWidth(value);override;
|
||||
Begin
|
||||
CallFunction("WriteArtWidth", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadArtWidth();override;
|
||||
Begin
|
||||
return CallFunction("ReadArtWidth");
|
||||
End;
|
||||
|
||||
Function TSDocxBorderRange.WriteArtStyle(value);override;
|
||||
Begin
|
||||
CallFunction("WriteArtStyle", value);
|
||||
End;
|
||||
Function TSDocxBorderRange.ReadArtStyle();override;
|
||||
Begin
|
||||
return CallFunction("ReadArtStyle");
|
||||
End;
|
||||
@@ -0,0 +1,188 @@
|
||||
Type TSDocxBorderTable = Class(TSDocxBorder)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(table, borderType);
|
||||
|
||||
private
|
||||
Function CallFunction(pf, value);overload;
|
||||
Function CallFunction(pf);overload;
|
||||
|
||||
public
|
||||
Function WriteVisible(value);override;
|
||||
Function ReadVisible();override;
|
||||
Function WriteLineWidth(value);override;
|
||||
Function ReadLineWidth();override;
|
||||
Function WriteLineStyle(value);override;
|
||||
Function ReadLineStyle();override;
|
||||
Function WriteColorIndex(value);override;
|
||||
Function ReadColorIndex();override;
|
||||
Function WriteColor(value);override;
|
||||
Function ReadColor();override;
|
||||
Function WriteArtWidth(value);override;
|
||||
Function ReadArtWidth();override;
|
||||
Function WriteArtStyle(value);override;
|
||||
Function ReadArtStyle();override;
|
||||
|
||||
private
|
||||
table_;
|
||||
border_type_;
|
||||
cell_border_; // 对角线只需要处理cell
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBorderTable.Init(table, borderType);
|
||||
Begin
|
||||
table_ := table;
|
||||
border_type_ := borderType;
|
||||
cell_border_ := false;
|
||||
class(TSDocxBorder).Init(nil);
|
||||
|
||||
case border_type_ of
|
||||
TSDocxEnumerations.wdBorderBottom():
|
||||
border_ := table_.TblPr.Borders.Bottom;
|
||||
TSDocxEnumerations.wdBorderHorizontal():
|
||||
border_ := table_.TblPr.Borders.InsideH;
|
||||
TSDocxEnumerations.wdBorderLeft():
|
||||
border_ := table_.TblPr.Borders.Left;
|
||||
TSDocxEnumerations.wdBorderRight():
|
||||
border_ := table_.TblPr.Borders.Right;
|
||||
TSDocxEnumerations.wdBorderTop():
|
||||
border_ := table_.TblPr.Borders.Top;
|
||||
TSDocxEnumerations.wdBorderVertical():
|
||||
border_ := table_.TblPr.Borders.InsideV;
|
||||
|
||||
TSDocxEnumerations.wdBorderDiagonalDown(),
|
||||
TSDocxEnumerations.wdBorderDiagonalUp():
|
||||
cell_border_ := true;
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.CallFunction(pf, value);overload;
|
||||
Begin
|
||||
// 对角线时候只需要处理cell
|
||||
if cell_border_ then
|
||||
begin
|
||||
for r:=1 to table_.Rows() do
|
||||
begin
|
||||
for c:=1 to table_.Cols() do
|
||||
begin
|
||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
||||
cell_obj.Init(nil, table_, r, c);
|
||||
border := cell_obj.Borders(border_type_);
|
||||
fun := FindFunction(pf, border);
|
||||
fun.Do(value);
|
||||
end
|
||||
end
|
||||
end
|
||||
else begin
|
||||
##pf(value);
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.CallFunction(pf);overload;
|
||||
Begin
|
||||
ret := nil;
|
||||
cur := nil;
|
||||
if cell_border_ then
|
||||
begin
|
||||
for r:=1 to table_.Rows() do
|
||||
begin
|
||||
for c:=1 to table_.Cols() do
|
||||
begin
|
||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
||||
cell_obj.Init(nil, table_, r, c);
|
||||
border := cell_obj.Borders(border_type_);
|
||||
fun := FindFunction(pf, border);
|
||||
cur := fun.Do();
|
||||
if ifnil(ret) then ret := cur;
|
||||
if ret <> cur then return TSDocxEnumerations.wdUndefined();
|
||||
end
|
||||
end
|
||||
end
|
||||
else begin
|
||||
ret := ##pf();
|
||||
end
|
||||
return ret;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxBorderTable.WriteVisible(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteVisible", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteVisible), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadVisible();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadVisible");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadVisible));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.WriteLineWidth(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteLineWidth", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteLineWidth), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadLineWidth();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadLineWidth");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadLineWidth));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.WriteLineStyle(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteLineStyle", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteLineStyle), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadLineStyle();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadLineStyle");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadLineStyle));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.WriteColorIndex(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteColorIndex", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteColorIndex), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadColorIndex();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadColorIndex");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadColorIndex));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.WriteColor(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteColor", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteColor), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadColor();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadColor");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadColor));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.WriteArtWidth(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteArtWidth", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteArtWidth), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadArtWidth();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadArtWidth");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadArtWidth));
|
||||
End;
|
||||
|
||||
Function TSDocxBorderTable.WriteArtStyle(value);override;
|
||||
Begin
|
||||
if cell_border_ then CallFunction("WriteArtStyle", value);
|
||||
else CallFunction(ThisFunction(class(TSDocxBorder).WriteArtStyle), value);
|
||||
End;
|
||||
Function TSDocxBorderTable.ReadArtStyle();override;
|
||||
Begin
|
||||
if cell_border_ then return CallFunction("ReadArtStyle");
|
||||
else return CallFunction(ThisFunction(class(TSDocxBorder).ReadArtStyle));
|
||||
End;
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
Type TSDocxBorders = Class(TSVbaBase)
|
||||
|
||||
public
|
||||
Function Init(borders);
|
||||
Function Operator[](index);virtual;
|
||||
|
||||
private
|
||||
borders_;
|
||||
Function GetBorder(index);virtual;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function ApplyPageBordersToAllSections();
|
||||
Function Item(Index);
|
||||
Function Item(Index);virtual;
|
||||
|
||||
// Properties
|
||||
property AlwaysInFront read ReadAlwaysInFront write WriteAlwaysInFront;
|
||||
property Count read ReadCount;
|
||||
property DistanceFrom read ReadDistanceFrom write WriteDistanceFrom;
|
||||
@@ -85,22 +84,17 @@ End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBorders.Init(borders);
|
||||
Begin
|
||||
borders_ := borders;
|
||||
End;
|
||||
|
||||
Function Operator TSDocxBorders.[](index);virtual;
|
||||
Begin
|
||||
border_obj := new TSDocxBorder(self.Application, self.Creator, self);
|
||||
border_obj.Init(borders_, index);
|
||||
border_obj.Init(GetBorder(index));
|
||||
return border_obj;
|
||||
End;
|
||||
|
||||
// function
|
||||
Function TSDocxBorders.Item(Index);
|
||||
// Methods
|
||||
Function TSDocxBorders.Item(Index);virtual;
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
|
||||
// property
|
||||
// Properties
|
||||
@@ -0,0 +1,43 @@
|
||||
Type TSDocxBordersCell = Class(TSDocxBorders)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(cell);
|
||||
Function GetBorder(index);override;
|
||||
|
||||
private
|
||||
cell_;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBordersCell.Init(cell);
|
||||
Begin
|
||||
cell_ := cell;
|
||||
End;
|
||||
|
||||
Function TSDocxBordersCell.GetBorder(index);override;
|
||||
Begin
|
||||
obj := cell_.TcPr.Borders;
|
||||
case index of
|
||||
TSDocxEnumerations.wdBorderBottom():
|
||||
border := obj.Bottom;
|
||||
TSDocxEnumerations.wdBorderDiagonalDown():
|
||||
border := obj.tl2br;
|
||||
TSDocxEnumerations.wdBorderDiagonalUp():
|
||||
border := obj.tr2bl;
|
||||
TSDocxEnumerations.wdBorderHorizontal():
|
||||
border := obj.InsideH;
|
||||
TSDocxEnumerations.wdBorderLeft():
|
||||
border := obj.Left;
|
||||
TSDocxEnumerations.wdBorderRight():
|
||||
border := obj.Right;
|
||||
TSDocxEnumerations.wdBorderTop():
|
||||
border := obj.Top;
|
||||
TSDocxEnumerations.wdBorderVertical():
|
||||
border := obj.InsideV;
|
||||
end;
|
||||
return border;
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
Type TSDocxBordersParagraph = Class(TSDocxBorders)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(Paragraph);
|
||||
Function GetBorder(index);override;
|
||||
|
||||
private
|
||||
pr_; // TOfficeObj("TwpPr")
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBordersParagraph.Init(pr);
|
||||
Begin
|
||||
pr_ := pr;
|
||||
End;
|
||||
|
||||
Function TSDocxBordersParagraph.GetBorder(index);override;
|
||||
Begin
|
||||
obj := pr_.Bdr;
|
||||
case index of
|
||||
TSDocxEnumerations.wdBorderBottom():
|
||||
border := obj.Bottom;
|
||||
TSDocxEnumerations.wdBorderLeft():
|
||||
border := obj.Left;
|
||||
TSDocxEnumerations.wdBorderRight():
|
||||
border := obj.Right;
|
||||
TSDocxEnumerations.wdBorderTop():
|
||||
border := obj.Top;
|
||||
TSDocxEnumerations.wdBorderHorizontal():
|
||||
border := obj.Between;
|
||||
else
|
||||
raise "段落不支持该边框类型";
|
||||
end;
|
||||
return border;
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
Type TSDocxBordersRange = Class(TSDocxBorders)
|
||||
|
||||
public
|
||||
Function Init(rangeObj);
|
||||
Function Operator[](index);override;
|
||||
|
||||
private
|
||||
range_obj_;
|
||||
|
||||
public
|
||||
Function Item(Index);override;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxBordersRange.Init(rangeObj);
|
||||
Begin
|
||||
range_obj_ := rangeObj;
|
||||
End;
|
||||
|
||||
Function Operator TSDocxBordersRange.[](index);override;
|
||||
Begin
|
||||
border_obj := new TSDocxBorderRange(self.Application, self.Creator, self.Parent);
|
||||
border_obj.Init(range_obj_, index);
|
||||
return border_obj;
|
||||
End;
|
||||
|
||||
// function
|
||||
Function TSDocxBordersRange.Item(Index);override;
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
@@ -2,11 +2,14 @@ Type TSDocxBordersTable = Class(TSDocxBorders)
|
||||
|
||||
public
|
||||
Function Init(table);
|
||||
Function Operator[](index);overload;
|
||||
Function Operator[](index);override;
|
||||
|
||||
private
|
||||
table_;
|
||||
|
||||
public
|
||||
Function Item(inde);override;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
@@ -16,9 +19,14 @@ Begin
|
||||
table_ := table;
|
||||
End;
|
||||
|
||||
Function Operator TSDocxBordersTable.[](index);overload;
|
||||
Function Operator TSDocxBordersTable.[](index);override;
|
||||
Begin
|
||||
border_table_obj := new TSDocxBorderTable(self.Application, self.Creator, self.Parent);
|
||||
border_table_obj.Init(table_, index);
|
||||
return border_table_obj;
|
||||
End;
|
||||
|
||||
Function TSDocxBordersTable.Item(Index);override;
|
||||
Begin
|
||||
return self[Index];
|
||||
End;
|
||||
@@ -0,0 +1,734 @@
|
||||
Type TSDocxFont = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(pr);
|
||||
Function Apply();virtual;
|
||||
Function ReWrite(pr);virtual;
|
||||
|
||||
protected
|
||||
pr_;
|
||||
color_index_;
|
||||
color_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function Grow();virtual;
|
||||
Function Reset();virtual;
|
||||
Function SetAsTemplateDefault();virtual;
|
||||
Function Shrink();virtual;
|
||||
|
||||
// Properties
|
||||
property AllCaps read ReadAllCaps write WriteAllCaps;
|
||||
property Bold read ReadBold write WriteBold;
|
||||
property BoldBi read ReadBoldBi write WriteBoldBi;
|
||||
property Borders read ReadBorders;
|
||||
property Color read ReadColor write WriteColor;
|
||||
property ColorIndex read ReadColorIndex write WriteColorIndex;
|
||||
property ColorIndexBi read ReadColorIndexBi write WriteColorIndexBi;
|
||||
property ContextualAlternates read ReadContextualAlternates write WriteContextualAlternates;
|
||||
property DiacriticColor read ReadDiacriticColor write WriteDiacriticColor;
|
||||
property DisableCharacterSpaceGrid read ReadDisableCharacterSpaceGrid write WriteDisableCharacterSpaceGrid;
|
||||
property DoubleStrikeThrough read ReadDoubleStrikeThrough write WriteDoubleStrikeThrough;
|
||||
property Duplicate read ReadDuplicate;
|
||||
property Emboss read ReadEmboss write WriteEmboss;
|
||||
property EmphasisMark read ReadEmphasisMark write WriteEmphasisMark;
|
||||
property Engrave read ReadEngrave write WriteEngrave;
|
||||
property Fill read ReadFill;
|
||||
property Glow read ReadGlow;
|
||||
property Hidden read ReadHidden write WriteHidden;
|
||||
property Italic read ReadItalic write WriteItalic;
|
||||
property ItalicBi read ReadItalicBi write WriteItalicBi;
|
||||
property Kerning read ReadKerning write WriteKerning;
|
||||
property Ligatures read ReadLigatures write WriteLigatures;
|
||||
property Line read ReadLine write WriteLine;
|
||||
property Name read ReadName write WriteName;
|
||||
property NameAscii read ReadNameAscii write WriteNameAscii;
|
||||
property NameBi read ReadNameBi write WriteNameBi;
|
||||
property NameFarEast read ReadNameFarEast write WriteNameFarEast;
|
||||
property NameOther read ReadNameOther write WriteNameOther;
|
||||
property NumberForm read ReadNumberForm write WriteNumberForm;
|
||||
property NumberSpacing read ReadNumberSpacing write WriteNumberSpacing;
|
||||
property Outline read ReadOutline write WriteOutline;
|
||||
property Position read ReadPosition write WritePosition;
|
||||
property Reflection read ReadReflection;
|
||||
property Scaling read ReadScaling write WriteScaling;
|
||||
property Shading read ReadShading;
|
||||
property Shadow read ReadShadow write WriteShadow;
|
||||
property Size read ReadSize write WriteSize;
|
||||
property SizeBi read ReadSizeBi write WriteSizeBi;
|
||||
property SmallCaps read ReadSmallCaps write WriteSmallCaps;
|
||||
property Spacing read ReadSpacing write WriteSpacing;
|
||||
property StrikeThrough read ReadStrikeThrough write WriteStrikeThrough;
|
||||
property StylisticSet read ReadStylisticSet write WriteStylisticSet;
|
||||
property Subscript read ReadSubscript write WriteSubscript;
|
||||
property Superscript read ReadSuperscript write WriteSuperscript;
|
||||
property TextColor read ReadTextColor;
|
||||
property TextShadow read ReadTextShadow;
|
||||
property ThreeD read ReadThreeD;
|
||||
property Underline read ReadUnderline write WriteUnderline;
|
||||
property UnderlineColor read ReadUnderlineColor write WriteUnderlineColor;
|
||||
Function WriteUnderlineColor(value);virtual;
|
||||
Function ReadUnderlineColor();virtual;
|
||||
Function WriteUnderline(value);virtual;
|
||||
Function ReadUnderline();virtual;
|
||||
Function ReadThreeD();virtual;
|
||||
Function ReadTextShadow();virtual;
|
||||
Function ReadTextColor();virtual;
|
||||
Function WriteSuperscript(value);virtual;
|
||||
Function ReadSuperscript();virtual;
|
||||
Function WriteSubscript(value);virtual;
|
||||
Function ReadSubscript();virtual;
|
||||
Function WriteStylisticSet(value);virtual;
|
||||
Function ReadStylisticSet();virtual;
|
||||
Function WriteStrikeThrough(value);virtual;
|
||||
Function ReadStrikeThrough();virtual;
|
||||
Function WriteSpacing(value);virtual;
|
||||
Function ReadSpacing();virtual;
|
||||
Function WriteSmallCaps(value);virtual;
|
||||
Function ReadSmallCaps();virtual;
|
||||
Function WriteSizeBi(value);virtual;
|
||||
Function ReadSizeBi();virtual;
|
||||
Function WriteSize(value);virtual;
|
||||
Function ReadSize();virtual;
|
||||
Function WriteShadow(value);virtual;
|
||||
Function ReadShadow();virtual;
|
||||
Function ReadShading();virtual;
|
||||
Function WriteScaling(value);virtual;
|
||||
Function ReadScaling();virtual;
|
||||
Function ReadReflection();virtual;
|
||||
Function WritePosition(value);virtual;
|
||||
Function ReadPosition();virtual;
|
||||
Function WriteOutline(value);virtual;
|
||||
Function ReadOutline();virtual;
|
||||
Function WriteNumberSpacing(value);virtual;
|
||||
Function ReadNumberSpacing();virtual;
|
||||
Function WriteNumberForm(value);virtual;
|
||||
Function ReadNumberForm();virtual;
|
||||
Function WriteNameOther(value);virtual;
|
||||
Function ReadNameOther();virtual;
|
||||
Function WriteNameFarEast(value);virtual;
|
||||
Function ReadNameFarEast();virtual;
|
||||
Function WriteNameBi(value);virtual;
|
||||
Function ReadNameBi();virtual;
|
||||
Function WriteNameAscii(value);virtual;
|
||||
Function ReadNameAscii();virtual;
|
||||
Function WriteName(value);virtual;
|
||||
Function ReadName();virtual;
|
||||
Function WriteLine(value);virtual;
|
||||
Function ReadLine();virtual;
|
||||
Function WriteLigatures(value);virtual;
|
||||
Function ReadLigatures();virtual;
|
||||
Function WriteKerning(value);virtual;
|
||||
Function ReadKerning();virtual;
|
||||
Function WriteItalicBi(value);virtual;
|
||||
Function ReadItalicBi();virtual;
|
||||
Function WriteItalic(value);virtual;
|
||||
Function ReadItalic();virtual;
|
||||
Function WriteHidden(value);virtual;
|
||||
Function ReadHidden();virtual;
|
||||
Function ReadGlow();virtual;
|
||||
Function ReadFill();virtual;
|
||||
Function WriteEngrave(value);virtual;
|
||||
Function ReadEngrave();virtual;
|
||||
Function WriteEmphasisMark(value);virtual;
|
||||
Function ReadEmphasisMark();virtual;
|
||||
Function WriteEmboss(value);virtual;
|
||||
Function ReadEmboss();virtual;
|
||||
Function ReadDuplicate();virtual;
|
||||
Function WriteDoubleStrikeThrough(value);virtual;
|
||||
Function ReadDoubleStrikeThrough();virtual;
|
||||
Function WriteDisableCharacterSpaceGrid(value);virtual;
|
||||
Function ReadDisableCharacterSpaceGrid();virtual;
|
||||
Function WriteDiacriticColor(value);virtual;
|
||||
Function ReadDiacriticColor();virtual;
|
||||
Function WriteContextualAlternates(value);virtual;
|
||||
Function ReadContextualAlternates();virtual;
|
||||
Function WriteColorIndexBi(value);virtual;
|
||||
Function ReadColorIndexBi();virtual;
|
||||
Function WriteColorIndex(value);virtual;
|
||||
Function ReadColorIndex();virtual;
|
||||
Function WriteColor(value);virtual;
|
||||
Function ReadColor();virtual;
|
||||
Function ReadBorders();virtual;
|
||||
Function WriteBoldBi(value);virtual;
|
||||
Function ReadBoldBi();virtual;
|
||||
Function WriteBold(value);virtual;
|
||||
Function ReadBold();virtual;
|
||||
Function WriteAllCaps(value);virtual;
|
||||
Function ReadAllCaps();virtual;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxFont.Init(pr);
|
||||
Begin
|
||||
pr_ := pr;
|
||||
color_index_ := TSWdColorIndex();
|
||||
color_ := TSWdColor();
|
||||
End;
|
||||
|
||||
Function TSDocxFont.Apply();virtual;
|
||||
Begin
|
||||
pr_.Update("first");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.ReWrite(pr);virtual;
|
||||
Begin
|
||||
self.Reset();
|
||||
rpr := pr.Root().FirstChildElement("w:rPr");
|
||||
if not ifObj(rpr) then return;
|
||||
marshal := rPr.Marshal()[0];
|
||||
node := class(TSXml).GetNode(pr_.Root(), "w:rPr", "first");
|
||||
class(TSXml).UpdateNode(node, marshal["attributes"], marshal["children"]);
|
||||
End;
|
||||
|
||||
// Methods
|
||||
Function TSDocxFont.Reset();virtual;
|
||||
Begin
|
||||
pr_.Delete();
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxFont.WriteAllCaps(value);virtual;
|
||||
Begin
|
||||
pr_.Caps := value = TSDocxEnumerations.wdToggle() ? _Not(self.Caps) : value;
|
||||
End;
|
||||
Function TSDocxFont.ReadAllCaps();virtual;
|
||||
Begin
|
||||
return pr_.Value("Caps");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteBold(value);virtual;
|
||||
Begin
|
||||
pr_.Bold := value = TSDocxEnumerations.wdToggle() ? _Not(self.Bold) : value;
|
||||
End;
|
||||
Function TSDocxFont.ReadBold();virtual;
|
||||
Begin
|
||||
return pr_.Value("Bold");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteBoldBi(value);virtual;
|
||||
Begin
|
||||
pr_.BCs := value = TSDocxEnumerations.wdToggle() ? _Not(self.BoldBi) : value;
|
||||
End;
|
||||
Function TSDocxFont.ReadBoldBi();virtual;
|
||||
Begin
|
||||
return pr_.Value("bCs");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteColor(value);virtual;
|
||||
Begin
|
||||
val := color_index_[value];
|
||||
if ifnil(val) then val := color_[value];
|
||||
pr_.Color := val;
|
||||
End;
|
||||
Function TSDocxFont.ReadColor();virtual;
|
||||
Begin
|
||||
v := pr_.Value("Color");
|
||||
value := color_index_[v];
|
||||
return ifnil(value) ? color_[v] : value;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteColorIndex(value);virtual;
|
||||
Begin
|
||||
val := color_index_[value];
|
||||
pr_.Color := val;
|
||||
End;
|
||||
Function TSDocxFont.ReadColorIndex();virtual;
|
||||
Begin
|
||||
return color_index_[pr_.Value("Color")];
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteColorIndexBi(value);virtual;
|
||||
Begin
|
||||
self.ColorIndex := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadColorIndexBi();virtual;
|
||||
Begin
|
||||
return self.ColorIndex;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteContextualAlternates(value);virtual;
|
||||
Begin
|
||||
pr_.ContextualAlternates := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadContextualAlternates();virtual;
|
||||
Begin
|
||||
return pr_.Value("ContextualAlternates");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteDisableCharacterSpaceGrid(value);virtual;
|
||||
Begin
|
||||
pr_.SnapToGrid := value ? false : true;
|
||||
End;
|
||||
Function TSDocxFont.ReadDisableCharacterSpaceGrid();virtual;
|
||||
Begin
|
||||
return pr_.Value("SnapToGrid") ? false : true;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteDoubleStrikeThrough(value);virtual;
|
||||
Begin
|
||||
pr_.dStrike := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadDoubleStrikeThrough();virtual;
|
||||
Begin
|
||||
return pr_.Value("dStrike");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.ReadDuplicate();virtual;
|
||||
Begin
|
||||
pr := pr_;
|
||||
return pr;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteEmboss(value);override;
|
||||
Begin
|
||||
pr_.Emboss := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadEmboss();override;
|
||||
Begin
|
||||
return pr_.Value("Emboss");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteEmphasisMark(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdEmphasisMarkNone:
|
||||
pr_.Em := "none";
|
||||
TSDocxEnumerations.wdEmphasisMarkOverComma:
|
||||
pr_.Em := "comma";
|
||||
TSDocxEnumerations.wdEmphasisMarkOverSolidCircle:
|
||||
pr_.Em := "dot";
|
||||
TSDocxEnumerations.wdEmphasisMarkOverWhiteCircle:
|
||||
pr_.Em := "circle";
|
||||
TSDocxEnumerations.wdEmphasisMarkUnderSolidCircle:
|
||||
pr_.Em := "underDot";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxFont.ReadEmphasisMark();virtual;
|
||||
Begin
|
||||
case pr_.Value("Em") of
|
||||
"none", nil:
|
||||
return TSDocxEnumerations.wdEmphasisMarkNone;
|
||||
"comma":
|
||||
return TSDocxEnumerations.wdEmphasisMarkOverComma;
|
||||
"dot":
|
||||
return TSDocxEnumerations.wdEmphasisMarkOverSolidCircle;
|
||||
"circle":
|
||||
return TSDocxEnumerations.wdEmphasisMarkOverWhiteCircle;
|
||||
"underDot":
|
||||
return TSDocxEnumerations.wdEmphasisMarkUnderSolidCircle;
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteEngrave(value);virtual;
|
||||
Begin
|
||||
pr_.ImPrint := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadEngrave();virtual;
|
||||
Begin
|
||||
return pr_.Value("ImPrint");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteHidden(value);virtual;
|
||||
Begin
|
||||
pr_.Vanish := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadHidden();virtual;
|
||||
Begin
|
||||
return pr_.Value("Vanish");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteItalic(value);virtual;
|
||||
Begin
|
||||
pr_.Italic := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadItalic();virtual;
|
||||
Begin
|
||||
return pr_.Value("Italic");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteItalicBi(value);virtual;
|
||||
Begin
|
||||
pr_.ICs := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadItalicBi();virtual;
|
||||
Begin
|
||||
return pr_.Value("ICs");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteKerning(value);virtual;
|
||||
Begin
|
||||
pr_.Kern := value * 2;
|
||||
End;
|
||||
Function TSDocxFont.ReadKerning();virtual;
|
||||
Begin
|
||||
return pr_.Value("Kern") / 2;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteLigatures(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdLigaturesAll():
|
||||
pr_.Ligatures := "all";
|
||||
TSDocxEnumerations.wdLigaturesContextual():
|
||||
pr_.Ligatures := "contextual";
|
||||
TSDocxEnumerations.wdLigaturesContextualDiscretional():
|
||||
pr_.Ligatures := "contextualDiscretional";
|
||||
TSDocxEnumerations.wdLigaturesContextualHistorical():
|
||||
pr_.Ligatures := "contextualHistorical";
|
||||
TSDocxEnumerations.wdLigaturesContextualHistoricalDiscretional():
|
||||
pr_.Ligatures := "contextualHistoricalDiscretional";
|
||||
TSDocxEnumerations.wdLigaturesDiscretional():
|
||||
pr_.Ligatures := "discretional";
|
||||
TSDocxEnumerations.wdLigaturesHistorical():
|
||||
pr_.Ligatures := "historical";
|
||||
TSDocxEnumerations.wdLigaturesHistoricalDiscretional():
|
||||
pr_.Ligatures := "historicalDiscretional";
|
||||
TSDocxEnumerations.wdLigaturesNone():
|
||||
pr_.Ligatures := "none";
|
||||
TSDocxEnumerations.wdLigaturesStandard():
|
||||
pr_.Ligatures := "standard";
|
||||
TSDocxEnumerations.wdLigaturesStandardContextual():
|
||||
pr_.Ligatures := "standardContextual";
|
||||
TSDocxEnumerations.wdLigaturesStandardContextualDiscretional():
|
||||
pr_.Ligatures := "standardContextualDiscretional";
|
||||
TSDocxEnumerations.wdLigaturesStandardContextualHistorical():
|
||||
pr_.Ligatures := "standardContextualHistorical";
|
||||
TSDocxEnumerations.wdLigaturesStandardDiscretional():
|
||||
pr_.Ligatures := "standardDiscretional";
|
||||
TSDocxEnumerations.wdLigaturesStandardHistorical():
|
||||
pr_.Ligatures := "standardHistorical";
|
||||
TSDocxEnumerations.wdLigaturesStandardHistoricalDiscretional():
|
||||
pr_.Ligatures := "standardHistoricalDiscretional";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxFont.ReadLigatures();virtual;
|
||||
Begin
|
||||
case pr_.Value("Ligatures") of
|
||||
"all":
|
||||
return TSDocxEnumerations.wdLigaturesAll();
|
||||
"contextual":
|
||||
return TSDocxEnumerations.wdLigaturesContextual();
|
||||
"contextualDiscretional":
|
||||
return TSDocxEnumerations.wdLigaturesContextualDiscretional();
|
||||
"contextualHistorical":
|
||||
return TSDocxEnumerations.wdLigaturesContextualHistorical();
|
||||
"contextualHistoricalDiscretional":
|
||||
return TSDocxEnumerations.wdLigaturesContextualHistoricalDiscretional();
|
||||
"discretional":
|
||||
return TSDocxEnumerations.wdLigaturesDiscretional();
|
||||
"historical":
|
||||
return TSDocxEnumerations.wdLigaturesHistorical();
|
||||
"historicalDiscretional":
|
||||
return TSDocxEnumerations.wdLigaturesHistoricalDiscretional();
|
||||
"none", nil:
|
||||
return TSDocxEnumerations.wdLigaturesNone();
|
||||
"standard":
|
||||
return TSDocxEnumerations.wdLigaturesStandard();
|
||||
"standardContextual":
|
||||
return TSDocxEnumerations.wdLigaturesStandardContextual();
|
||||
"standardContextualDiscretional":
|
||||
return TSDocxEnumerations.wdLigaturesStandardContextualDiscretional();
|
||||
"standardContextualHistorical":
|
||||
return TSDocxEnumerations.wdLigaturesStandardContextualHistorical();
|
||||
"standardDiscretional":
|
||||
return TSDocxEnumerations.wdLigaturesStandardDiscretional();
|
||||
"standardHistorical":
|
||||
return TSDocxEnumerations.wdLigaturesStandardHistorical();
|
||||
"standardHistoricalDiscretional":
|
||||
return TSDocxEnumerations.wdLigaturesStandardHistoricalDiscretional();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteName(value);virtual;
|
||||
Begin
|
||||
pr_.rFont.EastAsia := value;
|
||||
pr_.rFont.Ascii := value;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.ReadName();virtual;
|
||||
Begin
|
||||
return pr_.rFont.EastAsia;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteNameAscii(value);virtual;
|
||||
Begin
|
||||
pr_.rFont.Ascii := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadNameAscii();virtual;
|
||||
Begin
|
||||
return pr_.rFont.Ascii;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteNameBi(value);virtual;
|
||||
Begin
|
||||
pr_.rFont.Cs := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadNameBi();virtual;
|
||||
Begin
|
||||
return pr_.rFont.Cs;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteNameFarEast(value);virtual;
|
||||
Begin
|
||||
pr_.rFont.EastAsia := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadNameFarEast();virtual;
|
||||
Begin
|
||||
ret := pr_.rFont.EastAsia;
|
||||
return ret ? ret : class(TSXml).Utf8ToCurCodePage("宋体");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteNameOther(value);virtual;
|
||||
Begin
|
||||
pr_.rFont.HAnsi := value;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.ReadNameOther();virtual;
|
||||
Begin
|
||||
return pr_.rFont.HAnsi;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteNumberForm(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdNumberFormDefault():
|
||||
pr_.NumForm := "default";
|
||||
TSDocxEnumerations.wdNumberFormLining():
|
||||
pr_.NumForm := "lining";
|
||||
TSDocxEnumerations.wdNumberFormOldstyle():
|
||||
pr_.NumForm := "oldStyle";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxFont.ReadNumberForm();virtual;
|
||||
Begin
|
||||
case pr_.Value("NumForm") of
|
||||
"default", nil:
|
||||
return TSDocxEnumerations.wdNumberFormDefault();
|
||||
"lining":
|
||||
return TSDocxEnumerations.wdNumberFormLining();
|
||||
"oldStyle":
|
||||
return TSDocxEnumerations.wdNumberFormOldstyle();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteNumberSpacing(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdNumberSpacingDefault():
|
||||
pr_.NumSpacing := "default";
|
||||
TSDocxEnumerations.wdNumberSpacingProportional():
|
||||
pr_.NumSpacing := "proportional";
|
||||
TSDocxEnumerations.wdNumberSpacingTabular():
|
||||
pr_.NumSpacing := "tabular";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxFont.ReadNumberSpacing();virtual;
|
||||
Begin
|
||||
case pr_.Value("NumSpacing") of
|
||||
"default", nil:
|
||||
return TSDocxEnumerations.wdNumberSpacingDefault();
|
||||
"proportional":
|
||||
return TSDocxEnumerations.wdNumberSpacingProportional();
|
||||
"tabular":
|
||||
return TSDocxEnumerations.wdNumberSpacingTabular();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteOutline(value);virtual;
|
||||
Begin
|
||||
pr_.Outline := value = TSDocxEnumerations.wdToggle() ? _Not(self.Outline) : value;
|
||||
End;
|
||||
Function TSDocxFont.ReadOutline();virtual;
|
||||
Begin
|
||||
return pr_.Value("Outline");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WritePosition(value);virtual;
|
||||
Begin
|
||||
pr_.Position := value * 2;
|
||||
End;
|
||||
Function TSDocxFont.ReadPosition();virtual;
|
||||
Begin
|
||||
return pr_.Value("Position") / 2;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteScaling(value);virtual;
|
||||
Begin
|
||||
pr_.W := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadScaling();virtual;
|
||||
Begin
|
||||
return pr_.Value("W");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteShadow(value);virtual;
|
||||
Begin
|
||||
pr_.Shadow := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadShadow();virtual;
|
||||
Begin
|
||||
return pr_.Value("Shadow");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteSize(value);virtual;
|
||||
Begin
|
||||
pr_.Sz := value * 2;
|
||||
End;
|
||||
Function TSDocxFont.ReadSize();virtual;
|
||||
Begin
|
||||
return pr_.Value("Sz") / 2;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteSizeBi(value);virtual;
|
||||
Begin
|
||||
pr_.SzCs := value * 2;
|
||||
End;
|
||||
Function TSDocxFont.ReadSizeBi();virtual;
|
||||
Begin
|
||||
return pr_.Value("SzCs") / 2;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteSmallCaps(value);virtual;
|
||||
Begin
|
||||
pr_.SmallCaps := value = TSDocxEnumerations.wdToggle() ? _Not(self.SmallCaps) : value;
|
||||
End;
|
||||
Function TSDocxFont.ReadSmallCaps();virtual;
|
||||
Begin
|
||||
return pr_.Value("SmallCaps");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteSpacing(value);virtual;
|
||||
Begin
|
||||
pr_.Spacing := value * 20;
|
||||
End;
|
||||
Function TSDocxFont.ReadSpacing();virtual;
|
||||
Begin
|
||||
return pr_.Value("Spacing") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteStrikeThrough(value);virtual;
|
||||
Begin
|
||||
pr_.Strike := value;
|
||||
End;
|
||||
Function TSDocxFont.ReadStrikeThrough();virtual;
|
||||
Begin
|
||||
return pr_.Value("Strike");
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteSubscript(value);virtual;
|
||||
Begin
|
||||
if value then pr_.VertAlign := "subscript";
|
||||
else if self.Subscript then pr_.VertAlign := "none";
|
||||
End;
|
||||
Function TSDocxFont.ReadSubscript();virtual;
|
||||
Begin
|
||||
val := pr_.Value("VertAlign");
|
||||
return val = "subscript";
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteSuperscript(value);virtual;
|
||||
Begin
|
||||
if value then pr_.VertAlign := "supercript";
|
||||
else if self.Superscript then pr_.VertAlign := "none";
|
||||
End;
|
||||
Function TSDocxFont.ReadSuperscript();virtual;
|
||||
Begin
|
||||
val := pr_.Value("VertAlign");
|
||||
return val = "supercript";
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteUnderline(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdUnderlineDash():
|
||||
pr_.U := "dash";
|
||||
TSDocxEnumerations.wdUnderlineDashHeavy():
|
||||
pr_.U := "dashedHeavy";
|
||||
TSDocxEnumerations.wdUnderlineDashLong():
|
||||
pr_.U := "dashLong";
|
||||
TSDocxEnumerations.wdUnderlineDashLongHeavy():
|
||||
pr_.U := "dashLongHeavy";
|
||||
TSDocxEnumerations.wdUnderlineDotDash():
|
||||
pr_.U := "dotDash";
|
||||
TSDocxEnumerations.wdUnderlineDotDashHeavy():
|
||||
pr_.U := "dashDotHeavy";
|
||||
TSDocxEnumerations.wdUnderlineDotDotDash():
|
||||
pr_.U := "dotDotDash";
|
||||
TSDocxEnumerations.wdUnderlineDotDotDashHeavy():
|
||||
pr_.U := "dashDotDotHeavy";
|
||||
TSDocxEnumerations.wdUnderlineDotted():
|
||||
pr_.U := "dotted";
|
||||
TSDocxEnumerations.wdUnderlineDottedHeavy():
|
||||
pr_.U := "dottedHeavy";
|
||||
TSDocxEnumerations.wdUnderlineDouble():
|
||||
pr_.U := "double";
|
||||
TSDocxEnumerations.wdUnderlineNone():
|
||||
pr_.U := "none";
|
||||
TSDocxEnumerations.wdUnderlineSingle():
|
||||
pr_.U := "single";
|
||||
TSDocxEnumerations.wdUnderlineThick():
|
||||
pr_.U := "thick";
|
||||
TSDocxEnumerations.wdUnderlineWavy():
|
||||
pr_.U := "wave";
|
||||
TSDocxEnumerations.wdUnderlineWavyDouble():
|
||||
pr_.U := "wavyDoule";
|
||||
TSDocxEnumerations.wdUnderlineWavyHeavy():
|
||||
pr_.U := "wavyHeavy";
|
||||
TSDocxEnumerations.wdUnderlineWords():
|
||||
pr_.U := "words";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxFont.ReadUnderline();virtual;
|
||||
Begin
|
||||
case pr_.Value("U") of
|
||||
"dash":
|
||||
return TSDocxEnumerations.wdUnderlineDash();
|
||||
"dashedHeavy":
|
||||
return TSDocxEnumerations.wdUnderlineDashHeavy();
|
||||
"dashLong":
|
||||
return TSDocxEnumerations.wdUnderlineDashLong();
|
||||
"dashLongHeavy":
|
||||
return TSDocxEnumerations.wdUnderlineDashLongHeavy();
|
||||
"dotDash":
|
||||
return TSDocxEnumerations.wdUnderlineDotDash();
|
||||
"dashDotHeavy":
|
||||
return TSDocxEnumerations.wdUnderlineDotDashHeavy();
|
||||
"dotDotDash":
|
||||
return TSDocxEnumerations.wdUnderlineDotDotDash();
|
||||
"dashDotDotHeavy":
|
||||
return TSDocxEnumerations.wdUnderlineDotDotDashHeavy();
|
||||
"dotted":
|
||||
return TSDocxEnumerations.wdUnderlineDotted();
|
||||
"dottedHeavy":
|
||||
return TSDocxEnumerations.wdUnderlineDottedHeavy();
|
||||
"double":
|
||||
return TSDocxEnumerations.wdUnderlineDouble();
|
||||
"none", nil:
|
||||
return TSDocxEnumerations.wdUnderlineNone();
|
||||
"single":
|
||||
return TSDocxEnumerations.wdUnderlineSingle();
|
||||
"thick":
|
||||
return TSDocxEnumerations.wdUnderlineThick();
|
||||
"wave":
|
||||
return TSDocxEnumerations.wdUnderlineWavy();
|
||||
"wavyDoule":
|
||||
return TSDocxEnumerations.wdUnderlineWavyDouble();
|
||||
"wavyHeavy":
|
||||
return TSDocxEnumerations.wdUnderlineWavyHeavy();
|
||||
"words":
|
||||
return TSDocxEnumerations.wdUnderlineWords();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxFont.WriteUnderlineColor(value);virtual;
|
||||
Begin
|
||||
pr_.UColor := color_[value];
|
||||
End;
|
||||
Function TSDocxFont.ReadUnderlineColor();virtual;
|
||||
Begin
|
||||
return color_[pr_.Value("UColor", true)];
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,564 @@
|
||||
Type TSDocxFontRange = Class(TSDocxFont)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(rangeObj);
|
||||
Function Apply();override;
|
||||
Function ReWrite(pr);override;
|
||||
|
||||
private
|
||||
Function CallFunction(pf, value);overload;
|
||||
Function CallFunction(pf);overload;
|
||||
|
||||
private
|
||||
range_obj_;
|
||||
|
||||
public
|
||||
Function Reset();override;
|
||||
|
||||
Function WriteUnderlineColor(value);override;
|
||||
Function ReadUnderlineColor();override;
|
||||
Function WriteUnderline(value);override;
|
||||
Function ReadUnderline();override;
|
||||
Function ReadThreeD();override;
|
||||
Function ReadTextShadow();override;
|
||||
Function ReadTextColor();override;
|
||||
Function WriteSuperscript(value);override;
|
||||
Function ReadSuperscript();override;
|
||||
Function WriteSubscript(value);override;
|
||||
Function ReadSubscript();override;
|
||||
Function WriteStylisticSet(value);override;
|
||||
Function ReadStylisticSet();override;
|
||||
Function WriteStrikeThrough(value);override;
|
||||
Function ReadStrikeThrough();override;
|
||||
Function WriteSpacing(value);override;
|
||||
Function ReadSpacing();override;
|
||||
Function WriteSmallCaps(value);override;
|
||||
Function ReadSmallCaps();override;
|
||||
Function WriteSizeBi(value);override;
|
||||
Function ReadSizeBi();override;
|
||||
Function WriteSize(value);override;
|
||||
Function ReadSize();override;
|
||||
Function WriteShadow(value);override;
|
||||
Function ReadShadow();override;
|
||||
Function ReadShading();override;
|
||||
Function WriteScaling(value);override;
|
||||
Function ReadScaling();override;
|
||||
Function ReadReflection();override;
|
||||
Function WritePosition(value);override;
|
||||
Function ReadPosition();override;
|
||||
Function WriteOutline(value);override;
|
||||
Function ReadOutline();override;
|
||||
Function WriteNumberSpacing(value);override;
|
||||
Function ReadNumberSpacing();override;
|
||||
Function WriteNumberForm(value);override;
|
||||
Function ReadNumberForm();override;
|
||||
Function WriteNameOther(value);override;
|
||||
Function ReadNameOther();override;
|
||||
Function WriteNameFarEast(value);override;
|
||||
Function ReadNameFarEast();override;
|
||||
Function WriteNameBi(value);override;
|
||||
Function ReadNameBi();override;
|
||||
Function WriteNameAscii(value);override;
|
||||
Function ReadNameAscii();override;
|
||||
Function WriteName(value);override;
|
||||
Function ReadName();override;
|
||||
Function WriteLine(value);override;
|
||||
Function ReadLine();override;
|
||||
Function WriteLigatures(value);override;
|
||||
Function ReadLigatures();override;
|
||||
Function WriteKerning(value);override;
|
||||
Function ReadKerning();override;
|
||||
Function WriteItalicBi(value);override;
|
||||
Function ReadItalicBi();override;
|
||||
Function WriteItalic(value);override;
|
||||
Function ReadItalic();override;
|
||||
Function WriteHidden(value);override;
|
||||
Function ReadHidden();override;
|
||||
Function ReadGlow();override;
|
||||
Function ReadFill();override;
|
||||
Function WriteEngrave(value);override;
|
||||
Function ReadEngrave();override;
|
||||
Function WriteEmphasisMark(value);override;
|
||||
Function ReadEmphasisMark();override;
|
||||
Function WriteEmboss(value);override;
|
||||
Function ReadEmboss();override;
|
||||
Function ReadDuplicate();override;
|
||||
Function WriteDoubleStrikeThrough(value);override;
|
||||
Function ReadDoubleStrikeThrough();override;
|
||||
Function WriteDisableCharacterSpaceGrid(value);override;
|
||||
Function ReadDisableCharacterSpaceGrid();override;
|
||||
Function WriteDiacriticColor(value);override;
|
||||
Function ReadDiacriticColor();override;
|
||||
Function WriteContextualAlternates(value);override;
|
||||
Function ReadContextualAlternates();override;
|
||||
Function WriteColorIndexBi(value);override;
|
||||
Function ReadColorIndexBi();override;
|
||||
Function WriteColorIndex(value);override;
|
||||
Function ReadColorIndex();override;
|
||||
Function WriteColor(value);override;
|
||||
Function ReadColor();override;
|
||||
Function ReadBorders();override;
|
||||
Function WriteBoldBi(value);override;
|
||||
Function ReadBoldBi();override;
|
||||
Function WriteBold(value);override;
|
||||
Function ReadBold();override;
|
||||
Function WriteAllCaps(value);override;
|
||||
Function ReadAllCaps();override;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxFontRange.Init(rangeObj);
|
||||
Begin
|
||||
range_obj_ := rangeObj;
|
||||
class(TSDocxFont).Init(nil);
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.Apply();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).Apply));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReWrite(pr);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).ReWrite), pr);
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.CallFunction(pf, value);overload;
|
||||
Begin
|
||||
range_obj_.SplitRun();
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
pr_ := range_obj_[i].TParagraph.pPr.rPr;
|
||||
##pf(value);
|
||||
pr_ := range_obj_[i].TRun.rPr;
|
||||
##pf(value);
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.CallFunction(pf);overload;
|
||||
Begin
|
||||
ret := nil;
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
pr_ := range_obj_[i].TRun.rPr;
|
||||
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;
|
||||
|
||||
// function
|
||||
Function TSDocxFontRange.Reset();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).Reset));
|
||||
End;
|
||||
// property
|
||||
Function TSDocxFontRange.WriteUnderlineColor(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteUnderlineColor), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadUnderlineColor();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadUnderlineColor));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteUnderline(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteUnderline), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadUnderline();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadUnderline));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadThreeD();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadThreeD));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadTextShadow();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadTextShadow));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadTextColor();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadTextColor));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteSuperscript(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteSuperscript), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadSuperscript();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadSuperscript));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteSubscript(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteSubscript), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadSubscript();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadSubscript));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteStylisticSet(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteStylisticSet), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadStylisticSet();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadStylisticSet));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteStrikeThrough(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteStrikeThrough), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadStrikeThrough();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadStrikeThrough));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteSpacing(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteSpacing), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadSpacing();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadSpacing));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteSmallCaps(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteSmallCaps), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadSmallCaps();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadSmallCaps));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteSizeBi(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteSizeBi), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadSizeBi();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadSizeBi));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteSize(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteSize), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadSize();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadSize));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteShadow(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteShadow), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadShadow();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadShadow));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadShading();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadShading));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteScaling(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteScaling), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadScaling();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadScaling));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadReflection();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadReflection));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WritePosition(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WritePosition), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadPosition();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadPosition));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteOutline(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteOutline), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadOutline();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadOutline));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteNumberSpacing(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteNumberSpacing), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadNumberSpacing();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadNumberSpacing));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteNumberForm(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteNumberForm), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadNumberForm();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadNumberForm));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteNameOther(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteNameOther), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadNameOther();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadNameOther));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteNameFarEast(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteNameFarEast), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadNameFarEast();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadNameFarEast));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteNameBi(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteNameBi), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadNameBi();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadNameBi));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteNameAscii(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteNameAscii), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadNameAscii();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadNameAscii));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteName(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteName), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadName();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadName));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteLine(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteLine), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadLine();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadLine));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteLigatures(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteLigatures), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadLigatures();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadLigatures));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteKerning(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteKerning), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadKerning();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadKerning));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteItalicBi(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteItalicBi), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadItalicBi();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadItalicBi));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteItalic(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteItalic), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadItalic();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadItalic));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteHidden(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteHidden), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadHidden();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadHidden));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadGlow();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadGlow));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadFill();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadFill));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteEngrave(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteEngrave), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadEngrave();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadEngrave));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteEmphasisMark(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteEmphasisMark), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadEmphasisMark();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadEmphasisMark));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteEmboss(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteEmboss), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadEmboss();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadEmboss));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadDuplicate();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadDuplicate));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteDoubleStrikeThrough(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteDoubleStrikeThrough), value);
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadDoubleStrikeThrough();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadDoubleStrikeThrough));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteDisableCharacterSpaceGrid(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteDisableCharacterSpaceGrid), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadDisableCharacterSpaceGrid();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadDisableCharacterSpaceGrid));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteDiacriticColor(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteDiacriticColor), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadDiacriticColor();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadDiacriticColor));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteContextualAlternates(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteContextualAlternates), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadContextualAlternates();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadContextualAlternates));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteColorIndexBi(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteColorIndexBi), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadColorIndexBi();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadColorIndexBi));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteColorIndex(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteColorIndex), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadColorIndex();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadColorIndex));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteColor(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxFont).WriteColor), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadColor();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadColor));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.ReadBorders();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadBorders));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteBoldBi(value);override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).WriteBoldBi), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadBoldBi();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadBoldBi));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteBold(value);override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).WriteBold), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadBold();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadBold));
|
||||
End;
|
||||
|
||||
Function TSDocxFontRange.WriteAllCaps(value);override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).WriteAllCaps), value);
|
||||
End;
|
||||
Function TSDocxFontRange.ReadAllCaps();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxFont).ReadAllCaps));
|
||||
End;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,722 @@
|
||||
Type TSDocxParagraphFormat = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(docx, pPr);
|
||||
Function Apply();virtual;
|
||||
Function ReWrite(pr);virtual;
|
||||
|
||||
protected
|
||||
docx_;
|
||||
pr_; // TOfficeObj("TwpPr")
|
||||
shading_; // TSDocxShading
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function CloseUp();virtual;
|
||||
Function IndentCharWidth(Count);virtual;
|
||||
Function IndentFirstLineCharWidth(Count);virtual;
|
||||
Function OpenOrCloseUp();virtual;
|
||||
Function OpenUp();virtual;
|
||||
Function Reset();virtual;
|
||||
Function Space1();virtual;
|
||||
Function Space15();virtual;
|
||||
Function Space2();virtual;
|
||||
Function TabHangingIndent(Count);virtual;
|
||||
Function TabIndent(Count);virtual;
|
||||
|
||||
// Properties
|
||||
property AddSpaceBetweenFarEastAndAlpha read ReadAddSpaceBetweenFarEastAndAlpha write WriteAddSpaceBetweenFarEastAndAlpha;
|
||||
property AddSpaceBetweenFarEastAndDigit read ReadAddSpaceBetweenFarEastAndDigit write WriteAddSpaceBetweenFarEastAndDigit;
|
||||
property Alignment read ReadAlignment write WriteAlignment;
|
||||
property AutoAdjustRightIndent read ReadAutoAdjustRightIndent write WriteAutoAdjustRightIndent;
|
||||
property BaseLineAlignment read ReadBaseLineAlignment write WriteBaseLineAlignment;
|
||||
property Borders read ReadBorders;
|
||||
property CharacterUnitFirstLineIndent read ReadCharacterUnitFirstLineIndent write WriteCharacterUnitFirstLineIndent;
|
||||
property CharacterUnitLeftIndent read ReadCharacterUnitLeftIndent write WriteCharacterUnitLeftIndent;
|
||||
property CharacterUnitRightIndent read ReadCharacterUnitRightIndent write WriteCharacterUnitRightIndent;
|
||||
property CollapsedByDefault read ReadCollapsedByDefault write WriteCollapsedByDefault;
|
||||
property DisableLineHeightGrid read ReadDisableLineHeightGrid write WriteDisableLineHeightGrid;
|
||||
property Duplicate read ReadDuplicate;
|
||||
property FarEastLineBreakControl read ReadFarEastLineBreakControl write WriteFarEastLineBreakControl;
|
||||
property FirstLineIndent read ReadFirstLineIndent write WriteFirstLineIndent;
|
||||
property HalfWidthPunctuationOnTopOfLine read ReadHalfWidthPunctuationOnTopOfLine write WriteHalfWidthPunctuationOnTopOfLine;
|
||||
property HangingPunctuation read ReadHangingPunctuation write WriteHangingPunctuation;
|
||||
property Hyphenation read ReadHyphenation write WriteHyphenation;
|
||||
property KeepTogether read ReadKeepTogether write WriteKeepTogether;
|
||||
property KeepWithNext read ReadKeepWithNext write WriteKeepWithNext;
|
||||
property LeftIndent read ReadLeftIndent write WriteLeftIndent;
|
||||
property LineSpacing read ReadLineSpacing write WriteLineSpacing;
|
||||
property LineSpacingRule read ReadLineSpacingRule write WriteLineSpacingRule;
|
||||
property LineUnitAfter read ReadLineUnitAfter write WriteLineUnitAfter;
|
||||
property LineUnitBefore read ReadLineUnitBefore write WriteLineUnitBefore;
|
||||
property MirrorIndents read ReadMirrorIndents write WriteMirrorIndents;
|
||||
property NoLineNumber read ReadNoLineNumber write WriteNoLineNumber;
|
||||
property OutlineLevel read ReadOutlineLevel write WriteOutlineLevel;
|
||||
property PageBreakBefore read ReadPageBreakBefore write WritePageBreakBefore;
|
||||
property ReadingOrder read ReadReadingOrder write WriteReadingOrder;
|
||||
property RightIndent read ReadRightIndent write WriteRightIndent;
|
||||
property Shading read ReadShading;
|
||||
property SpaceAfter read ReadSpaceAfter write WriteSpaceAfter;
|
||||
property SpaceAfterAuto read ReadSpaceAfterAuto write WriteSpaceAfterAuto;
|
||||
property SpaceBefore read ReadSpaceBefore write WriteSpaceBefore;
|
||||
property SpaceBeforeAuto read ReadSpaceBeforeAuto write WriteSpaceBeforeAuto;
|
||||
property Style read ReadStyle write WriteStyle;
|
||||
property TabStops read ReadTabStops write WriteTabStops;
|
||||
property TextboxTightWrap read ReadTextboxTightWrap write WriteTextboxTightWrap;
|
||||
property WidowControl read ReadWidowControl write WriteWidowControl;
|
||||
property WordWrap read ReadWordWrap write WriteWordWrap;
|
||||
Function WriteWordWrap(value);virtual;
|
||||
Function ReadWordWrap();virtual;
|
||||
Function WriteWidowControl(value);virtual;
|
||||
Function ReadWidowControl();virtual;
|
||||
Function WriteTextboxTightWrap(value);virtual;
|
||||
Function ReadTextboxTightWrap();virtual;
|
||||
Function WriteTabStops(value);virtual;
|
||||
Function ReadTabStops();virtual;
|
||||
Function WriteStyle(value);virtual;
|
||||
Function ReadStyle();virtual;
|
||||
Function WriteSpaceBeforeAuto(value);virtual;
|
||||
Function ReadSpaceBeforeAuto();virtual;
|
||||
Function WriteSpaceBefore(value);virtual;
|
||||
Function ReadSpaceBefore();virtual;
|
||||
Function WriteSpaceAfterAuto(value);virtual;
|
||||
Function ReadSpaceAfterAuto();virtual;
|
||||
Function WriteSpaceAfter(value);virtual;
|
||||
Function ReadSpaceAfter();virtual;
|
||||
Function ReadShading();virtual;
|
||||
Function WriteRightIndent(value);virtual;
|
||||
Function ReadRightIndent();virtual;
|
||||
Function WriteReadingOrder(value);virtual;
|
||||
Function ReadReadingOrder();virtual;
|
||||
Function WritePageBreakBefore(value);virtual;
|
||||
Function ReadPageBreakBefore();virtual;
|
||||
Function WriteOutlineLevel(value);virtual;
|
||||
Function ReadOutlineLevel();virtual;
|
||||
Function WriteNoLineNumber(value);virtual;
|
||||
Function ReadNoLineNumber();virtual;
|
||||
Function WriteMirrorIndents(value);virtual;
|
||||
Function ReadMirrorIndents();virtual;
|
||||
Function WriteLineUnitBefore(value);virtual;
|
||||
Function ReadLineUnitBefore();virtual;
|
||||
Function WriteLineUnitAfter(value);virtual;
|
||||
Function ReadLineUnitAfter();virtual;
|
||||
Function WriteLineSpacingRule(value);virtual;
|
||||
Function ReadLineSpacingRule();virtual;
|
||||
Function WriteLineSpacing(value);virtual;
|
||||
Function ReadLineSpacing();virtual;
|
||||
Function WriteLeftIndent(value);virtual;
|
||||
Function ReadLeftIndent();virtual;
|
||||
Function WriteKeepWithNext(value);virtual;
|
||||
Function ReadKeepWithNext();virtual;
|
||||
Function WriteKeepTogether(value);virtual;
|
||||
Function ReadKeepTogether();virtual;
|
||||
Function WriteHyphenation(value);virtual;
|
||||
Function ReadHyphenation();virtual;
|
||||
Function WriteHangingPunctuation(value);virtual;
|
||||
Function ReadHangingPunctuation();virtual;
|
||||
Function WriteHalfWidthPunctuationOnTopOfLine(value);virtual;
|
||||
Function ReadHalfWidthPunctuationOnTopOfLine();virtual;
|
||||
Function WriteFirstLineIndent(value);virtual;
|
||||
Function ReadFirstLineIndent();virtual;
|
||||
Function WriteFarEastLineBreakControl(value);virtual;
|
||||
Function ReadFarEastLineBreakControl();virtual;
|
||||
Function ReadDuplicate();virtual;
|
||||
Function WriteDisableLineHeightGrid(value);virtual;
|
||||
Function ReadDisableLineHeightGrid();virtual;
|
||||
Function WriteCollapsedByDefault(value);virtual;
|
||||
Function ReadCollapsedByDefault();virtual;
|
||||
Function WriteCharacterUnitRightIndent(value);virtual;
|
||||
Function ReadCharacterUnitRightIndent();virtual;
|
||||
Function WriteCharacterUnitLeftIndent(value);virtual;
|
||||
Function ReadCharacterUnitLeftIndent();virtual;
|
||||
Function WriteCharacterUnitFirstLineIndent(value);virtual;
|
||||
Function ReadCharacterUnitFirstLineIndent();virtual;
|
||||
Function ReadBorders(index);virtual;
|
||||
Function WriteBaseLineAlignment(value);virtual;
|
||||
Function ReadBaseLineAlignment();virtual;
|
||||
Function WriteAutoAdjustRightIndent(value);virtual;
|
||||
Function ReadAutoAdjustRightIndent();virtual;
|
||||
Function WriteAlignment(value);virtual;
|
||||
Function ReadAlignment();virtual;
|
||||
Function WriteAddSpaceBetweenFarEastAndDigit(value);virtual;
|
||||
Function ReadAddSpaceBetweenFarEastAndDigit();virtual;
|
||||
Function WriteAddSpaceBetweenFarEastAndAlpha(value);virtual;
|
||||
Function ReadAddSpaceBetweenFarEastAndAlpha();virtual;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxParagraphFormat.Init(docx, pPr);
|
||||
Begin
|
||||
docx_ := docx;
|
||||
pr_ := pPr;
|
||||
shading_ := nil;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.Apply();virtual;
|
||||
Begin
|
||||
pr_.Update("first");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.ReWrite(pr);virtual;
|
||||
Begin
|
||||
self.Reset();
|
||||
rpr := pr.Root().FirstChildElement("w:pPr");
|
||||
if not ifObj(rpr) then return;
|
||||
marshal := rPr.Marshal()[0];
|
||||
node := class(TSXml).GetNode(pr_.Root(), "w:pPr", "first");
|
||||
class(TSXml).UpdateNode(node, marshal["attributes"], marshal["children"]);
|
||||
End;
|
||||
|
||||
// Methods
|
||||
Function TSDocxParagraphFormat.CloseUp();virtual;
|
||||
Begin
|
||||
self.SpaceBefore := 0;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.IndentCharWidth(Count);virtual;
|
||||
Begin
|
||||
pr_.LeftIndent := Count * 210;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.IndentFirstLineCharWidth(Count);virtual;
|
||||
Begin
|
||||
self.FirstLineIndent := Count;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.OpenOrCloseUp();virtual;
|
||||
Begin
|
||||
self.SpaceBefore := self.SpaceBefore > 0 ? 0 : 12;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.OpenUp();virtual;
|
||||
Begin
|
||||
self.SpaceBefore := 12;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.Reset();virtual;
|
||||
Begin
|
||||
pr_.Delete();
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.Space1();virtual;
|
||||
Begin
|
||||
self.LineSpacing := 12;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.Space15();virtual;
|
||||
Begin
|
||||
self.LineSpacing := 18;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.Space2();virtual;
|
||||
Begin
|
||||
self.LineSpacing := 24;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxParagraphFormat.WriteWordWrap(value);virtual;
|
||||
Begin
|
||||
pr_.WordWrap := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadWordWrap();virtual;
|
||||
Begin
|
||||
return pr_.Value("WordWrap");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteWidowControl(value);virtual;
|
||||
Begin
|
||||
pr_.WidowControl := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadWidowControl();virtual;
|
||||
Begin
|
||||
return pr_.Value("WidowControl");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteTextboxTightWrap(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdTightAll():
|
||||
pr_.TextboxTightWrap := "allLines";
|
||||
TSDocxEnumerations.wdTightFirstAndLastLines():
|
||||
pr_.TextboxTightWrap := "firstAndLastLine";
|
||||
TSDocxEnumerations.wdTightFirstLineOnly():
|
||||
pr_.TextboxTightWrap := "firstLineOnly";
|
||||
TSDocxEnumerations.wdTightLastLineOnly():
|
||||
pr_.TextboxTightWrap := "LastLineOnly";
|
||||
TSDocxEnumerations.wdTightNone():
|
||||
pr_.TextboxTightWrap := "none";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadTextboxTightWrap();virtual;
|
||||
Begin
|
||||
value := pr_.Value("TextboxTightWrap");
|
||||
case value of
|
||||
"allLines":
|
||||
return TSDocxEnumerations.wdTightAll();
|
||||
"firstAndLastLine":
|
||||
return TSDocxEnumerations.wdTightFirstAndLastLines();
|
||||
"firstLineOnly":
|
||||
return TSDocxEnumerations.wdTightFirstLineOnly();
|
||||
"LastLineOnly":
|
||||
return TSDocxEnumerations.wdTightLastLineOnly();
|
||||
"none", nil:
|
||||
return TSDocxEnumerations.wdTightNone();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteStyle(value);virtual;
|
||||
Begin
|
||||
obj := docx_.StyleObject().GetStyle(value);
|
||||
if not obj then obj := docx_.StyleObject().AddDefaultStyle(value);
|
||||
pr_.StyleId := ifObj(obj) ? obj.StyleId : nil;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadStyle();virtual;
|
||||
Begin
|
||||
id := pr_.Value("StyleId", 1);
|
||||
obj := docx_.StyleObject().GetStyleById(id);
|
||||
return obj.Name;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteSpaceBeforeAuto(value);virtual;
|
||||
Begin
|
||||
pr_.SpaceBeforeAuto := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadSpaceBeforeAuto();virtual;
|
||||
Begin
|
||||
return pr_.Value("SpaceBeforeAuto") ? true : false;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteSpaceBefore(value);virtual;
|
||||
Begin
|
||||
pr_.SpaceBefore := value * 20;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadSpaceBefore();virtual;
|
||||
Begin
|
||||
return pr_.Value("SpaceBefore") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteSpaceAfterAuto(value);virtual;
|
||||
Begin
|
||||
pr_.SpaceAfterAuto := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadSpaceAfterAuto();virtual;
|
||||
Begin
|
||||
return pr_.Value("SpaceAfterAuto") ? true : false;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteSpaceAfter(value);virtual;
|
||||
Begin
|
||||
pr_.SpaceAfter := value * 20;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadSpaceAfter();virtual;
|
||||
Begin
|
||||
return pr_.Value("SpaceAfter") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.ReadShading();virtual;
|
||||
Begin
|
||||
if ifnil(shading_) then
|
||||
begin
|
||||
shading_ := new TSDocxShading(self.Application, self.Creator, self.Parent);
|
||||
shading_.Init(pr_.Shading);
|
||||
end
|
||||
return shading_;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteRightIndent(value);virtual;
|
||||
Begin
|
||||
pr_.RightIndent := value * 20;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadRightIndent();virtual;
|
||||
Begin
|
||||
return pr_.Value("RightIndent") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteReadingOrder(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdReadingOrderLtr():
|
||||
pr_.Bidi := false;
|
||||
TSDocxEnumerations.wdReadingOrderRtl():
|
||||
pr_.Bidi := true;
|
||||
end;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadReadingOrder();virtual;
|
||||
Begin
|
||||
value := pr_.Value("Bidi");
|
||||
case value of
|
||||
false: return TSDocxEnumerations.wdReadingOrderLtr();
|
||||
true: return TSDocxEnumerations.wdReadingOrderRtl();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WritePageBreakBefore(value);virtual;
|
||||
Begin
|
||||
pr_.PageBreakBefore := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadPageBreakBefore();virtual;
|
||||
Begin
|
||||
return pr_.Value("PageBreakBefore");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteOutlineLevel(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdOutlineLevel1():
|
||||
pr_.OutlineLevel := 0;
|
||||
TSDocxEnumerations.wdOutlineLevel2():
|
||||
pr_.OutlineLevel := 1;
|
||||
TSDocxEnumerations.wdOutlineLevel3():
|
||||
pr_.OutlineLevel := 2;
|
||||
TSDocxEnumerations.wdOutlineLevel4():
|
||||
pr_.OutlineLevel := 3;
|
||||
TSDocxEnumerations.wdOutlineLevel5():
|
||||
pr_.OutlineLevel := 4;
|
||||
TSDocxEnumerations.wdOutlineLevel6():
|
||||
pr_.OutlineLevel := 5;
|
||||
TSDocxEnumerations.wdOutlineLevel7():
|
||||
pr_.OutlineLevel := 6;
|
||||
TSDocxEnumerations.wdOutlineLevel8():
|
||||
pr_.OutlineLevel := 7;
|
||||
TSDocxEnumerations.wdOutlineLevel9():
|
||||
pr_.OutlineLevel := 8;
|
||||
TSDocxEnumerations.wdOutlineLevelBodyText():
|
||||
class(TSXml).RemoveNode(pr_.Root(), "w:outlineLvl");
|
||||
end;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadOutlineLevel();virtual;
|
||||
Begin
|
||||
value := pr_.Value("OutlineLevel");
|
||||
case value of
|
||||
0: return TSDocxEnumerations.wdOutlineLevel1();
|
||||
1: return TSDocxEnumerations.wdOutlineLevel2();
|
||||
2: return TSDocxEnumerations.wdOutlineLevel3();
|
||||
3: return TSDocxEnumerations.wdOutlineLevel4();
|
||||
4: return TSDocxEnumerations.wdOutlineLevel5();
|
||||
5: return TSDocxEnumerations.wdOutlineLevel6();
|
||||
6: return TSDocxEnumerations.wdOutlineLevel7();
|
||||
7: return TSDocxEnumerations.wdOutlineLevel8();
|
||||
8: return TSDocxEnumerations.wdOutlineLevel9();
|
||||
nil: return TSDocxEnumerations.wdOutlineLevelBodyText();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteNoLineNumber(value);virtual;
|
||||
Begin
|
||||
pr_.SuppressLineNumbers := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadNoLineNumber();virtual;
|
||||
Begin
|
||||
return pr_.Value("SuppressLineNumbers");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteMirrorIndents(value);virtual;
|
||||
Begin
|
||||
pr_.MirrorIndents := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadMirrorIndents();virtual;
|
||||
Begin
|
||||
return pr_.Value("MirrorIndents");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteLineUnitBefore(value);virtual;
|
||||
Begin
|
||||
pr_.BeforeLines := value * 100;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadLineUnitBefore();virtual;
|
||||
Begin
|
||||
return pr_.Value("BeforeLines") / 100;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteLineUnitAfter(value);virtual;
|
||||
Begin
|
||||
pr_.AfterLines := value * 100;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadLineUnitAfter();virtual;
|
||||
Begin
|
||||
return pr_.Value("AfterLines") / 100;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteLineSpacingRule(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdLineSpace1pt5():
|
||||
pr_.LineSpacingRule := "auto";
|
||||
TSDocxEnumerations.wdLineSpaceAtLeast():
|
||||
pr_.LineSpacingRule := "atLeast";
|
||||
TSDocxEnumerations.wdLineSpaceDouble():
|
||||
pr_.LineSpacingRule := "auto";
|
||||
TSDocxEnumerations.wdLineSpaceExactly():
|
||||
pr_.LineSpacingRule := "exact";
|
||||
TSDocxEnumerations.wdLineSpaceMultiple():
|
||||
pr_.LineSpacingRule := "auto";
|
||||
TSDocxEnumerations.wdLineSpaceSingle():
|
||||
pr_.LineSpacingRule := "auto";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadLineSpacingRule();virtual;
|
||||
Begin
|
||||
value := pr_.Value("LineSpacingRule");
|
||||
case value of
|
||||
"atLeast":
|
||||
return TSDocxEnumerations.wdLineSpaceAtLeast();
|
||||
"exact":
|
||||
return TSDocxEnumerations.wdLineSpaceExactly();
|
||||
"auto":
|
||||
return TSDocxEnumerations.wdLineSpaceMultiple();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteLineSpacing(value);virtual;
|
||||
Begin
|
||||
pr_.LineSpacing := value * 20;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadLineSpacing();virtual;
|
||||
Begin
|
||||
return pr_.Value("LineSpacing") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteLeftIndent(value);virtual;
|
||||
Begin
|
||||
pr_.LeftIndent := value * 20;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadLeftIndent();virtual;
|
||||
Begin
|
||||
return pr_.Value("LeftIndent") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteKeepWithNext(value);virtual;
|
||||
Begin
|
||||
pr_.KeepWithNext := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadKeepWithNext();virtual;
|
||||
Begin
|
||||
return pr_.Value("KeepWithNext");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteKeepTogether(value);virtual;
|
||||
Begin
|
||||
pr_.KeepTogether := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadKeepTogether();virtual;
|
||||
Begin
|
||||
return pr_.Value("KeepTogether");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteHyphenation(value);virtual;
|
||||
Begin
|
||||
pr_.SuppressAutoHyphens := value ? false : true;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadHyphenation();virtual;
|
||||
Begin
|
||||
return pr_.Value("SuppressAutoHyphens") ? false : true;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteHangingPunctuation(value);virtual;
|
||||
Begin
|
||||
pr_.OverflowPunct := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadHangingPunctuation();virtual;
|
||||
Begin
|
||||
return pr_.Value("TopLinePunct");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteHalfWidthPunctuationOnTopOfLine(value);virtual;
|
||||
Begin
|
||||
pr_.TopLinePunct := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadHalfWidthPunctuationOnTopOfLine();virtual;
|
||||
Begin
|
||||
return pr_.Value("TopLinePunct");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteFirstLineIndent(value);virtual;
|
||||
Begin
|
||||
pr_.FirstLineIndent := value * 20;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadFirstLineIndent();virtual;
|
||||
Begin
|
||||
return pr_.Value("FirstLineIndent") / 20;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteFarEastLineBreakControl(value);virtual;
|
||||
Begin
|
||||
pr_.Kinsoku := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadFarEastLineBreakControl();virtual;
|
||||
Begin
|
||||
return pr_.Value("Kinsoku");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.ReadDuplicate();virtual;
|
||||
Begin
|
||||
return pr_;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteDisableLineHeightGrid(value);virtual;
|
||||
Begin
|
||||
pr_.SnapToGrid := value ? false : true;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadDisableLineHeightGrid();virtual;
|
||||
Begin
|
||||
return pr_.Value("SnapToGrid") ? false : true;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteCollapsedByDefault(value);virtual;
|
||||
Begin
|
||||
pr_.Collapsed := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadCollapsedByDefault();virtual;
|
||||
Begin
|
||||
return pr_.Value("Collapsed");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteCharacterUnitRightIndent(value);virtual;
|
||||
Begin
|
||||
pr_.RightChars := value * 100;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadCharacterUnitRightIndent();virtual;
|
||||
Begin
|
||||
return pr_.Value("RightChars") / 100;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteCharacterUnitLeftIndent(value);virtual;
|
||||
Begin
|
||||
pr_.LeftChars := value * 100;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadCharacterUnitLeftIndent();virtual;
|
||||
Begin
|
||||
return pr_.Value("LeftChars") / 100;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteCharacterUnitFirstLineIndent(value);virtual;
|
||||
Begin
|
||||
if value > 0 then pr_.FirstLineChars := value * 100;
|
||||
else pr_.HangingChars := abs(value) * 100;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadCharacterUnitFirstLineIndent();virtual;
|
||||
Begin
|
||||
first_val := pr_.Value("FirstLineChars");
|
||||
if first_val then return integer(first_val / 100);
|
||||
hanging_val := pr_.Value("HangingChars");
|
||||
if hanging_val then return -integer(hanging_val / 100);
|
||||
return 0;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.ReadBorders(index);virtual;
|
||||
Begin
|
||||
borders_obj := new TSDocxBordersParagraph(self.Application, self.Creator, self.Parent);
|
||||
borders_obj.Init(pr_);
|
||||
return ifnil(index) ? borders_obj : borders_obj[index];
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteBaseLineAlignment(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdBaselineAlignAuto():
|
||||
pr_.TextAlignment := "auto";
|
||||
TSDocxEnumerations.wdBaselineAlignBaseline():
|
||||
pr_.TextAlignment := "baseline";
|
||||
TSDocxEnumerations.wdBaselineAlignCenter():
|
||||
pr_.TextAlignment := "center";
|
||||
TSDocxEnumerations.wdBaselineAlignFarEast50():
|
||||
pr_.TextAlignment := "bottom";
|
||||
TSDocxEnumerations.wdBaselineAlignTop():
|
||||
pr_.TextAlignment := "top";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadBaseLineAlignment();virtual;
|
||||
Begin
|
||||
value := pr_.Value("TextAlignment");
|
||||
case value of
|
||||
"auto", nil:
|
||||
return TSDocxEnumerations.wdBaselineAlignAuto();
|
||||
"baseline":
|
||||
return TSDocxEnumerations.wdBaselineAlignBaseline();
|
||||
"center":
|
||||
return TSDocxEnumerations.wdBaselineAlignCenter();
|
||||
"bottom":
|
||||
return TSDocxEnumerations.wdBaselineAlignFarEast50();
|
||||
"top":
|
||||
return TSDocxEnumerations.wdBaselineAlignTop();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteAutoAdjustRightIndent(value);virtual;
|
||||
Begin
|
||||
pr_.AdjustRightInd := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadAutoAdjustRightIndent();virtual;
|
||||
Begin
|
||||
return pr_.Value("AdjustRightInd");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteAlignment(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdAlignParagraphCenter():
|
||||
pr_.Alignment := "center";
|
||||
TSDocxEnumerations.wdAlignParagraphDistribute():
|
||||
pr_.Alignment := "distribute";
|
||||
TSDocxEnumerations.wdAlignParagraphJustify():
|
||||
pr_.Alignment := "both";
|
||||
TSDocxEnumerations.wdAlignParagraphJustifyHi():
|
||||
pr_.Alignment := "highKashida";
|
||||
TSDocxEnumerations.wdAlignParagraphJustifyLow():
|
||||
pr_.Alignment := "lowKashida";
|
||||
TSDocxEnumerations.wdAlignParagraphJustifyMed():
|
||||
pr_.Alignment := "mediumKashida";
|
||||
TSDocxEnumerations.wdAlignParagraphLeft():
|
||||
pr_.Alignment := "left";
|
||||
TSDocxEnumerations.wdAlignParagraphRight():
|
||||
pr_.Alignment := "right";
|
||||
TSDocxEnumerations.wdAlignParagraphThaiJustify():
|
||||
pr_.Alignment := "thaiDistribute";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadAlignment();virtual;
|
||||
Begin
|
||||
value := pr_.Value("Alignment");
|
||||
case value of
|
||||
"center":
|
||||
return TSDocxEnumerations.wdAlignParagraphCenter();
|
||||
"distribute":
|
||||
return TSDocxEnumerations.wdAlignParagraphDistribute();
|
||||
"both", nil:
|
||||
return TSDocxEnumerations.wdAlignParagraphJustify();
|
||||
"highKashida":
|
||||
return TSDocxEnumerations.wdAlignParagraphJustifyHi();
|
||||
"lowKashida":
|
||||
return TSDocxEnumerations.wdAlignParagraphJustifyLow();
|
||||
"mediumKashida":
|
||||
return TSDocxEnumerations.wdAlignParagraphJustifyMed();
|
||||
"left":
|
||||
return TSDocxEnumerations.wdAlignParagraphLeft();
|
||||
"right":
|
||||
return TSDocxEnumerations.wdAlignParagraphRight();
|
||||
"thaiDistribute":
|
||||
return TSDocxEnumerations.wdAlignParagraphThaiJustify();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteAddSpaceBetweenFarEastAndDigit(value);virtual;
|
||||
Begin
|
||||
pr_.AutoSpaceDN := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadAddSpaceBetweenFarEastAndDigit();virtual;
|
||||
Begin
|
||||
return pr_.Value("AutoSpaceDN");
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormat.WriteAddSpaceBetweenFarEastAndAlpha(value);virtual;
|
||||
Begin
|
||||
pr_.AutoSpaceDE := value ? true : false;
|
||||
End;
|
||||
Function TSDocxParagraphFormat.ReadAddSpaceBetweenFarEastAndAlpha();virtual;
|
||||
Begin
|
||||
return pr_.Value("AutoSpaceDE");
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,563 @@
|
||||
Type TSDocxParagraphFormatRange = Class(TSDocxParagraphFormat)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(docx, rangeObj);
|
||||
Function Apply();override;
|
||||
Function ReWrite(value);override;
|
||||
|
||||
private
|
||||
Function CallFunction(pf, value);overload;
|
||||
Function CallFunction(pf);overload;
|
||||
|
||||
private
|
||||
paragraph_arr_;
|
||||
|
||||
public
|
||||
// Methods
|
||||
Function CloseUp();override;
|
||||
Function IndentCharWidth(Count);override;
|
||||
Function IndentFirstLineCharWidth(Count);override;
|
||||
Function OpenOrCloseUp();override;
|
||||
Function OpenUp();override;
|
||||
Function Reset();override;
|
||||
Function Space1();override;
|
||||
Function Space15();override;
|
||||
Function Space2();override;
|
||||
Function TabHangingIndent(Count);override;
|
||||
Function TabIndent(Count);override;
|
||||
|
||||
// property
|
||||
Function WriteWordWrap(value);override;
|
||||
Function ReadWordWrap();override;
|
||||
Function WriteWidowControl(value);override;
|
||||
Function ReadWidowControl();override;
|
||||
Function WriteTextboxTightWrap(value);override;
|
||||
Function ReadTextboxTightWrap();override;
|
||||
Function WriteTabStops(value);override;
|
||||
Function ReadTabStops();override;
|
||||
Function WriteStyle(value);override;
|
||||
Function ReadStyle();override;
|
||||
Function WriteSpaceBeforeAuto(value);override;
|
||||
Function ReadSpaceBeforeAuto();override;
|
||||
Function WriteSpaceBefore(value);override;
|
||||
Function ReadSpaceBefore();override;
|
||||
Function WriteSpaceAfterAuto(value);override;
|
||||
Function ReadSpaceAfterAuto();override;
|
||||
Function WriteSpaceAfter(value);override;
|
||||
Function ReadSpaceAfter();override;
|
||||
Function ReadShading();override;
|
||||
Function WriteRightIndent(value);override;
|
||||
Function ReadRightIndent();override;
|
||||
Function WriteReadingOrder(value);override;
|
||||
Function ReadReadingOrder();override;
|
||||
Function WritePageBreakBefore(value);override;
|
||||
Function ReadPageBreakBefore();override;
|
||||
Function WriteOutlineLevel(value);override;
|
||||
Function ReadOutlineLevel();override;
|
||||
Function WriteNoLineNumber(value);override;
|
||||
Function ReadNoLineNumber();override;
|
||||
Function WriteMirrorIndents(value);override;
|
||||
Function ReadMirrorIndents();override;
|
||||
Function WriteLineUnitBefore(value);override;
|
||||
Function ReadLineUnitBefore();override;
|
||||
Function WriteLineUnitAfter(value);override;
|
||||
Function ReadLineUnitAfter();override;
|
||||
Function WriteLineSpacingRule(value);override;
|
||||
Function ReadLineSpacingRule();override;
|
||||
Function WriteLineSpacing(value);override;
|
||||
Function ReadLineSpacing();override;
|
||||
Function WriteLeftIndent(value);override;
|
||||
Function ReadLeftIndent();override;
|
||||
Function WriteKeepWithNext(value);override;
|
||||
Function ReadKeepWithNext();override;
|
||||
Function WriteKeepTogether(value);override;
|
||||
Function ReadKeepTogether();override;
|
||||
Function WriteHyphenation(value);override;
|
||||
Function ReadHyphenation();override;
|
||||
Function WriteHangingPunctuation(value);override;
|
||||
Function ReadHangingPunctuation();override;
|
||||
Function WriteHalfWidthPunctuationOnTopOfLine(value);override;
|
||||
Function ReadHalfWidthPunctuationOnTopOfLine();override;
|
||||
Function WriteFirstLineIndent(value);override;
|
||||
Function ReadFirstLineIndent();override;
|
||||
Function WriteFarEastLineBreakControl(value);override;
|
||||
Function ReadFarEastLineBreakControl();override;
|
||||
Function ReadDuplicate();override;
|
||||
Function WriteDisableLineHeightGrid(value);override;
|
||||
Function ReadDisableLineHeightGrid();override;
|
||||
Function WriteCollapsedByDefault(value);override;
|
||||
Function ReadCollapsedByDefault();override;
|
||||
Function WriteCharacterUnitRightIndent(value);override;
|
||||
Function ReadCharacterUnitRightIndent();override;
|
||||
Function WriteCharacterUnitLeftIndent(value);override;
|
||||
Function ReadCharacterUnitLeftIndent();override;
|
||||
Function WriteCharacterUnitFirstLineIndent(value);override;
|
||||
Function ReadCharacterUnitFirstLineIndent();override;
|
||||
Function ReadBorders(index);override;
|
||||
Function WriteBaseLineAlignment(value);override;
|
||||
Function ReadBaseLineAlignment();override;
|
||||
Function WriteAutoAdjustRightIndent(value);override;
|
||||
Function ReadAutoAdjustRightIndent();override;
|
||||
Function WriteAlignment(value);override;
|
||||
Function ReadAlignment();override;
|
||||
Function WriteAddSpaceBetweenFarEastAndDigit(value);override;
|
||||
Function ReadAddSpaceBetweenFarEastAndDigit();override;
|
||||
Function WriteAddSpaceBetweenFarEastAndAlpha(value);override;
|
||||
Function ReadAddSpaceBetweenFarEastAndAlpha();override;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxParagraphFormatRange.Init(docx, rangeObj);
|
||||
Begin
|
||||
class(TSDocxParagraphFormat).Init(docx, nil);
|
||||
paragraph_arr_ := sselect distinct(["tparagraph"]) from rangeObj.data_ end;
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.Apply();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).Apply), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.ReWrite(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReWrite), value);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.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 TSDocxParagraphFormatRange.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 TSDocxParagraphFormatRange.CloseUp();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).CloseUp), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.IndentCharWidth(Count);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).IndentCharWidth), Count);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.IndentFirstLineCharWidth(Count);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).IndentFirstLineCharWidth), Count);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.OpenOrCloseUp();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).OpenOrCloseUp), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.OpenUp();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).OpenOrCloseUp), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.Reset();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).Reset), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.Space1();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).Space1), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.Space15();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).Space15), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.Space2();override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).Space2), nil);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.TabHangingIndent(Count);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).TabHangingIndent), Count);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.TabIndent(Count);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).TabIndent), Count);
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxParagraphFormatRange.WriteWordWrap(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteWordWrap), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadWordWrap();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadWordWrap));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteWidowControl(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteWidowControl), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadWidowControl();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadWidowControl));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteTextboxTightWrap(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteTextboxTightWrap), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadTextboxTightWrap();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadTextboxTightWrap));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteTabStops(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteTabStops), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadTabStops();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadTabStops));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteStyle(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteStyle), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadStyle();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadStyle));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteSpaceBeforeAuto(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteSpaceBeforeAuto), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadSpaceBeforeAuto();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadSpaceBeforeAuto));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteSpaceBefore(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteSpaceBefore), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadSpaceBefore();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadSpaceBefore));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteSpaceAfterAuto(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteSpaceAfterAuto), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadSpaceAfterAuto();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadSpaceAfterAuto));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteSpaceAfter(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteSpaceAfter), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadSpaceAfter();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadSpaceAfter));
|
||||
End;
|
||||
|
||||
// TODO
|
||||
Function TSDocxParagraphFormatRange.ReadShading();override;
|
||||
Begin
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteRightIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteRightIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadRightIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadRightIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteReadingOrder(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteReadingOrder), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadReadingOrder();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadReadingOrder));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WritePageBreakBefore(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WritePageBreakBefore), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadPageBreakBefore();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadPageBreakBefore));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteOutlineLevel(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteOutlineLevel), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadOutlineLevel();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadOutlineLevel));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteNoLineNumber(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteNoLineNumber), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadNoLineNumber();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadNoLineNumber));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteMirrorIndents(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteMirrorIndents), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadMirrorIndents();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadMirrorIndents));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteLineUnitBefore(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteLineUnitBefore), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadLineUnitBefore();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadLineUnitBefore));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteLineUnitAfter(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteLineUnitAfter), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadLineUnitAfter();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadLineUnitAfter));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteLineSpacingRule(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteLineSpacingRule), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadLineSpacingRule();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadLineSpacingRule));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteLineSpacing(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteLineSpacing), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadLineSpacing();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadLineSpacing));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteLeftIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteLeftIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadLeftIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadLeftIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteKeepWithNext(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteKeepWithNext), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadKeepWithNext();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadKeepWithNext));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteKeepTogether(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteKeepTogether), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadKeepTogether();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadKeepTogether));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteHyphenation(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteHyphenation), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadHyphenation();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadHyphenation));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteHangingPunctuation(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteHangingPunctuation), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadHangingPunctuation();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadHangingPunctuation));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteHalfWidthPunctuationOnTopOfLine(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteHalfWidthPunctuationOnTopOfLine), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadHalfWidthPunctuationOnTopOfLine();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadHalfWidthPunctuationOnTopOfLine));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteFirstLineIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteFirstLineIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadFirstLineIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadFirstLineIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteFarEastLineBreakControl(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteFarEastLineBreakControl), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadFarEastLineBreakControl();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadFarEastLineBreakControl));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.ReadDuplicate();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadDuplicate));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteDisableLineHeightGrid(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteDisableLineHeightGrid), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadDisableLineHeightGrid();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadDisableLineHeightGrid));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteCollapsedByDefault(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteCollapsedByDefault), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadCollapsedByDefault();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadCollapsedByDefault));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteCharacterUnitRightIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteCharacterUnitRightIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadCharacterUnitRightIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadCharacterUnitRightIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteCharacterUnitLeftIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteCharacterUnitLeftIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadCharacterUnitLeftIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadCharacterUnitLeftIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteCharacterUnitFirstLineIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteCharacterUnitFirstLineIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadCharacterUnitFirstLineIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadCharacterUnitFirstLineIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.ReadBorders(index);override;
|
||||
Begin
|
||||
// 重组一个新的range_arr_
|
||||
arr := array();
|
||||
for i:=0 to length(paragraph_arr_)-1 do
|
||||
arr[i]["entirety"] := paragraph_arr_[i].Root();
|
||||
borders_obj := new TSDocxBordersRange(self.Application, self.Creator, self.Parent);
|
||||
borders_obj.Init(arr);
|
||||
return ifnil(index) ? borders_obj : borders_obj.Item(index);
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteBaseLineAlignment(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteBaseLineAlignment), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadBaseLineAlignment();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadBaseLineAlignment));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteAutoAdjustRightIndent(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteAutoAdjustRightIndent), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadAutoAdjustRightIndent();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadAutoAdjustRightIndent));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteAlignment(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteAlignment), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadAlignment();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadAlignment));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteAddSpaceBetweenFarEastAndDigit(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteAddSpaceBetweenFarEastAndDigit), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadAddSpaceBetweenFarEastAndDigit();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadAddSpaceBetweenFarEastAndDigit));
|
||||
End;
|
||||
|
||||
Function TSDocxParagraphFormatRange.WriteAddSpaceBetweenFarEastAndAlpha(value);override;
|
||||
Begin
|
||||
CallFunction(ThisFunction(class(TSDocxParagraphFormat).WriteAddSpaceBetweenFarEastAndAlpha), value);
|
||||
End;
|
||||
Function TSDocxParagraphFormatRange.ReadAddSpaceBetweenFarEastAndAlpha();override;
|
||||
Begin
|
||||
return CallFunction(ThisFunction(class(TSDocxParagraphFormat).ReadAddSpaceBetweenFarEastAndAlpha));
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,306 @@
|
||||
Type TSDocxShading = Class(TSVbaBase)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(shading);
|
||||
Function Apply();virtual;
|
||||
|
||||
private
|
||||
shading_; // TOfficeObj("TwShading")
|
||||
color_index_;
|
||||
color_;
|
||||
|
||||
public
|
||||
// Properties
|
||||
property BackgroundPatternColor read ReadBackgroundPatternColor write WriteBackgroundPatternColor;
|
||||
property BackgroundPatternColorIndex read ReadBackgroundPatternColorIndex write WriteBackgroundPatternColorIndex;
|
||||
property ForegroundPatternColor read ReadForegroundPatternColor write WriteForegroundPatternColor;
|
||||
property ForegroundPatternColorIndex read ReadForegroundPatternColorIndex write WriteForegroundPatternColorIndex;
|
||||
property Texture read ReadTexture write WriteTexture;
|
||||
Function WriteTexture(value);virtual;
|
||||
Function ReadTexture();virtual;
|
||||
Function WriteForegroundPatternColorIndex(value);virtual;
|
||||
Function ReadForegroundPatternColorIndex();virtual;
|
||||
Function WriteForegroundPatternColor(value);virtual;
|
||||
Function ReadForegroundPatternColor();virtual;
|
||||
Function WriteBackgroundPatternColorIndex(value);virtual;
|
||||
Function ReadBackgroundPatternColorIndex();virtual;
|
||||
Function WriteBackgroundPatternColor(value);virtual;
|
||||
Function ReadBackgroundPatternColor();virtual;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxShading.Init(shading);
|
||||
Begin
|
||||
shading_ := shading;
|
||||
color_index_ := TSWdColorIndex();
|
||||
color_ := TSWdColor();
|
||||
End;
|
||||
|
||||
Function TSDocxShading.Apply();virtual;
|
||||
Begin
|
||||
shading_.Update("first");
|
||||
End;
|
||||
|
||||
// Properties
|
||||
Function TSDocxShading.WriteTexture(value);virtual;
|
||||
Begin
|
||||
case value of
|
||||
TSDocxEnumerations.wdTexture10Percent():
|
||||
shading_.Val := "pct10";
|
||||
TSDocxEnumerations.wdTexture12Pt5Percent():
|
||||
shading_.Val := "pct12";
|
||||
TSDocxEnumerations.wdTexture15Percent():
|
||||
shading_.Val := "pct15";
|
||||
TSDocxEnumerations.wdTexture17Pt5Percent():
|
||||
shading_.Val := "pct17";
|
||||
TSDocxEnumerations.wdTexture20Percent():
|
||||
shading_.Val := "pct20";
|
||||
TSDocxEnumerations.wdTexture22Pt5Percent():
|
||||
shading_.Val := "pct22";
|
||||
TSDocxEnumerations.wdTexture25Percent():
|
||||
shading_.Val := "pct25";
|
||||
TSDocxEnumerations.wdTexture27Pt5Percent():
|
||||
shading_.Val := "clear";
|
||||
TSDocxEnumerations.wdTexture2Pt5Percent():
|
||||
shading_.Val := "clear";
|
||||
TSDocxEnumerations.wdTexture30Percent():
|
||||
shading_.Val := "pct30";
|
||||
TSDocxEnumerations.wdTexture32Pt5Percent():
|
||||
shading_.Val := "pct32";
|
||||
TSDocxEnumerations.wdTexture35Percent():
|
||||
shading_.Val := "pct35";
|
||||
TSDocxEnumerations.wdTexture37Pt5Percent():
|
||||
shading_.Val := "pct37";
|
||||
TSDocxEnumerations.wdTexture40Percent():
|
||||
shading_.Val := "pct40";
|
||||
TSDocxEnumerations.wdTexture42Pt5Percent():
|
||||
shading_.Val := "pct42";
|
||||
TSDocxEnumerations.wdTexture45Percent():
|
||||
shading_.Val := "pct45";
|
||||
TSDocxEnumerations.wdTexture47Pt5Percent():
|
||||
shading_.Val := "pct47";
|
||||
TSDocxEnumerations.wdTexture50Percent():
|
||||
shading_.Val := "pct50";
|
||||
TSDocxEnumerations.wdTexture52Pt5Percent():
|
||||
shading_.Val := "pct52";
|
||||
TSDocxEnumerations.wdTexture55Percent():
|
||||
shading_.Val := "pct55";
|
||||
TSDocxEnumerations.wdTexture57Pt5Percent():
|
||||
shading_.Val := "clear";
|
||||
TSDocxEnumerations.wdTexture5Percent():
|
||||
shading_.Val := "pct5";
|
||||
TSDocxEnumerations.wdTexture60Percent():
|
||||
shading_.Val := "pct60";
|
||||
TSDocxEnumerations.wdTexture62Pt5Percent():
|
||||
shading_.Val := "pct62";
|
||||
TSDocxEnumerations.wdTexture65Percent():
|
||||
shading_.Val := "pct65";
|
||||
TSDocxEnumerations.wdTexture67Pt5Percent():
|
||||
shading_.Val := "pct67";
|
||||
TSDocxEnumerations.wdTexture70Percent():
|
||||
shading_.Val := "pct70";
|
||||
TSDocxEnumerations.wdTexture72Pt5Percent():
|
||||
shading_.Val := "pct72";
|
||||
TSDocxEnumerations.wdTexture75Percent():
|
||||
shading_.Val := "pct75";
|
||||
TSDocxEnumerations.wdTexture77Pt5Percent():
|
||||
shading_.Val := "pct77";
|
||||
TSDocxEnumerations.wdTexture7Pt5Percent():
|
||||
shading_.Val := "clear";
|
||||
TSDocxEnumerations.wdTexture80Percent():
|
||||
shading_.Val := "pct80";
|
||||
TSDocxEnumerations.wdTexture82Pt5Percent():
|
||||
shading_.Val := "pct82";
|
||||
TSDocxEnumerations.wdTexture85Percent():
|
||||
shading_.Val := "pct85";
|
||||
TSDocxEnumerations.wdTexture87Pt5Percent():
|
||||
shading_.Val := "pct87";
|
||||
TSDocxEnumerations.wdTexture90Percent():
|
||||
shading_.Val := "pct90";
|
||||
TSDocxEnumerations.wdTexture92Pt5Percent():
|
||||
shading_.Val := "pct92";
|
||||
TSDocxEnumerations.wdTexture95Percent():
|
||||
shading_.Val := "pct95";
|
||||
TSDocxEnumerations.wdTexture97Pt5Percent():
|
||||
shading_.Val := "pct97";
|
||||
TSDocxEnumerations.wdTextureCross():
|
||||
shading_.Val := "thinHorzCross";
|
||||
TSDocxEnumerations.wdTextureDarkCross():
|
||||
shading_.Val := "HorzCross";
|
||||
TSDocxEnumerations.wdTextureDarkDiagonalCross():
|
||||
shading_.Val := "diagCross";
|
||||
TSDocxEnumerations.wdTextureDarkDiagonalDown():
|
||||
shading_.Val := "reverseDiagStripe";
|
||||
TSDocxEnumerations.wdTextureDarkDiagonalUp():
|
||||
shading_.Val := "diagStripe";
|
||||
TSDocxEnumerations.wdTextureDarkHorizontal():
|
||||
shading_.Val := "horzStripe";
|
||||
TSDocxEnumerations.wdTextureDarkVertical():
|
||||
shading_.Val := "vertStripe";
|
||||
TSDocxEnumerations.wdTextureDiagonalCross():
|
||||
shading_.Val := "thinDiagCross";
|
||||
TSDocxEnumerations.wdTextureDiagonalDown():
|
||||
shading_.Val := "thinReverseDiagStripe";
|
||||
TSDocxEnumerations.wdTextureDiagonalUp():
|
||||
shading_.Val := "thinDiagStripe";
|
||||
TSDocxEnumerations.wdTextureHorizontal():
|
||||
shading_.Val := "thinHorzStripe";
|
||||
TSDocxEnumerations.wdTextureNone():
|
||||
shading_.Val := "none";
|
||||
TSDocxEnumerations.wdTextureSolid():
|
||||
shading_.Val := "solid";
|
||||
TSDocxEnumerations.wdTextureVertical():
|
||||
shading_.Val := "thinVertStripe";
|
||||
end;
|
||||
End;
|
||||
Function TSDocxShading.ReadTexture();virtual;
|
||||
Begin
|
||||
value := shading_.Value("Val");
|
||||
case value of
|
||||
"pct10":
|
||||
return TSDocxEnumerations.wdTexture10Percent();
|
||||
"pct12":
|
||||
return TSDocxEnumerations.wdTexture12Pt5Percent();
|
||||
"pct15":
|
||||
return TSDocxEnumerations.wdTexture15Percent();
|
||||
"pct17":
|
||||
return TSDocxEnumerations.wdTexture17Pt5Percent();
|
||||
"pct20":
|
||||
return TSDocxEnumerations.wdTexture20Percent();
|
||||
"pct22":
|
||||
return TSDocxEnumerations.wdTexture22Pt5Percent();
|
||||
"pct25":
|
||||
return TSDocxEnumerations.wdTexture25Percent();
|
||||
"clear":
|
||||
return TSDocxEnumerations.wdTexture27Pt5Percent();
|
||||
"clear":
|
||||
return TSDocxEnumerations.wdTexture2Pt5Percent();
|
||||
"pct30":
|
||||
return TSDocxEnumerations.wdTexture30Percent();
|
||||
"pct32":
|
||||
return TSDocxEnumerations.wdTexture32Pt5Percent();
|
||||
"pct35":
|
||||
return TSDocxEnumerations.wdTexture35Percent();
|
||||
"pct37":
|
||||
return TSDocxEnumerations.wdTexture37Pt5Percent();
|
||||
"pct40":
|
||||
return TSDocxEnumerations.wdTexture40Percent();
|
||||
"pct42":
|
||||
return TSDocxEnumerations.wdTexture42Pt5Percent();
|
||||
"pct45":
|
||||
return TSDocxEnumerations.wdTexture45Percent();
|
||||
"pct47":
|
||||
return TSDocxEnumerations.wdTexture47Pt5Percent();
|
||||
"pct50":
|
||||
return TSDocxEnumerations.wdTexture50Percent();
|
||||
"pct52":
|
||||
return TSDocxEnumerations.wdTexture52Pt5Percent();
|
||||
"pct55":
|
||||
return TSDocxEnumerations.wdTexture55Percent();
|
||||
"clear":
|
||||
return TSDocxEnumerations.wdTexture57Pt5Percent();
|
||||
"pct5":
|
||||
return TSDocxEnumerations.wdTexture5Percent();
|
||||
"pct60":
|
||||
return TSDocxEnumerations.wdTexture60Percent();
|
||||
"pct62":
|
||||
return TSDocxEnumerations.wdTexture62Pt5Percent();
|
||||
"pct65":
|
||||
return TSDocxEnumerations.wdTexture65Percent();
|
||||
"pct67":
|
||||
return TSDocxEnumerations.wdTexture67Pt5Percent();
|
||||
"pct70":
|
||||
return TSDocxEnumerations.wdTexture70Percent();
|
||||
"pct72":
|
||||
return TSDocxEnumerations.wdTexture72Pt5Percent();
|
||||
"pct75":
|
||||
return TSDocxEnumerations.wdTexture75Percent();
|
||||
"pct77":
|
||||
return TSDocxEnumerations.wdTexture77Pt5Percent();
|
||||
"clear":
|
||||
return TSDocxEnumerations.wdTexture7Pt5Percent();
|
||||
"pct80":
|
||||
return TSDocxEnumerations.wdTexture80Percent();
|
||||
"pct82":
|
||||
return TSDocxEnumerations.wdTexture82Pt5Percent();
|
||||
"pct85":
|
||||
return TSDocxEnumerations.wdTexture85Percent();
|
||||
"pct87":
|
||||
return TSDocxEnumerations.wdTexture87Pt5Percent();
|
||||
"pct90":
|
||||
return TSDocxEnumerations.wdTexture90Percent();
|
||||
"pct92":
|
||||
return TSDocxEnumerations.wdTexture92Pt5Percent();
|
||||
"pct95":
|
||||
return TSDocxEnumerations.wdTexture95Percent();
|
||||
"pct97":
|
||||
return TSDocxEnumerations.wdTexture97Pt5Percent();
|
||||
"thinHorzCross":
|
||||
return TSDocxEnumerations.wdTextureCross();
|
||||
"HorzCross":
|
||||
return TSDocxEnumerations.wdTextureDarkCross();
|
||||
"diagCross":
|
||||
return TSDocxEnumerations.wdTextureDarkDiagonalCross();
|
||||
"reverseDiagStripe":
|
||||
return TSDocxEnumerations.wdTextureDarkDiagonalDown();
|
||||
"diagStripe":
|
||||
return TSDocxEnumerations.wdTextureDarkDiagonalUp();
|
||||
"horzStripe":
|
||||
return TSDocxEnumerations.wdTextureDarkHorizontal();
|
||||
"vertStripe":
|
||||
return TSDocxEnumerations.wdTextureDarkVertical();
|
||||
"thinDiagCross":
|
||||
return TSDocxEnumerations.wdTextureDiagonalCross();
|
||||
"thinReverseDiagStripe":
|
||||
return TSDocxEnumerations.wdTextureDiagonalDown();
|
||||
"thinDiagStripe":
|
||||
return TSDocxEnumerations.wdTextureDiagonalUp();
|
||||
"thinHorzStripe":
|
||||
return TSDocxEnumerations.wdTextureHorizontal();
|
||||
"none":
|
||||
return TSDocxEnumerations.wdTextureNone();
|
||||
"solid":
|
||||
return TSDocxEnumerations.wdTextureSolid();
|
||||
"thinVertStripe":
|
||||
return TSDocxEnumerations.wdTextureVertical();
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSDocxShading.WriteForegroundPatternColorIndex(value);virtual;
|
||||
Begin
|
||||
shading_.Color := color_index_[value];
|
||||
End;
|
||||
Function TSDocxShading.ReadForegroundPatternColorIndex();virtual;
|
||||
Begin
|
||||
return color_index_[shading_.Value("Color")];
|
||||
End;
|
||||
|
||||
Function TSDocxShading.WriteForegroundPatternColor(value);virtual;
|
||||
Begin
|
||||
shading_.Color := color_[value];
|
||||
End;
|
||||
Function TSDocxShading.ReadForegroundPatternColor();virtual;
|
||||
Begin
|
||||
return color_[shading_.Value("Color")];
|
||||
End;
|
||||
|
||||
Function TSDocxShading.WriteBackgroundPatternColorIndex(value);virtual;
|
||||
Begin
|
||||
shading_.Fill := color_index_[value];
|
||||
End;
|
||||
Function TSDocxShading.ReadBackgroundPatternColorIndex();virtual;
|
||||
Begin
|
||||
return color_index_[shading_.Value("Fill")];
|
||||
End;
|
||||
|
||||
Function TSDocxShading.WriteBackgroundPatternColor(value);
|
||||
Begin
|
||||
shading_.Fill := color_[value];
|
||||
End;
|
||||
Function TSDocxShading.ReadBackgroundPatternColor();
|
||||
Begin
|
||||
return color_[shading_.Value("Fill")];
|
||||
End;
|
||||
@@ -0,0 +1,166 @@
|
||||
Type TSDocxShadingRange = Class(TSDocxShading)
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
public
|
||||
Function Init(rangeObj);
|
||||
Function Apply();override;
|
||||
|
||||
private
|
||||
Function GetShadingObjectByNode(node);
|
||||
Function GetShading(arr);
|
||||
Function CallFunction(fname, value);overload;
|
||||
Function CallFunction(fname);overload;
|
||||
|
||||
private
|
||||
range_obj_;
|
||||
shading_hash_;
|
||||
|
||||
public
|
||||
Function WriteTexture(value);override;
|
||||
Function ReadTexture();override;
|
||||
Function WriteForegroundPatternColorIndex(value);override;
|
||||
Function ReadForegroundPatternColorIndex();override;
|
||||
Function WriteForegroundPatternColor(value);override;
|
||||
Function ReadForegroundPatternColor();override;
|
||||
Function WriteBackgroundPatternColorIndex(value);override;
|
||||
Function ReadBackgroundPatternColorIndex();override;
|
||||
Function WriteBackgroundPatternColor(value);override;
|
||||
Function ReadBackgroundPatternColor();override;
|
||||
|
||||
End;
|
||||
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function TSDocxShadingRange.Init(rangeObj);
|
||||
Begin
|
||||
range_obj_ := rangeObj;
|
||||
shading_hash_ := array();
|
||||
class(TSDocxShading).Init(nil);
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.Apply();override;
|
||||
Begin
|
||||
CallFunction("Apply");
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.GetShading(arr);
|
||||
Begin
|
||||
if arr.Entirety then
|
||||
begin
|
||||
if not ifnil(shading_hash_[arr.Entirety]) then return nil;
|
||||
shading := GetShadingObjectByNode(arr.Entirety);
|
||||
shading_hash_[arr.Entirety] := shading;
|
||||
end
|
||||
else begin
|
||||
trun := arr.TRun;
|
||||
if not ifObj(trun.Root()) then return nil;
|
||||
shading := new TSDocxShading(self.Application, self.Creator, self.Parent);
|
||||
shading.Init(trun.rPr.Shading);
|
||||
end
|
||||
return shading;
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.GetShadingObjectByNode(node);
|
||||
Begin
|
||||
name := node.GetName();
|
||||
if name = "w:p" then
|
||||
begin
|
||||
obj := TOfficeObj("TParagraph");
|
||||
obj.Init(node);
|
||||
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
||||
paragraph_obj.Init(nil, obj, nil);
|
||||
return paragraph_obj.Shading;
|
||||
end
|
||||
else if name = "w:tbl" then
|
||||
begin
|
||||
obj := TOfficeObj("TTable");
|
||||
obj.Init(node);
|
||||
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
|
||||
table_obj.Init(nil, obj);
|
||||
return table_obj.Shading;
|
||||
end
|
||||
else if name = "w:tc" then
|
||||
begin
|
||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
||||
cell_obj.Init(node);
|
||||
return cell_obj.Shading;
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.CallFunction(fname, value);overload;
|
||||
Begin
|
||||
// 这样设计是为了段落走走段落的shading,table走table的,cell走cell的
|
||||
range_obj_.SplitRun();
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
shading := GetShading(range_obj_[i]);
|
||||
if ifnil(shading) then continue;
|
||||
pf := FindFunction(fname, shading);
|
||||
pf.Do(value);
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.CallFunction(fname);overload;
|
||||
Begin
|
||||
range_obj_.SplitRun();
|
||||
ret := nil;
|
||||
for i:=0 to range_obj_.Size()-1 do
|
||||
begin
|
||||
arr := range_obj_[i];
|
||||
if arr.Entirety and shading_hash_[arr.Entirety] then shading := shading_hash_[arr.Entirety];
|
||||
else shading := GetShading(range_obj_[i]);
|
||||
if ifnil(shading) then continue;
|
||||
pf := FindFunction(fname, shading);
|
||||
r := pf.Do();
|
||||
if ifnil(ret) then ret := r;
|
||||
if ret <> r then return TSDocxEnumerations.WdUnderline();
|
||||
end
|
||||
return ret;
|
||||
End;
|
||||
|
||||
// property
|
||||
Function TSDocxShadingRange.WriteTexture(value);override;
|
||||
Begin
|
||||
CallFunction("WriteTexture", value);
|
||||
End;
|
||||
Function TSDocxShadingRange.ReadTexture();override;
|
||||
Begin
|
||||
return CallFunction("ReadTexture");
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.WriteForegroundPatternColorIndex(value);override;
|
||||
Begin
|
||||
CallFunction("WriteForegroundPatternColorIndex", value);
|
||||
End;
|
||||
Function TSDocxShadingRange.ReadForegroundPatternColorIndex();override;
|
||||
Begin
|
||||
return CallFunction("ReadForegroundPatternColorIndex");
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.WriteForegroundPatternColor(value);override;
|
||||
Begin
|
||||
CallFunction("WriteForegroundPatternColor", value);
|
||||
End;
|
||||
Function TSDocxShadingRange.ReadForegroundPatternColor();override;
|
||||
Begin
|
||||
return CallFunction("ReadForegroundPatternColor");
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.WriteBackgroundPatternColorIndex(value);override;
|
||||
Begin
|
||||
CallFunction("WriteBackgroundPatternColorIndex", value);
|
||||
End;
|
||||
Function TSDocxShadingRange.ReadBackgroundPatternColorIndex();override;
|
||||
Begin
|
||||
return CallFunction("ReadBackgroundPatternColorIndex");
|
||||
End;
|
||||
|
||||
Function TSDocxShadingRange.WriteBackgroundPatternColor(value);override;
|
||||
Begin
|
||||
CallFunction("WriteBackgroundPatternColor", value);
|
||||
End;
|
||||
Function TSDocxShadingRange.ReadBackgroundPatternColor();override;
|
||||
Begin
|
||||
return CallFunction("ReadBackgroundPatternColor");
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
Function TSWdColor();
|
||||
Begin
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
hash := array();
|
||||
hash[wdColorAqua()] := "33CCCC";
|
||||
hash[wdColorAutomatic()] := "auto";
|
||||
hash[wdColorBlack()] := "000000";
|
||||
hash[wdColorBlue()] := "0000FF";
|
||||
hash[wdColorBlueGray()] := "666699";
|
||||
hash[wdColorBrightGreen()] := "00FF00";
|
||||
hash[wdColorBrown()] := "993300";
|
||||
hash[wdColorDarkBlue()] := "000080";
|
||||
hash[wdColorDarkGreen()] := "003300";
|
||||
hash[wdColorDarkRed()] := "800000";
|
||||
hash[wdColorDarkTeal()] := "003366";
|
||||
hash[wdColorDarkYellow()] := "808000";
|
||||
hash[wdColorGold()] := "FFCC00";
|
||||
hash[wdColorGray05()] := "F3F3F3";
|
||||
hash[wdColorGray10()] := "E6E6E6";
|
||||
hash[wdColorGray125()] := "E0E0E0";
|
||||
hash[wdColorGray15()] := "D9D9D9";
|
||||
hash[wdColorGray20()] := "CCCCCC";
|
||||
hash[wdColorGray25()] := "C0C0C0";
|
||||
hash[wdColorGray30()] := "B3B3B3";
|
||||
hash[wdColorGray35()] := "A6A6A6";
|
||||
hash[wdColorGray375()] := "A0A0A0";
|
||||
hash[wdColorGray40()] := "999999";
|
||||
hash[wdColorGray45()] := "8C8C8C";
|
||||
hash[wdColorGray50()] := "808080";
|
||||
hash[wdColorGray55()] := "737373";
|
||||
hash[wdColorGray60()] := "666666";
|
||||
hash[wdColorGray625()] := "606060";
|
||||
hash[wdColorGray65()] := "595959";
|
||||
hash[wdColorGray70()] := "4C4C4C";
|
||||
hash[wdColorGray75()] := "404040";
|
||||
hash[wdColorGray80()] := "333333";
|
||||
hash[wdColorGray85()] := "262626";
|
||||
hash[wdColorGray875()] := "202020";
|
||||
hash[wdColorGray90()] := "191919";
|
||||
hash[wdColorGray95()] := "0C0C0C";
|
||||
hash[wdColorGreen()] := "008000";
|
||||
hash[wdColorIndigo()] := "333399";
|
||||
hash[wdColorLavender()] := "CC99FF";
|
||||
hash[wdColorLightBlue()] := "3366FF";
|
||||
hash[wdColorLightGreen()] := "CCFFCC";
|
||||
hash[wdColorLightOrange()] := "FF9900";
|
||||
hash[wdColorLightTurquoise()] := "CCFFFF";
|
||||
hash[wdColorLightYellow()] := "FFFF99";
|
||||
hash[wdColorLime()] := "99CC00";
|
||||
hash[wdColorOliveGreen()] := "333300";
|
||||
hash[wdColorOrange()] := "FF6600";
|
||||
hash[wdColorPaleBlue()] := "99CCFF";
|
||||
hash[wdColorPink()] := "FF00FF";
|
||||
hash[wdColorPlum()] := "993366";
|
||||
hash[wdColorRed()] := "FF0000";
|
||||
hash[wdColorRose()] := "FF99CC";
|
||||
hash[wdColorSeaGreen()] := "339966";
|
||||
hash[wdColorSkyBlue()] := "00CCFF";
|
||||
hash[wdColorTan()] := "FFCC99";
|
||||
hash[wdColorTeal()] := "008080";
|
||||
hash[wdColorTurquoise()] := "00FFFF";
|
||||
hash[wdColorViolet()] := "800080";
|
||||
hash[wdColorWhite()] := "FFFFFF";
|
||||
hash[wdColorYellow()] := "FFFF00";
|
||||
|
||||
hash2 := hash;
|
||||
for k, v in hash do
|
||||
hash2[v] := k;
|
||||
if ifnil(hash2[nil]) then hash2[nil] := TSDocxEnumerations.wdColorAutomatic();
|
||||
|
||||
return hash2;
|
||||
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
Function TSWdColorIndex();
|
||||
Begin
|
||||
Uses TSDocxEnumerations;
|
||||
|
||||
hash := array();
|
||||
hash[TSDocxEnumerations.wdAuto()] := nil;
|
||||
hash[TSDocxEnumerations.wdBlack()] := "000000";
|
||||
hash[TSDocxEnumerations.wdBlue()] := "0000FF";
|
||||
hash[TSDocxEnumerations.wdBrightGreen()] := "00FF00";
|
||||
hash[TSDocxEnumerations.wdByAuthor()] := nil;
|
||||
hash[TSDocxEnumerations.wdDarkBlue()] := "000080";
|
||||
hash[TSDocxEnumerations.wdDarkRed()] := "800000";
|
||||
hash[TSDocxEnumerations.wdDarkYellow()] := "808000";
|
||||
hash[TSDocxEnumerations.wdGray25()] := "C0C0C0";
|
||||
hash[TSDocxEnumerations.wdGray50()] := "808080";
|
||||
hash[TSDocxEnumerations.wdGreen()] := "008000";
|
||||
hash[TSDocxEnumerations.wdNoHighlight()] := nil;
|
||||
hash[TSDocxEnumerations.wdPink()] := "FF00FF";
|
||||
hash[TSDocxEnumerations.wdRed()] := "FF0000";
|
||||
hash[TSDocxEnumerations.wdTeal()] := "008080";
|
||||
hash[TSDocxEnumerations.wdTurquoise()] := "00FFFF";
|
||||
hash[TSDocxEnumerations.wdViolet()] := "800080";
|
||||
hash[TSDocxEnumerations.wdWhite()] := "FFFFFF";
|
||||
hash[TSDocxEnumerations.wdYellow()] := "FFFF00";
|
||||
|
||||
hash2 := hash;
|
||||
for k, v in hash do
|
||||
hash2[v] := k;
|
||||
if ifnil(hash[nil]) then hash2[nil] := TSDocxEnumerations.wdAuto();
|
||||
|
||||
return hash2;
|
||||
|
||||
End;
|
||||
|
||||
@@ -0,0 +1,489 @@
|
||||
Type TSWdRange = Class
|
||||
public
|
||||
Function Create(rootNode, startP, endP);overload;
|
||||
Function Create(rootNode, targetNode);overload;
|
||||
Function Init();
|
||||
Function Operator[](index);
|
||||
|
||||
Function Run();
|
||||
Function Refresh();
|
||||
Function GetStart();
|
||||
Function GetEnd();
|
||||
Function SplitRun();overload;
|
||||
Function SplitRun(index);overload;
|
||||
Function Clear(deleteAll);
|
||||
Function Size();
|
||||
|
||||
Function Print();
|
||||
Begin
|
||||
println("data = {}", data_);
|
||||
End;
|
||||
|
||||
private
|
||||
Function FindRangeByPosition(startNode);
|
||||
Function FindRangeByNode(startNode);
|
||||
Function AddEntirety(len, node);
|
||||
Function AddRunInfo(runNode, tParagraph);
|
||||
Function AddRunInfo2(runNode, tParagraph);
|
||||
Function ParagraphRange(node);
|
||||
Function CalcPosition(startNode);
|
||||
|
||||
public
|
||||
data_; // 管理range结构的数组,字段如下
|
||||
// lsplit: 左边丢弃的字符数
|
||||
// rsplit: 右边丢弃的字符数
|
||||
// tparagraph: TOfficeObj("TParagraph")对象
|
||||
// trun: TOfficeObj("TRun")对象
|
||||
// text: 文本内容
|
||||
// entirety: 是否是完整的段落/表格/单元格
|
||||
// -- 以便在对range操作时候知道操作一个段落还是一个run,比如range.shading range.Border
|
||||
|
||||
private
|
||||
start_position_; // 开始位置
|
||||
end_position_; // 结束位置, 开始与结束遵循左闭右开原则
|
||||
cur_position_; // 当前位置
|
||||
root_node_; // 根节点
|
||||
target_node_; // 目标节点,使用paragraph.Range,table.Range, cell.Range时用
|
||||
split_flag_; // 切割标志
|
||||
|
||||
proxy_; // 代理类,提供外部对数组data_的读写
|
||||
|
||||
End;
|
||||
|
||||
Type Proxy = Class
|
||||
public
|
||||
Function Create(obj);
|
||||
|
||||
property TRun read ReadTRun write WriteTRun;
|
||||
property TParagraph read ReadTParagraph write WriteTParagraph;
|
||||
property Entirety read ReadEntirety write WriteEntirety;
|
||||
Function WriteEntirety(value);
|
||||
Function ReadEntirety();
|
||||
Function WriteTParagraph(value);
|
||||
Function ReadTParagraph();
|
||||
Function WriteTRun(value);
|
||||
Function ReadTRun();
|
||||
|
||||
[weakref]obj_;
|
||||
index_;
|
||||
End;
|
||||
|
||||
Function Proxy.Create(obj);
|
||||
Begin
|
||||
obj_ := obj;
|
||||
index_ := nil;
|
||||
End;
|
||||
|
||||
Function Proxy.WriteEntirety(value);
|
||||
Begin
|
||||
obj_.data_[index_]["entirety"] := value;
|
||||
End;
|
||||
Function Proxy.ReadEntirety();
|
||||
Begin
|
||||
return obj_.data_[index_]["entirety"];
|
||||
End;
|
||||
|
||||
Function Proxy.WriteTParagraph(value);
|
||||
Begin
|
||||
obj_.data_[index_]["tparagraph"] := value;
|
||||
End;
|
||||
Function Proxy.ReadTParagraph();
|
||||
Begin
|
||||
return obj_.data_[index_]["tparagraph"];
|
||||
End;
|
||||
|
||||
Function Proxy.WriteTRun(value);
|
||||
Begin
|
||||
obj_.data_[index_]["trun"] := value;
|
||||
End;
|
||||
Function Proxy.ReadTRun();
|
||||
Begin
|
||||
return obj_.data_[index_]["trun"];
|
||||
End;
|
||||
|
||||
// TSWdRange实现
|
||||
Function TSWdRange.Create(rootNode, startP, endP);overload;
|
||||
Begin
|
||||
root_node_ := rootNode;
|
||||
start_position_ := startP;
|
||||
end_position_ := endP = -1 ? INF : endP;
|
||||
target_node_ := nil;
|
||||
self.Init();
|
||||
End;
|
||||
|
||||
Function TSWdRange.Create(rootNode, targetNode);overload;
|
||||
Begin
|
||||
root_node_ := rootNode;
|
||||
target_node_ := targetNode;
|
||||
start_position_ := nil;
|
||||
end_position_ := nil;
|
||||
self.Init();
|
||||
End;
|
||||
|
||||
Function TSWdRange.Init();
|
||||
Begin
|
||||
cur_position_ := 0;
|
||||
split_flag_ := false;
|
||||
data_ := array();
|
||||
self.Run();
|
||||
proxy_ := new Proxy(self);
|
||||
End;
|
||||
|
||||
Function Operator TSWdRange.[](index);
|
||||
Begin
|
||||
proxy_.index_ := index;
|
||||
return proxy_;
|
||||
End;
|
||||
|
||||
Function TSWdRange.Run();
|
||||
Begin
|
||||
if target_node_ then
|
||||
self.FindRangeByNode(target_node_);
|
||||
else
|
||||
self.FindRangeByPosition(root_node_);
|
||||
End;
|
||||
|
||||
Function TSWdRange.Refresh();
|
||||
Begin
|
||||
self.Init();
|
||||
End;
|
||||
|
||||
Function TSWdRange.Size();
|
||||
Begin
|
||||
return length(data_);
|
||||
End;
|
||||
|
||||
Function TSWdRange.GetStart();
|
||||
Begin
|
||||
if ifnil(start_position_) then self.CalcPosition(root_node_);
|
||||
return start_position_;
|
||||
End;
|
||||
|
||||
Function TSWdRange.GetEnd();
|
||||
Begin
|
||||
if ifnil(end_position_) then self.CalcPosition(root_node_);
|
||||
return end_position_;
|
||||
End;
|
||||
|
||||
Function TSWdRange.SplitRun();overload;
|
||||
Begin
|
||||
if split_flag_ then return;
|
||||
for i:=0 to length(data_)-1 do
|
||||
self.SplitRun(i);
|
||||
split_flag_ := true;
|
||||
End;
|
||||
|
||||
Function TSWdRange.SplitRun(index);overload;
|
||||
Begin
|
||||
if ifnil(data_[index]["lsplit"]) and ifnil(data_[index]["rsplit"]) then return data_[index];
|
||||
paragraph := data_[index]["tparagraph"];
|
||||
run := data_[index]["trun"];
|
||||
text := data_[index]["text"];
|
||||
if data_[index]["lsplit"] then // 分割左边
|
||||
begin
|
||||
lpos := data_[index]["lsplit"];
|
||||
run.SetText(AnsiToUtf8(leftstr(text, lpos)));
|
||||
new_run := paragraph.AppendRun(run);
|
||||
new_run.CopyFontFormat(run);
|
||||
text := rightstr(text, lengthw(text)-lpos);
|
||||
new_run.SetText(AnsiToUtf8(text));
|
||||
data_[index]["text"] := text;
|
||||
data_[index]["lsplit"] := nil;
|
||||
run := new_run;
|
||||
end
|
||||
if data_[index]["rsplit"] then // 分割右边的run
|
||||
begin
|
||||
rpos := data_[index]["rsplit"];
|
||||
new_run := paragraph.AppendRun(run);
|
||||
new_run.CopyFontFormat(run);
|
||||
new_run.SetText(AnsiToUtf8(rightstr(text, rpos)));
|
||||
new_text := AnsiToUtf8(leftstr(text, lengthw(text) - rpos));
|
||||
run.SetText(new_text);
|
||||
data_[index]["rsplit"] := nil;
|
||||
data_[index]["text"] := new_text;
|
||||
end
|
||||
data_[index]["trun"] := run;
|
||||
End;
|
||||
|
||||
Function TSWdRange.Clear(deleteAll);
|
||||
Begin
|
||||
self.SplitRun();
|
||||
arr := array();
|
||||
first := data_[0];
|
||||
para := first["tparagraph"];
|
||||
if deleteAll then arr[length(arr)] := para.Root();
|
||||
for i:=1 to length(data_)-1 do
|
||||
begin
|
||||
if data_[i]["tparagraph"] <> para then
|
||||
begin
|
||||
arr[length(arr)] := data_[i]["tparagraph"].Root();
|
||||
end
|
||||
else begin
|
||||
p := data_[i]["tparagraph"];
|
||||
r := data_[i]["trun"];
|
||||
if ifObj(r.Root()) then p.Root().DeleteChild(r.Root());
|
||||
end
|
||||
end
|
||||
first["trun"].ClearText();
|
||||
data_ := array();
|
||||
if not deleteAll then data_[0] := first;
|
||||
return arr;
|
||||
End;
|
||||
|
||||
Function TSWdRange.FindRangeByPosition(startNode);
|
||||
Begin
|
||||
node := startNode.FirstChildElement();
|
||||
while ifObj(node) do
|
||||
begin
|
||||
len := length(data_); // 标记完整段落/表格的起始位置
|
||||
case node.GetName() of
|
||||
"w:p":
|
||||
begin
|
||||
paragraph_obj := TOfficeObj("TParagraph");
|
||||
paragraph_obj.Init(node);
|
||||
if paragraph_obj.Empty() then // 空段落
|
||||
begin
|
||||
self.AddRunInfo(nil, paragraph_obj);
|
||||
end
|
||||
else begin
|
||||
sub_node := node.FirstChildElement();
|
||||
while ifObj(sub_node) do
|
||||
begin
|
||||
case sub_node.GetName() of
|
||||
"w:r":
|
||||
begin
|
||||
self.AddRunInfo(sub_node, paragraph_obj);
|
||||
if cur_position_ >= end_position_ then return 1;
|
||||
end
|
||||
|
||||
"w:ins", "w:del":
|
||||
begin
|
||||
run_node := sub_node.FirstChildElement("w:r");
|
||||
while ifObj(run_node) do
|
||||
begin
|
||||
self.AddRunInfo(run_node, paragraph_obj);
|
||||
if cur_position_ >= end_position_ then return 1;
|
||||
run_node := run_node.NextElement("w:r");
|
||||
end
|
||||
end
|
||||
end;
|
||||
sub_node := sub_node.NextElement();
|
||||
end
|
||||
// 完整段落
|
||||
cur_position_ += 1;
|
||||
end
|
||||
end
|
||||
|
||||
"w:tbl":
|
||||
begin
|
||||
tr := node.FirstChildElement("w:tr");
|
||||
while ifObj(tr) do
|
||||
begin
|
||||
tc := tr.FirstChildElement("w:tc");
|
||||
while ifObj(tc) do
|
||||
begin
|
||||
cell_len := length(data_);
|
||||
flag := self.FindRangeByPosition(tc);
|
||||
if flag then return 1;
|
||||
if cur_position_ >= end_position_ then return 1;
|
||||
self.AddEntirety(cell_len, tc);
|
||||
tc := tc.NextElement("w:tc");
|
||||
end
|
||||
cur_position_ += 1;
|
||||
if cur_position_ >= end_position_ then return 1;
|
||||
tr := tr.NextElement("w:tr");
|
||||
end
|
||||
end
|
||||
end;
|
||||
self.AddEntirety(len, node);
|
||||
if cur_position_ >= end_position_ then return 1;
|
||||
node := node.NextElement();
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSWdRange.AddEntirety(len, node);
|
||||
Begin
|
||||
for i:=len to length(data_)-1 do
|
||||
data_[i]["entirety"] := node;
|
||||
End;
|
||||
|
||||
Function TSWdRange.AddRunInfo(runNode, tParagraph);
|
||||
Begin
|
||||
run_obj := TOfficeObj("TRun");
|
||||
run_obj.Init(runNode);
|
||||
text := ifObj(runNode) ? run_obj.Text() : "";
|
||||
if class(TSXml).IsUtf8() then text := Utf8ToAnsi(text);
|
||||
len := text ? lengthw(text) : 1;
|
||||
|
||||
if cur_position_ + len > start_position_ then
|
||||
begin
|
||||
length := length(data_);
|
||||
data_[length]["tparagraph"] := tparagraph;
|
||||
data_[length]["trun"] := run_obj;
|
||||
data_[length]["text"] := text;
|
||||
|
||||
// 左边切割,左边丢弃的字符数
|
||||
if cur_position_ < start_position_ and cur_position_ + len >= start_position_ + 1 then
|
||||
data_[length]["lsplit"] := start_position_ - cur_position_;
|
||||
// 右边切割,右边丢弃的字符数
|
||||
if cur_position_ + len > end_position_ then
|
||||
data_[length]["rsplit"] := cur_position_ + len - end_position_;
|
||||
end
|
||||
cur_position_ += len;
|
||||
End;
|
||||
|
||||
Function TSWdRange.FindRangeByNode(startNode);
|
||||
Begin
|
||||
tc_pf := function(tc);
|
||||
begin
|
||||
node := tc.FirstChildElement();
|
||||
while ifObj(node) do
|
||||
begin
|
||||
self.FindRangeByNode(node);
|
||||
node := node.NextElement();
|
||||
end
|
||||
end
|
||||
case startNode.GetName() of
|
||||
"w:p": self.ParagraphRange(startNode);
|
||||
"w:tbl":
|
||||
begin
|
||||
tr := startNode.FirstChildElement("w:tr");
|
||||
while ifObj(tr) do
|
||||
begin
|
||||
tc := tr.FirstChildElement("w:tc");
|
||||
while ifObj(tc) do
|
||||
begin
|
||||
##tc_pf(tc);
|
||||
tc := tc.NextElement("w:tc");
|
||||
end
|
||||
tr := tr.NextElement("w:tr");
|
||||
end
|
||||
end
|
||||
"w:tc":
|
||||
begin
|
||||
##tc_pf(startNode);
|
||||
end
|
||||
end;
|
||||
End;
|
||||
|
||||
Function TSWdRange.CalcPosition(startNode);
|
||||
Begin
|
||||
node := startNode.FirstChildElement();
|
||||
while ifObj(node) do
|
||||
begin
|
||||
if node.Eq(target_node_) then
|
||||
begin
|
||||
eq_flag := true;
|
||||
start_position_ := cur_position_;
|
||||
end
|
||||
case node.GetName() of
|
||||
"w:p":
|
||||
begin
|
||||
paragraph_obj := TOfficeObj("TParagraph");
|
||||
paragraph_obj.Init(node);
|
||||
if paragraph_obj.Empty() then // 空段落
|
||||
begin
|
||||
cur_position_ += 1;
|
||||
end
|
||||
else begin
|
||||
sub_node := node.FirstChildElement();
|
||||
while ifObj(sub_node) do
|
||||
begin
|
||||
case sub_node.GetName() of
|
||||
"w:r":
|
||||
begin
|
||||
run_obj := TOfficeObj("TRun");
|
||||
run_obj.Init(sub_node);
|
||||
text := run_obj.Text();
|
||||
if class(TSXml).IsUtf8() then text := Utf8ToAnsi(text);
|
||||
cur_position_ += lengthw(text);
|
||||
end
|
||||
|
||||
"w:ins", "w:del":
|
||||
begin
|
||||
run_node := sub_node.FirstChildElement("w:r");
|
||||
while ifObj(run_node) do
|
||||
begin
|
||||
run_obj := TOfficeObj("TRun");
|
||||
run_obj.Init(run_node);
|
||||
text := run_obj.Text();
|
||||
if class(TSXml).IsUtf8() then text := Utf8ToAnsi(text);
|
||||
cur_position_ += lengthw(text);
|
||||
run_node := run_node.NextElement("w:r");
|
||||
end
|
||||
end
|
||||
end;
|
||||
sub_node := sub_node.NextElement();
|
||||
end
|
||||
// 完整段落
|
||||
cur_position_ += 1;
|
||||
end
|
||||
end
|
||||
|
||||
"w:tbl":
|
||||
begin
|
||||
tr := node.FirstChildElement("w:tr");
|
||||
while ifObj(tr) do
|
||||
begin
|
||||
tc := tr.FirstChildElement("w:tc");
|
||||
while ifObj(tc) do
|
||||
begin
|
||||
flag := self.CalcPosition(tc);
|
||||
if flag then return 1;
|
||||
tc := tc.NextElement("w:tc");
|
||||
end
|
||||
cur_position_ += 1;
|
||||
tr := tr.NextElement("w:tr");
|
||||
end
|
||||
end
|
||||
end;
|
||||
if eq_flag then
|
||||
begin
|
||||
end_position_ := cur_position_;
|
||||
return 1;
|
||||
end
|
||||
node := node.NextElement();
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSWdRange.ParagraphRange(node);
|
||||
Begin
|
||||
paragraph_obj := TOfficeObj("TParagraph");
|
||||
paragraph_obj.Init(node);
|
||||
if paragraph_obj.Empty() then
|
||||
begin
|
||||
self.AddRunInfo2(nil, paragraph_obj);
|
||||
end
|
||||
else begin
|
||||
sub_node := node.FirstChildElement();
|
||||
while ifObj(sub_node) do
|
||||
begin
|
||||
case sub_node.GetName() of
|
||||
"w:r": self.AddRunInfo2(sub_node, paragraph_obj);
|
||||
|
||||
"w:ins", "w:del":
|
||||
begin
|
||||
run_node := sub_node.FirstChildElement("w:r");
|
||||
while ifObj(run_node) do
|
||||
begin
|
||||
self.AddRunInfo2(run_node, paragraph_obj);
|
||||
run_node := run_node.NextElement("w:r");
|
||||
end
|
||||
end
|
||||
end;
|
||||
sub_node := sub_node.NextElement();
|
||||
end
|
||||
end
|
||||
End;
|
||||
|
||||
Function TSWdRange.AddRunInfo2(runNode, tParagraph);
|
||||
Begin
|
||||
run_obj := TOfficeObj("TRun");
|
||||
run_obj.Init(runNode);
|
||||
|
||||
length := length(data_);
|
||||
data_[length]["tparagraph"] := tParagraph;
|
||||
data_[length]["trun"] := run_obj;
|
||||
data_[length]["entirety"] := target_node_;
|
||||
End;
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
|
||||
TestDocuments();
|
||||
|
||||
|
||||
Function TestDocuments();
|
||||
Begin
|
||||
openpath := "D:/temp/vbatable.docx";
|
||||
savepath := "D:/temp/vba.docx";
|
||||
application := new TSDocxApplication();
|
||||
|
||||
application.Documents.Add;
|
||||
Documents := application.Documents;
|
||||
Documents.Open(FileName : openpath);
|
||||
Documents.Save();
|
||||
println("Documents.Count = {}", Documents.Count);
|
||||
application.Documents("vbatable.docx").Activate;
|
||||
println("ActiveDocument.Name = {}", application.ActiveDocument.Name);
|
||||
println("ActiveDocument.Tables.Count = {}", application.ActiveDocument.Tables.Count);
|
||||
|
||||
TestTableCell(application);
|
||||
|
||||
Documents[2].SaveAs2(FileName : savepath);
|
||||
println("savepath = {}", savepath);
|
||||
return;
|
||||
|
||||
|
||||
End;
|
||||
|
||||
Function TestTables(application);
|
||||
Begin
|
||||
ActiveDocument := application.ActiveDocument;
|
||||
// ActiveDocument.Tables(1).ApplyStyleDirectFormatting('样式1');
|
||||
End;
|
||||
|
||||
Function TestTableCell(application);
|
||||
Begin
|
||||
ActiveDocument := application.ActiveDocument;
|
||||
// tables := application.ActiveDocument.Tables;
|
||||
// tables[1].AutoFitBehavior(class(TSDocxEnumerations).wdAutoFitContent());
|
||||
// tables[1].Cell(1, 1).Delete(class(TSDocxEnumerations).wdDeleteCellsEntireColumn());
|
||||
// tables[1].Cell(1, 1).Delete(class(TSDocxEnumerations).wdDeleteCellsEntireRow());
|
||||
// tables[1].Cell(3, 3).Delete(class(TSDocxEnumerations).wdDeleteCellsShiftLeft());
|
||||
// tables[1].Cell(1, 2).Delete(class(TSDocxEnumerations).wdDeleteCellsShiftUp());
|
||||
// tables[1].Cell(5, 3).Delete(class(TSDocxEnumerations).wdDeleteCellsShiftUp());
|
||||
// tables2 := ActiveDocument.Tables(2);
|
||||
// tables2.Cell(1, 1).Delete(class(TSDocxEnumerations).wdDeleteCellsEntireColumn());
|
||||
// tables2.Cell(1, 1).Delete(class(TSDocxEnumerations).wdDeleteCellsEntireRow());
|
||||
// tables2.Cell(3, 3).Delete(class(TSDocxEnumerations).wdDeleteCellsShiftLeft());
|
||||
// tables2.Cell(1, 2).Delete(class(TSDocxEnumerations).wdDeleteCellsShiftUp());
|
||||
// tables2.Cell(5, 3).Delete(class(TSDocxEnumerations).wdDeleteCellsShiftUp());
|
||||
// ActiveDocument.Tables(1).Cell(Row: 2, Column: 2).Merge(MergeTo: tables[1].Cell(2, 4));
|
||||
// ActiveDocument.Tables(2).Cell(2, 2).Merge(ActiveDocument.Tables(2).Cell(3, 4));
|
||||
// ActiveDocument.Tables(2).Cell(2, 2).Width := 100;
|
||||
// println("ActiveDocument.Tables(2).Cell(2, 2).Width = {}", ActiveDocument.Tables(2).Cell(2, 2).Width);
|
||||
// ActiveDocument.Tables(2).Cell(2, 3).WordWrap := true;
|
||||
// println("ActiveDocument.Tables(2).Cell(2, 3).WordWrap = {}", ActiveDocument.Tables(2).Cell(2, 3).WordWrap);
|
||||
// ActiveDocument.Tables(2).Cell(1, 1).VerticalAlignment := class(TSDocxEnumerations).wdCellAlignVerticalBottom();
|
||||
// ActiveDocument.Tables(2).Cell(1, 2).VerticalAlignment := class(TSDocxEnumerations).wdCellAlignVerticalCenter();
|
||||
// ActiveDocument.Tables(2).Cell(2, 2).VerticalAlignment := class(TSDocxEnumerations).wdCellAlignVerticalTop();
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 1).VerticalAlignment = {}", ActiveDocument.Tables(2).Cell(1, 1).VerticalAlignment);
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 2).VerticalAlignment = {}", ActiveDocument.Tables(2).Cell(1, 2).VerticalAlignment);
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 3).VerticalAlignment = {}", ActiveDocument.Tables(2).Cell(1, 3).VerticalAlignment);
|
||||
// println("ActiveDocument.Tables(2).Cell(2, 2).VerticalAlignment = {}", ActiveDocument.Tables(2).Cell(2, 2).VerticalAlignment);
|
||||
// ActiveDocument.Tables(2).Cell(1, 1).TopPadding := 30;
|
||||
// ActiveDocument.Tables(2).Cell(1, 1).LeftPadding := 25;
|
||||
// ActiveDocument.Tables(2).Cell(1, 1).BottomPadding := 20;
|
||||
// ActiveDocument.Tables(2).Cell(1, 1).RightPadding := 15;
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 1).TopPadding = {}", ActiveDocument.Tables(2).Cell(1, 1).TopPadding);
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 1).LeftPadding = {}", ActiveDocument.Tables(2).Cell(1, 1).LeftPadding);
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 1).BottomPadding = {}", ActiveDocument.Tables(2).Cell(1, 1).BottomPadding);
|
||||
// println("ActiveDocument.Tables(2).Cell(1, 1).RightPadding = {}", ActiveDocument.Tables(2).Cell(1, 1).RightPadding);
|
||||
// ActiveDocument.Tables(2).Cell(3, 3).Tables(1).AutoFitBehavior(class(TSDocxEnumerations).wdAutoFitContent());
|
||||
// ActiveDocument.Tables(2).Cell(3, 3).Tables(1).Cell(1, 1).Delete(class(TSDocxEnumerations).wdDeleteCellsEntireColumn());
|
||||
// ActiveDocument.Tables(1).Cell(1, 1).Shading.Texture := class(TSDocxEnumerations).wdTextureHorizontal();
|
||||
ActiveDocument.Tables(3).Cell(2,1).PreferredWidthType := class(TSDocxEnumerations).wdPreferredWidthAuto;
|
||||
ActiveDocument.Tables(3).Cell(2,2).PreferredWidth := 1000;
|
||||
println("ActiveDocument.Tables(3).Cell(2,2).PreferredWidth = {}", ActiveDocument.Tables(3).Cell(2,2).PreferredWidth);
|
||||
|
||||
End;
|
||||
|
||||
Function TestTableRows();
|
||||
Begin
|
||||
// ActiveDocument.Tables(1).Rows.WrapAroundText := true;
|
||||
// ActiveDocument.Tables(2).Rows.WrapAroundText := false;
|
||||
// println("Tables(1).Rows.WrapAroundText = {}", ActiveDocument.Tables(1).Rows.WrapAroundText);
|
||||
// println("Tables(2).Rows.WrapAroundText = {}", ActiveDocument.Tables(2).Rows.WrapAroundText);
|
||||
// ActiveDocument.Tables(1).Rows.WrapAroundText := false;
|
||||
// println("Tables(1).Rows.WrapAroundText = {}", ActiveDocument.Tables(1).Rows.WrapAroundText);
|
||||
End;
|
||||
|
||||
Function TestTableBorders();
|
||||
Begin
|
||||
// ActiveDocument.Tables(1).Borders(class(TSDocxEnumerations).wdBorderDiagonalUp).LineStyle := class(TSDocxEnumerations).wdLineStyleSingle;
|
||||
// ActiveDocument.Tables(1).Cell(1, 1).Borders(class(TSDocxEnumerations).wdBorderDiagonalDown).LineStyle := class(TSDocxEnumerations).wdLineStyleSingle;
|
||||
// ActiveDocument.Tables(1).Columns(1).SetWidth(100, class(TSDocxEnumerations).wdAdjustSameWidth());
|
||||
// ActiveDocument.Tables(3).Columns(2).PreferredWidthType := class(TSDocxEnumerations).wdPreferredWidthPercent;
|
||||
// ActiveDocument.Tables(3).Columns(2).PreferredWidth := 50;
|
||||
// println("ActiveDocument.Tables(3).Columns(2).PreferredWidth = {}", ActiveDocument.Tables(3).Columns(2).PreferredWidth);
|
||||
End;
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
// xlsx := new TSExcelFile();
|
||||
// xlsx.NewFile();
|
||||
// xlsx.OpenFile("", "D:\\temp\\vba_new.xlsx");
|
||||
|
||||
application := new Application();
|
||||
application.Workbooks.Add;
|
||||
Workbooks := application.Workbooks;
|
||||
Workbooks.Open(FileName : "D:/temp/vba_new.xlsx");
|
||||
println("Workbooks.Count = {}", Workbooks.Count);
|
||||
Workbooks[2].Worksheets("sheet2").Activate;
|
||||
Workbooks[2].ActiveSheet.Name;
|
||||
println("fullname 1 = {}", Workbooks[1].FullName);
|
||||
println("fullname 2 = {}", Workbooks[2].FullName);
|
||||
application.Workbooks(2).Close(SaveChanges : true, FileName : "D:/temp/vba_close.xlsx");
|
||||
println("close one, Workbooks.Count = {}", Workbooks.Count);
|
||||
application.Workbooks.Open(FileName : "D:/temp/vba_close.xlsx");
|
||||
println("workbook(2).name = {}", application.Workbooks(2).Name);
|
||||
Workbooks[2].Password := "tinysoft";
|
||||
Workbooks[2].Save();
|
||||
println("Path = {}", Workbooks[2].Path);
|
||||
|
||||
return;
|
||||
|
||||
|
||||
Sheets := application.Sheets;
|
||||
println("sheets.Count = {}", sheets.Count);
|
||||
param := array('After': application.Sheets(Sheets.Count), 'Count': 2);
|
||||
application.Worksheets.Add(param);
|
||||
|
||||
xlsx.SaveAs("", "D:\\temp\\xlsxvba.xlsx");
|
||||
return;
|
||||
|
||||
application.Worksheets(1).Visible := false;
|
||||
Worksheets := application.Worksheets;
|
||||
Worksheets[1].Visible := false;
|
||||
Worksheets['Sheet1'].Visible := false;
|
||||
Worksheets[1].Activate;
|
||||
count := Worksheets.Count;
|
||||
println("Worksheets.Count = {}", count);
|
||||
arr := array("After": Worksheets[1]);
|
||||
application.Worksheets('Sheet1').Copy(arr);
|
||||
|
||||
xlsx.SaveAs("", "D:\\temp\\xlsxvba.xlsx");
|
||||
return;
|
||||
|
||||
|
||||
+1
-15
@@ -19,18 +19,12 @@ private
|
||||
fp_; // 函数指针 -- 用来比较
|
||||
activation_; // 激活的对象
|
||||
|
||||
public
|
||||
class Function GetInstance(value);
|
||||
|
||||
private
|
||||
static collection_;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function Collection.Create();
|
||||
Begin
|
||||
container_ := ContainerList();
|
||||
container_ := new LinkList();
|
||||
ignorecase_ := false;
|
||||
fp_ := FindFunction("CompareFunction", self);
|
||||
End;
|
||||
@@ -66,14 +60,6 @@ Begin
|
||||
return name;
|
||||
End;
|
||||
|
||||
class Function Collection.GetInstance(value);
|
||||
Begin
|
||||
if not istable(collection_) then collection_ := array();
|
||||
if not collection_[value] then
|
||||
collection_[value] := new Collection();
|
||||
return collection_[value];
|
||||
End;
|
||||
|
||||
Function Collection.AddCollection(obj, name);
|
||||
Begin
|
||||
data := new Data();
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
Function ContainerList();
|
||||
Begin
|
||||
return new LinkList();
|
||||
End;
|
||||
|
||||
Type LinkList = class
|
||||
|
||||
private
|
||||
+2
-2
@@ -5,8 +5,8 @@ public
|
||||
|
||||
private
|
||||
application_;
|
||||
creator_;
|
||||
parent_;
|
||||
creator_;
|
||||
|
||||
public
|
||||
property Application read ReadApplication;
|
||||
@@ -26,7 +26,7 @@ Begin
|
||||
parent_ := par;
|
||||
End;
|
||||
|
||||
// property
|
||||
// Properties
|
||||
Function TSVbaBase.ReadApplication();
|
||||
Begin
|
||||
return application_;
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
Type Collection = class
|
||||
|
||||
public
|
||||
|
||||
Function Create();
|
||||
Function AddCollection(obj, name);
|
||||
Function RemoveCollection(index);
|
||||
Function SetIgnoreCase(value);
|
||||
Function GetCount();
|
||||
Function CalNewName(prefix);
|
||||
Function Operator[](index);
|
||||
|
||||
private
|
||||
name_collection_;
|
||||
index_collection_;
|
||||
name_index_;
|
||||
ignorecase_; // 是否启用大小写无关
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function Collection.Create();
|
||||
Begin
|
||||
name_collection_ := array();
|
||||
index_collection_ := array();
|
||||
name_index_ := array();
|
||||
ignorecase_ := false;
|
||||
End;
|
||||
|
||||
Function Collection.AddCollection(obj, name);
|
||||
Begin
|
||||
name_collection_[ignorecase_ ? lowercase(name) : name] := obj;
|
||||
index := length(index_collection_) + 1;
|
||||
index_collection_[index] := obj;
|
||||
name_index_[index] := name;
|
||||
name_index_[name] := index;
|
||||
End;
|
||||
|
||||
Function Collection.RemoveCollection(index);
|
||||
Begin
|
||||
arr1 := array(index : nil);
|
||||
arr2 := array(name_index_[index] : nil);
|
||||
reindex(index_collection_, arr1);
|
||||
reindex(name_collection_, arr2);
|
||||
reindex(name_index_, arr1);
|
||||
reindex(name_index_, arr2);
|
||||
if ifnumber(index) then
|
||||
for k, v in index_collection_ do
|
||||
if k > index then reindex(index_collection_, array(k : k - 1));
|
||||
End;
|
||||
|
||||
Function Collection.SetIgnoreCase(value);
|
||||
Begin
|
||||
ignorecase_ := value;
|
||||
End;
|
||||
|
||||
Function Collection.GetCount();
|
||||
Begin
|
||||
return length(name_collection_);
|
||||
End;
|
||||
|
||||
Function Collection.CalNewName(prefix);
|
||||
Begin
|
||||
len := length(name_collection_) + 1;
|
||||
name := prefix $ len;
|
||||
while name in name_collection_ do
|
||||
name := prefix $ ++len;
|
||||
return name;
|
||||
End;
|
||||
|
||||
Function Operator Collection.[](index);
|
||||
Begin
|
||||
if ifnumber(index) then return index_collection_[index];
|
||||
return name_collection_[ignorecase_ ? lowercase(index) : index];
|
||||
End;
|
||||
@@ -1,437 +0,0 @@
|
||||
Type Workbook = class
|
||||
|
||||
public
|
||||
Function Create(object, name, fullname);
|
||||
Function Init(object);
|
||||
|
||||
private
|
||||
xlsx_;
|
||||
file_name_;
|
||||
full_name_;
|
||||
collection_;
|
||||
|
||||
public
|
||||
Function AcceptAllChanges();
|
||||
Function Activate();
|
||||
Function AddToFavorite();
|
||||
Function ApplyTheme();
|
||||
Function BreakLink(Name, Type);
|
||||
Function CanCheckIn();
|
||||
Function ChangeFileAccess(Mode, WritePassword, Notify);
|
||||
Function ChangeLink(Name, NewName, Type);
|
||||
Function CheckIn(SaveChanges, Comments, MakePublic);
|
||||
Function CheckInWithVersion(SaveChanges, Comments, MakePublic, VersionType);
|
||||
Function Close(SaveChanges, FileName, RouteWorkbook); // Completed
|
||||
Function ConvertComments();
|
||||
Function CreateForecastSheet(Timeline, Values_, ForecastStart, ForecasetEnd, ConfInt, Seasonality, DataCompletion, Aggregation, ChartType, ShowStatsTable);
|
||||
Function DeleteNumberFormat(NumberFormat);
|
||||
Function EnableConnections();
|
||||
Function EndReview();
|
||||
Function ExclusiveAccess();
|
||||
Function ExportAsFixedFormat (Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From_, To_, OpenAfterPublish, FixedFormatExtClassPtr);
|
||||
Function FollowHyperlink (Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo);
|
||||
Function ForwardMailer();
|
||||
Function GetWorkflowTasks();
|
||||
Function GetWorkflowTemplates();
|
||||
Function HighlightChangesOptions(When, Who, Where_);
|
||||
Function LinkInfo (Name, LinkInfo, Type, EditionRef);
|
||||
Function LinkSources (Type);
|
||||
Function LockServerFile();
|
||||
Function MergeWorkbook (FileName);
|
||||
Function NewWindow();
|
||||
Function OpenLinks(Name, ReadOnly, Type);
|
||||
Function PivotCaches();
|
||||
Function Post();
|
||||
Function PrintOut(From_, To_, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas);
|
||||
Function PrintPreview(EnableChanges);
|
||||
Function Protect(Password, Structure, Windows);
|
||||
Function ProtectSharing(FileName, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, SharingPassword, FileFormat);
|
||||
Function PublishToDocs();
|
||||
Function PurgeChangeHistoryNow(Days, SharingPassword);
|
||||
Function RefreshAll();
|
||||
Function RejectAllChanges(When, Who, Where_);
|
||||
Function ReloadAs(Encoding);
|
||||
Function RemoveDocumentInformation(RemoveDocInfoType);
|
||||
Function RemoveUser(Index);
|
||||
Function Reply();
|
||||
Function ReplyAll();
|
||||
Function ReplyWithChanges(ShowMessage);
|
||||
Function ResetColors();
|
||||
Function RunAutoMacros(Which);
|
||||
Function Save(); // Completed
|
||||
Function SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode,
|
||||
ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local); // Completed
|
||||
Function SaveAsXMLData(FileName, Map);
|
||||
Function SaveCopyAs(FileName); // Completed
|
||||
Function SendFaxOverInternet(Recipients, Subject, ShowMessage);
|
||||
Function SendForReview(Recipients, Subject, ShowMessage, IncludeAttachment);
|
||||
Function SendMail(Recipients, Subject, ReturnReceipt);
|
||||
Function SendMailer(FileFormat, Priority);
|
||||
Function SetLinkOnData(Name, Procedure_);
|
||||
Function SetPasswordEncryptionOptions(PasswordEncryptionProvider, PasswordEncryptionAlgorithm, PasswordEncryptionKeyLength, PasswordEncryptionFileProperties);
|
||||
Function ToggleFormsDesign();
|
||||
Function Unprotect(Password);
|
||||
Function UnprotectSharing(SharingPassword);
|
||||
Function UpdateFromFile();
|
||||
Function UpdateLink(Name, Type);
|
||||
Function WebPagePreview();
|
||||
Function XmlImport(Url, ImportMap, Overwrite, Destination);
|
||||
Function XmlImportXml(Data, ImportMap, Overwrite, Destination);
|
||||
|
||||
property AccuracyVersion read ReadAccuracyVersion write WriteAccuracyVersion;
|
||||
property ActiveChart read ReadActiveChart;
|
||||
property ActiveSheet read ReadActiveSheet; // Completed
|
||||
property ActiveSlicer read ReadActiveSlicer;
|
||||
property Application read ReadApplication;
|
||||
property AutoSaveOn read ReadAutoSaveOn write WriteAutoSaveOn;
|
||||
property AutoUpdateFrequency read ReadAutoUpdateSaveChanges write WriteAutoUpdateSaveChanges;
|
||||
property AutoUpdateSaveChanges read ReadAutoUpdateSaveChanges write WriteAutoUpdateSaveChanges;
|
||||
property BuiltinDocumentProperties read ReadBuiltinDocumentProperties; // TODO
|
||||
property CalculationVersion read ReadCalculationVersion; // TODO
|
||||
property CaseSensitive read ReadCaseSensitive; // TODO
|
||||
property ChangeHistoryDuration read ReadChangeHistoryDuration write WirteChangeHistoryDuration;
|
||||
property ChartDataPointTrack read ReadChartDataPointTrack write WriteChartDataPointTrack;
|
||||
property Charts read ReadCharts; // TODO
|
||||
property CheckCompatibility read ReadCheckCompatibility write WriteCheckCompatibility;
|
||||
property CodeName read ReadCodeName;
|
||||
property Colors read ReadColors write WriteColors;
|
||||
property CommandBars read ReadCommandBars;
|
||||
property ConflictResolution read ReadConflictResolution write WriteConflictResolution;
|
||||
property Connections read ReadConnections;
|
||||
property ConnectionsDisabled read ReadConnectionsDisabled;
|
||||
property Container read ReadContainer;
|
||||
property ContentTypeProperties read ReadContentTypeProperties;
|
||||
property CreateBackup read ReadCreateBackup;
|
||||
property Creator read ReadCreator;
|
||||
property CustomDocumentProperties read ReadCustomDocumentProperties write WriteCustomDocumentProperties; // TODO
|
||||
property CustomViews read ReadCustomViews;
|
||||
property CustomXMLParts read ReadCustomXMLParts;
|
||||
property Date1904 read ReadDate1904 write WriteDate1904;
|
||||
property DefaultPivotTableStyle read ReadDefaultPivotTableStyle write WriteDefaultPivotTableStyle;
|
||||
property DefaultSlicerStyle read ReadDefaultSlicerStyle write WriteDefaultSlicerStyle;
|
||||
property DefaultTableStyle read ReadDefaultTableStyle write WriteDefaultTableStyle; // TODO
|
||||
property DefaultTimelineStyle read ReadDefaultTimelineStyle write WriteDefaultTimelineStyle;
|
||||
property DisplayDrawingObjects read ReadDisplayDrawingObjects write WriteDisplayDrawingObjects;
|
||||
property DisplayInkComments read ReadDisplayInkComments write WriteDisplayInkComments;
|
||||
property DocumentInspectors read ReadDocumentInspectors;
|
||||
property DocumentLibraryVersions read ReadDocumentLibraryVersions;
|
||||
property DoNotPromptForConvert read ReadDoNotPromptForConvert write WriteDoNotPromptForConvert;
|
||||
property EnableAutoRecover read ReadEnableAutoRecover write WriteEnableAutoRecover;
|
||||
property EncryptionProvider read ReadEncryptionProvider write WriteEncryptionProvider;
|
||||
property EnvelopeVisible read ReadEnvelopeVisible write WriteEnvelopeVisible;
|
||||
property Excel4IntlMacroSheets read ReadExcel4IntlMacroSheets;
|
||||
property Excel4MacroSheets read ReadExcel4MacroSheets;
|
||||
property Excel8CompatibilityMode read ReadExcel8CompatibilityMode;
|
||||
property FileFormat read ReadFileFormat;
|
||||
property Final read ReadFinal write WriteFinal;
|
||||
property ForceFullCalculation read ReadForceFullCalculation write WriteForceFullCalculation;
|
||||
property FullName read ReadFullName; // Completed
|
||||
property FullNameURLEncoded read ReadFullNameURLEncoded;
|
||||
property HasPassword read ReadHasPassword;
|
||||
property HasVBProject read ReadHasVBProject;
|
||||
property HighlightChangesOnScreen read ReadHighlightChangesOnScreen write WriteHighlightChangesOnScreen;
|
||||
property IconSets read ReadIconSets;
|
||||
property InactiveListBorderVisible read ReadInactiveListBorderVisible write WriteInactiveListBorderVisible;
|
||||
property IsAddin read ReadIsAddin write WriteIsAddin;
|
||||
property IsInplace read ReadIsInplace;
|
||||
property KeepChangeHistory read ReadKeepChangeHistory write WriteKeepChangeHistory;
|
||||
property ListChangesOnNewSheet read ReadListChangesOnNewSheet write WriteListChangesOnNewSheet;
|
||||
property Mailer read ReadMailer write WriteMailer;
|
||||
property Model read ReadModel;
|
||||
property MultiUserEditing read ReadMultiUserEditing;
|
||||
property Name read ReadName;
|
||||
property Names read ReadNames;
|
||||
property Parent read ReadParent;
|
||||
property Password read ReadPassword write WritePassword; // Completed
|
||||
property PasswordEncryptionAlgorithm read ReadPasswordEncryptionAlgorithm;
|
||||
property PasswordEncryptionFileProperties read ReadPasswordEncryptionFileProperties;
|
||||
property PasswordEncryptionKeyLength read ReadPasswordEncryptionKeyLength;
|
||||
property PasswordEncryptionProvider read ReadPasswordEncryptionProvider;
|
||||
property Path read ReadPath;
|
||||
property Permission read ReadPermission;
|
||||
property PersonalViewListSettings read ReadPersonalViewListSettings write WritePersonalViewListSettings;
|
||||
property PersonalViewPrintSettings read ReadPersonalViewPrintSettings write WritePersonalViewPrintSettings;
|
||||
property PivotTables read ReadPivotTables;
|
||||
property PrecisionAsDisplayed read ReadPrecisionAsDisplayed write WritePrecisionAsDisplayed;
|
||||
property ProtectStructure read ReadProtectStructure;
|
||||
property ProtectWindows read ReadProtectWindows;
|
||||
property PublishObjects read ReadPublishObjects;
|
||||
property Queries read ReadQueries;
|
||||
property ReadOnly read ReadReadOnly;
|
||||
property ReadOnlyRecommended read ReadReadOnlyRecommended;
|
||||
property RemovePersonalInformation read ReadRemovePersonalInformation write WriteRemovePersonalInformation;
|
||||
property Research read ReadResearch;
|
||||
property RevisionNumber read ReadRevisionNumber;
|
||||
property Saved read ReadSaved write WriteSaved;
|
||||
property SaveLinkValues read ReadSaveLinkValues write WriteSaveLinkValues;
|
||||
property SensitivityLabel read ReadSensitivityLabel;
|
||||
property ServerPolicy read ReadServerPolicy;
|
||||
property ServerViewableItems read ReadServerViewableItems;
|
||||
property Sheets read ReadSheets; // TODO - 差chartsheet
|
||||
property ShowConflictHistory read ReadShowConflictHistory write WriteShowConflictHistory;
|
||||
property ShowPivotChartActiveFields read ReadShowPivotChartActiveFields write WriteShowPivotChartActiveFields;
|
||||
property ShowPivotTableFieldList read ReadShowPivotTableFieldList write WriteShowPivotTableFieldList;
|
||||
property Signatures read ReadSignatures;
|
||||
property SlicerCaches read ReadSlicerCaches;
|
||||
property SmartDocument read ReadSmartDocument;
|
||||
property Styles read ReadStyles; // TODO
|
||||
property TableStyles read ReadTableStyles;
|
||||
property TemplateRemoveExtData read ReadTemplateRemoveExtData write WriteTemplateRemoveExtData;
|
||||
property Theme read ReadTheme;
|
||||
property UpdateLinks read ReadUpdateLinks write WriteUpdateLinks;
|
||||
property UpdateRemoteReferences read ReadUpdateRemoteReferences write WriteUpdateRemoteReferences;
|
||||
property UserStatus read ReadUserStatus;
|
||||
property UseWildcardsoperty read ReadUseWildcardsoperty;
|
||||
property VBASigned read ReadVBASigned;
|
||||
property VBProject read ReadVBProject;
|
||||
property WebOptions read ReadWebOptions;
|
||||
property Windows read ReadWindows;
|
||||
property Worksheets read ReadWorkSheets; // Completed
|
||||
property WritePassword read ReadWritePassword write WriteWritePassword;
|
||||
property WriteReserved read ReadWriteReserved;
|
||||
property WriteReservedBy read ReadWriteReservedBy;
|
||||
property XmlMaps read ReadXmlMaps;
|
||||
property XmlNamespaces read ReadXmlNamespaces;
|
||||
Function ReadXmlNamespaces();
|
||||
Function ReadXmlMaps();
|
||||
Function ReadWriteReservedBy();
|
||||
Function ReadWriteReserved();
|
||||
Function WriteWritePassword();
|
||||
Function ReadWritePassword();
|
||||
Function ReadWorkSheets(index);
|
||||
Function ReadWindows();
|
||||
Function ReadWebOptions();
|
||||
Function ReadVBProject();
|
||||
Function ReadVBASigned();
|
||||
Function ReadUseWildcardsoperty();
|
||||
Function ReadUseWholeCellCriteria();
|
||||
Function ReadUserStatus();
|
||||
Function WriteUpdateRemoteReferences();
|
||||
Function ReadUpdateRemoteReferences();
|
||||
Function WriteUpdateLinks();
|
||||
Function ReadUpdateLinks();
|
||||
Function ReadTheme();
|
||||
Function WriteTemplateRemoveExtData();
|
||||
Function ReadTemplateRemoveExtData();
|
||||
Function ReadTableStyles();
|
||||
Function ReadStyles();
|
||||
Function ReadSmartDocument();
|
||||
Function ReadSlicerCaches();
|
||||
Function ReadSignatures();
|
||||
Function WriteShowPivotTableFieldList();
|
||||
Function ReadShowPivotTableFieldList();
|
||||
Function WriteShowPivotChartActiveFields();
|
||||
Function ReadShowPivotChartActiveFields();
|
||||
Function WriteShowConflictHistory();
|
||||
Function ReadShowConflictHistory();
|
||||
Function ReadSheets();
|
||||
Function ReadServerViewableItems();
|
||||
Function ReadServerPolicy();
|
||||
Function ReadSensitivityLabel();
|
||||
Function WriteSaveLinkValues();
|
||||
Function ReadSaveLinkValues();
|
||||
Function WriteSaved();
|
||||
Function ReadSaved();
|
||||
Function ReadRevisionNumber();
|
||||
Function ReadResearch();
|
||||
Function WriteRemovePersonalInformation();
|
||||
Function ReadRemovePersonalInformation();
|
||||
Function ReadReadOnlyRecommended();
|
||||
Function ReadReadOnly();
|
||||
Function ReadQueries();
|
||||
Function ReadPublishObjects();
|
||||
Function ReadProtectWindows();
|
||||
Function ReadProtectStructure();
|
||||
Function WritePrecisionAsDisplayed();
|
||||
Function ReadPrecisionAsDisplayed();
|
||||
Function ReadPivotTables();
|
||||
Function WritePersonalViewPrintSettings();
|
||||
Function ReadPersonalViewPrintSettings();
|
||||
Function WritePersonalViewListSettings();
|
||||
Function ReadPersonalViewListSettings();
|
||||
Function ReadPermission();
|
||||
Function ReadPath();
|
||||
Function ReadPasswordEncryptionProvider();
|
||||
Function ReadPasswordEncryptionKeyLength();
|
||||
Function ReadPasswordEncryptionFileProperties();
|
||||
Function ReadPasswordEncryptionAlgorithm();
|
||||
Function WritePassword(passwd);
|
||||
Function ReadPassword();
|
||||
Function ReadParent();
|
||||
Function ReadNames();
|
||||
Function ReadName();
|
||||
Function ReadMultiUserEditing();
|
||||
Function ReadModel();
|
||||
Function WriteMailer();
|
||||
Function ReadMailer();
|
||||
Function WriteListChangesOnNewSheet();
|
||||
Function ReadListChangesOnNewSheet();
|
||||
Function WriteKeepChangeHistory();
|
||||
Function ReadKeepChangeHistory();
|
||||
Function ReadIsInplace();
|
||||
Function WriteIsAddin();
|
||||
Function ReadIsAddin();
|
||||
Function WriteInactiveListBorderVisible();
|
||||
Function ReadInactiveListBorderVisible();
|
||||
Function ReadIconSets();
|
||||
Function WriteHighlightChangesOnScreen();
|
||||
Function ReadHighlightChangesOnScreen();
|
||||
Function ReadHasVBProject();
|
||||
Function ReadHasPassword();
|
||||
Function ReadFullNameURLEncoded();
|
||||
Function ReadFullName();
|
||||
Function WriteForceFullCalculation();
|
||||
Function ReadForceFullCalculation();
|
||||
Function WriteFinal();
|
||||
Function ReadFinal();
|
||||
Function ReadFileFormat();
|
||||
Function ReadExcel8CompatibilityMode();
|
||||
Function ReadExcel4MacroSheets();
|
||||
Function ReadExcel4IntlMacroSheets();
|
||||
Function WriteEnvelopeVisible();
|
||||
Function ReadEnvelopeVisible();
|
||||
Function WriteEncryptionProvider();
|
||||
Function ReadEncryptionProvider();
|
||||
Function WriteEnableAutoRecover();
|
||||
Function ReadEnableAutoRecover();
|
||||
Function WriteDoNotPromptForConvert();
|
||||
Function ReadDoNotPromptForConvert();
|
||||
Function ReadDocumentLibraryVersions();
|
||||
Function ReadDocumentInspectors();
|
||||
Function WriteDisplayInkComments();
|
||||
Function ReadDisplayInkComments();
|
||||
Function WriteDisplayDrawingObjects();
|
||||
Function ReadDisplayDrawingObjects();
|
||||
Function WriteDefaultTimelineStyle();
|
||||
Function ReadDefaultTimelineStyle();
|
||||
Function WriteDefaultTableStyle();
|
||||
Function ReadDefaultTableStyle();
|
||||
Function WriteDefaultSlicerStyle();
|
||||
Function ReadDefaultSlicerStyle();
|
||||
Function WriteDefaultPivotTableStyle();
|
||||
Function ReadDefaultPivotTableStyle();
|
||||
Function WriteDate1904();
|
||||
Function ReadDate1904();
|
||||
Function ReadCustomXMLParts();
|
||||
Function ReadCustomViews();
|
||||
Function WriteCustomDocumentProperties(value);
|
||||
Function ReadCustomDocumentProperties(item);
|
||||
Function ReadCreator();
|
||||
Function ReadCreateBackup();
|
||||
Function ReadContentTypeProperties();
|
||||
Function ReadContainer;
|
||||
Function ReadConnectionsDisabled();
|
||||
Function ReadConnections();
|
||||
Function WriteConflictResolution();
|
||||
Function ReadConflictResolution();
|
||||
Function ReadCommandBars();
|
||||
Function WriteColors(index, value);
|
||||
Function ReadColors(index);
|
||||
Function ReadCodeName();
|
||||
Function ReadCheckCompatibility();
|
||||
Function WriteCheckCompatibility();
|
||||
Function ReadCharts();
|
||||
Function ReadChartDataPointTrack();
|
||||
Function WriteChartDataPointTrack();
|
||||
Function WirteChangeHistoryDuration();
|
||||
Function ReadChangeHistoryDuration();
|
||||
Function ReadCaseSensitive();
|
||||
Function ReadCalculationVersion();
|
||||
Function ReadBuiltinDocumentProperties();
|
||||
Function ReadAutoUpdateSaveChanges();
|
||||
Function WriteAutoUpdateSaveChanges();
|
||||
Function ReadAutoSaveOn();
|
||||
Function WriteAutoSaveOn();
|
||||
Function ReadApplication();
|
||||
Function ReadActiveSlicer();
|
||||
Function ReadActiveSheet();
|
||||
Function ReadActiveChart();
|
||||
Function ReadAccuracyVersion();
|
||||
Function WriteAccuracyVersion(value);
|
||||
|
||||
private
|
||||
worksheets_;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function Workbook.Create(object, name, fullname);
|
||||
Begin
|
||||
xlsx_ := object;
|
||||
file_name_ := name;
|
||||
full_name_ := fullname;
|
||||
collection_ := class(Collection).GetInstance('workbook');
|
||||
Init(object);
|
||||
End;
|
||||
|
||||
Function Workbook.Init(object);
|
||||
Begin
|
||||
worksheets_ := new Worksheets(object, file_name_);
|
||||
End;
|
||||
|
||||
// function
|
||||
Function Workbook.Close(SaveChanges, FileName, RouteWorkbook);
|
||||
Begin
|
||||
if SaveChanges then xlsx_.Save();
|
||||
if FileName then xlsx_.SaveAs("", FileName);
|
||||
collection_.RemoveCollection(file_name_);
|
||||
End;
|
||||
|
||||
Function Workbook.Save();
|
||||
Begin
|
||||
xlsx_.Save();
|
||||
End;
|
||||
|
||||
Function Workbook.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended,
|
||||
CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local);
|
||||
Begin
|
||||
xlsx_.SetPassword(Password);
|
||||
xlsx_.SaveAs("", FileName);
|
||||
End;
|
||||
|
||||
Function Workbook.SaveCopyAs(FileName);
|
||||
Begin
|
||||
xlsx_.SaveAs("", FileName);
|
||||
End;
|
||||
|
||||
// property
|
||||
Function Workbook.ReadWorkSheets(index);
|
||||
Begin
|
||||
if ifnil(index) then return worksheets_;
|
||||
return worksheets_[index];
|
||||
End;
|
||||
|
||||
Function Workbook.ReadActiveSheet();
|
||||
Begin
|
||||
return worksheets_.GetCollection().GetActivation();
|
||||
End;
|
||||
|
||||
Function Workbook.ReadFullName();
|
||||
Begin
|
||||
return full_name_;
|
||||
End;
|
||||
|
||||
Function Workbook.ReadFullNameURLEncoded();
|
||||
Begin
|
||||
return full_name_;
|
||||
End;
|
||||
|
||||
Function Workbook.ReadName();
|
||||
Begin
|
||||
return file_name_;
|
||||
End;
|
||||
|
||||
Function Workbook.WritePassword(passwd);
|
||||
Begin
|
||||
xlsx_.SetPassword(passwd);
|
||||
End;
|
||||
|
||||
Function Workbook.ReadPassword();
|
||||
Begin
|
||||
return "******";
|
||||
End;
|
||||
|
||||
Function Workbook.ReadPath();
|
||||
Begin
|
||||
return ExtractFileDir(full_name_);
|
||||
End;
|
||||
@@ -1,81 +0,0 @@
|
||||
Type Workbooks = class
|
||||
|
||||
public
|
||||
Function Create();
|
||||
Function Operator[](index);
|
||||
|
||||
private
|
||||
Function AddWorkbook(xlsx, name); // Completed
|
||||
|
||||
private
|
||||
collection_;
|
||||
|
||||
public
|
||||
Function Add(template); // Completed
|
||||
Function CanCheckOut(FileName);
|
||||
Function CheckOut(FileName);
|
||||
Function Close();
|
||||
Function Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword,
|
||||
IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify,
|
||||
Converter, AddToMru, Local, CorruptLoad); // Completed
|
||||
Function OpenDatabase();
|
||||
Function OpenText();
|
||||
Function OpenXML();
|
||||
|
||||
property Application read ReadApplication;
|
||||
property Count read ReadCount;
|
||||
property Creator read ReadCreator;
|
||||
property Item read ReadItem;
|
||||
property Parent read ReadParent;
|
||||
Function ReadCount(); // Completed
|
||||
Function ReadItem(index); // Completed
|
||||
Function ReadApplication();
|
||||
Function ReadCreator();
|
||||
Function ReadParent();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function Workbooks.Create();
|
||||
Begin
|
||||
collection_ := class(Collection).GetInstance('workbook');
|
||||
End;
|
||||
|
||||
Function Workbooks.AddWorkbook(xlsx, fullname);
|
||||
Begin
|
||||
name := ExtractFileName(fullname);
|
||||
collection_.AddCollection(new Workbook(xlsx, name, fullname), name);
|
||||
End;
|
||||
|
||||
Function Operator Workbooks.[](index);
|
||||
Begin
|
||||
return collection_[index];
|
||||
End;
|
||||
|
||||
Function Workbooks.Add(template);
|
||||
Begin
|
||||
xlsx := new TSXlsxFile();
|
||||
xlsx.NewFile();
|
||||
AddWorkbook(xlsx, collection_.CalNewName("工作簿"));
|
||||
End;
|
||||
|
||||
Function Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword,
|
||||
IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify,
|
||||
Converter, AddToMru, Local, CorruptLoad); // Completed
|
||||
Begin
|
||||
xlsx := new TSXlsxFile();
|
||||
[err, msg] := xlsx.OpenFile("", FileName, Password);
|
||||
if err then return;
|
||||
AddWorkbook(xlsx, xlsx.FileName());
|
||||
End;
|
||||
|
||||
Function Workbooks.ReadCount();
|
||||
Begin
|
||||
return collection_.GetCount();
|
||||
End;
|
||||
|
||||
Function Workbooks.ReadItem(index);
|
||||
Begin
|
||||
return self[index];
|
||||
End;
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
Type Worksheet = class
|
||||
|
||||
public
|
||||
Function Create(obj, sheet_name, collection);
|
||||
|
||||
private
|
||||
xlsx_;
|
||||
sheet_name_;
|
||||
collection_;
|
||||
|
||||
private
|
||||
Function CalSheetName();
|
||||
|
||||
public
|
||||
Function Activate(); // Completed
|
||||
Function Copy(arr); // Completed
|
||||
Function Calculate();
|
||||
Function ChartObjects();
|
||||
Function CheckSpelling();
|
||||
Function CircleInvalid();
|
||||
Function ClearArrows();
|
||||
Function Delete();
|
||||
Function Evaluate();
|
||||
Function ExportAsFixedFormat();
|
||||
Function Move();
|
||||
Function OLEObjects();
|
||||
Function Paste();
|
||||
Function PasteSpecial();
|
||||
Function PivotTables();
|
||||
Function PivotTableWizard();
|
||||
Function PrintOut();
|
||||
Function PrintPreview();
|
||||
Function Protect();
|
||||
Function ResetAllPageBreaks();
|
||||
Function SaveAs();
|
||||
Function Scenarios();
|
||||
Function Select();
|
||||
Function SetBackgroundPicture();
|
||||
Function ShowAllData();
|
||||
Function ShowDataForm();
|
||||
Function UnProtect();
|
||||
Function XmlDataQuery();
|
||||
Function XmlMapQuery();
|
||||
|
||||
// VBA Property
|
||||
property Visible write WriteVisible;
|
||||
property Name read ReadName write WriteName;
|
||||
Function WriteVisible(value);
|
||||
Function WriteName(new_name);
|
||||
Function ReadName();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function Worksheet.Create(obj, sheet_name, collection);
|
||||
Begin
|
||||
xlsx_ := obj;
|
||||
sheet_name_ := sheet_name;
|
||||
collection_ := collection;
|
||||
End;
|
||||
|
||||
Function Worksheet.CalSheetName();
|
||||
Begin
|
||||
count := xlsx_.GetSheetsCount();
|
||||
sheets := xlsx_.GetSheets();
|
||||
name := "Sheet" $ count;
|
||||
while name in sheets do
|
||||
name := "Sheet" $ ++count;
|
||||
return name;
|
||||
End;
|
||||
|
||||
Function Worksheet.Activate();
|
||||
Begin
|
||||
collection_.SetActivation(sheet_name_);
|
||||
return xlsx_.SetDefaultSheet(sheet_name_);
|
||||
End;
|
||||
|
||||
Function Worksheet.Copy(arr);
|
||||
Begin
|
||||
if not istable(arr) then return xlsx_.CopySheet(self.Name, CalSheetName());
|
||||
End;
|
||||
|
||||
Function Worksheet.WriteVisible(value);
|
||||
Begin
|
||||
return xlsx_.SetSheetVisible(sheet_name_, value);
|
||||
End;
|
||||
|
||||
Function Worksheet.WriteName(new_name);
|
||||
Begin
|
||||
return xlsx_.SetSheetName(sheet_name_, new_name);
|
||||
End;
|
||||
|
||||
Function Worksheet.ReadName();
|
||||
Begin
|
||||
return sheet_name_;
|
||||
End;
|
||||
@@ -1,66 +0,0 @@
|
||||
Type Worksheets = class
|
||||
|
||||
public
|
||||
Function Create(object, name);
|
||||
Function Init();
|
||||
Function Operator[](index);
|
||||
Function GetCollection();
|
||||
|
||||
private
|
||||
xlsx_;
|
||||
collection_;
|
||||
|
||||
public
|
||||
Function Add();
|
||||
Function Add2();
|
||||
Function Copy();
|
||||
Function Delete();
|
||||
Function FillAcrossSheets();
|
||||
Function Move();
|
||||
Function PrintOut();
|
||||
Function PrintPreview();
|
||||
Function Select();
|
||||
|
||||
property worksheet read ReadWorksheet;
|
||||
property Count read ReadCount;
|
||||
Function ReadWorksheet(index);
|
||||
Function ReadCount();
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function Worksheets.Create(object, name);
|
||||
Begin
|
||||
xlsx_ := object;
|
||||
collection_ := class(Collection).GetInstance(name $ "worksheet");
|
||||
collection_.SetIgnoreCase(true);
|
||||
Init();
|
||||
End;
|
||||
|
||||
Function Worksheets.Init();
|
||||
Begin
|
||||
sheets := xlsx_.GetSheets();
|
||||
for k, v in sheets do
|
||||
collection_.AddCollection(new Worksheet(xlsx_, v, collection_), v);
|
||||
collection_.SetActivation(xlsx_.GetDefaultSheet());
|
||||
End;
|
||||
|
||||
Function Operator Worksheets.[](index);
|
||||
Begin
|
||||
return collection_[index];
|
||||
End;
|
||||
|
||||
Function Worksheets.ReadWorksheet(index);
|
||||
Begin
|
||||
return collection_[index];
|
||||
End;
|
||||
|
||||
Function Worksheets.ReadCount();
|
||||
Begin
|
||||
return collection_.GetCount();
|
||||
End;
|
||||
|
||||
Function Worksheets.GetCollection();
|
||||
Begin
|
||||
return collection_;
|
||||
End;
|
||||
@@ -1,32 +0,0 @@
|
||||
Type XlsxApplication = class
|
||||
|
||||
public
|
||||
Function Create();
|
||||
Function Init();
|
||||
|
||||
public
|
||||
property Workbooks read ReadWorkbooks; // Completed
|
||||
Function ReadWorkbooks(index);
|
||||
|
||||
private
|
||||
workbooks_;
|
||||
|
||||
End;
|
||||
|
||||
// ============== 实现 ================= //
|
||||
Function XlsxApplication.Create();
|
||||
Begin
|
||||
Init();
|
||||
End;
|
||||
|
||||
Function XlsxApplication.Init();
|
||||
Begin
|
||||
workbooks_ := new Workbooks();
|
||||
End;
|
||||
|
||||
Function XlsxApplication.ReadWorkbooks(index)
|
||||
Begin
|
||||
if ifnil(index) then return workbooks_;
|
||||
return workbooks_[index];
|
||||
End;
|
||||
|
||||
Reference in New Issue
Block a user