Compare commits

..
25 Commits
Author SHA1 Message Date
csh 0aa9639ae0 修复font获取中文问题 2024-03-05 09:13:33 +08:00
csh a68cfb01d7 修复shaing.apply失效问题 2024-02-29 16:08:47 +08:00
csh 46a8fb020b 修复border一些问题 2024-02-29 14:26:53 +08:00
csh e4a6d3f0c2 修复table通过Item获取border失败问题 2024-02-29 09:16:52 +08:00
csh 649d7d868a 修复tables.add报错问题 2024-02-28 14:35:59 +08:00
csh 1f7d5f403b 1. 修复tables.add位置错误
2. 修复insertbreak行为
3. 修复帮助文档错误
2024-02-26 14:04:52 +08:00
csh dbebc2805c 修复font属性 2024-02-22 18:47:17 +08:00
csh e917dce1df 修复font一些属性设置/获取失败 2024-02-22 13:47:24 +08:00
csh f685fdced1 修复bugs 2024-02-07 16:01:32 +08:00
csh 4cac47522a 修复range某些属性获取失败爆栈问题 2024-02-06 14:15:45 +08:00
csh 5196e6424c 修复font.color报错问题 2024-02-05 17:56:39 +08:00
csh b2040b1db5 修复range.boldbi出错问题 2024-02-05 17:06:14 +08:00
csh dffa3f8192 1. 修复文档的生成
2. 修复InlineShapes.Count
2024-02-01 15:07:54 +08:00
csh 3ba20a7c5e 支持range.insertfile 2024-01-22 14:24:02 +08:00
csh 1ac447c94e 增加range方法支持 2024-01-19 17:37:26 +08:00
csh b4649653d9 修正readme 2024-01-03 15:13:48 +08:00
csh e592781419 帮助文档 2024-01-03 10:03:13 +08:00
csh c59043f90b update 2024-01-02 15:38:31 +08:00
csh 9a846d935d remove test 2024-01-02 13:54:28 +08:00
csh c5bdd38506 update 2023-12-27 09:02:23 +08:00
csh ffbde2f964 支持添加图片 2023-12-27 09:00:59 +08:00
csh 5a002f9767 remov xlsx 2023-12-21 14:42:32 +08:00
csh b9e419541b 完善range 2023-12-20 09:06:40 +08:00
csh f0560b2330 range重新设计 2023-11-29 17:27:34 +08:00
csh 3781bc96e7 range.font and range.border 2023-11-17 16:56:00 +08:00
55 changed files with 9624 additions and 1498 deletions
+50 -1
View File
@@ -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.
+479
View File
@@ -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;
+9 -8
View File
@@ -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();
-144
View File
@@ -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;
-36
View File
@@ -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
View File
@@ -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=100xml是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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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();
File diff suppressed because it is too large Load Diff
+125
View File
@@ -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;
+118
View File
@@ -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;
+103
View File
@@ -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;
+312
View File
@@ -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;
+778
View File
@@ -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
View File
@@ -1,4 +1,5 @@
Type TSDocxRow = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(table, row);
+5
View File
@@ -153,3 +153,8 @@ Begin
class(TSXml).RemoveNode(table_.Root(), "w:tblPr/w:tblOverlap");
end
End;
Function TSDocxRows.ReadCount();
Begin
return table_.Rows();
End;
-48
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+39
View File
@@ -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;
+446
View File
@@ -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;
+192
View File
@@ -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;
+188
View File
@@ -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
+43
View File
@@ -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;
+39
View File
@@ -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;
+33
View File
@@ -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;
+734
View File
@@ -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;
+564
View File
@@ -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;
+114
View File
@@ -0,0 +1,114 @@
Type TSDocxListFormat = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(docx, pPr);
Function Apply();virtual;
Function GetNumId(type);
protected
docx_;
pr_; // TOfficeObj("TwpPr")
document_;
public
// Methods
Function ApplyBulletDefault(DefaultListBehavior);virtual;
Function ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior);virtual;
Function ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel);virtual;
Function ApplyNumberDefault(DefaultListBehavior);virtual;
Function ApplyOutlineNumberDefault(DefaultListBehavior);virtual;
Function CanContinuePreviousList(ListTemplate);virtual;
Function ConvertNumbersToText();virtual;
Function ListIndent();virtual;
Function ListOutdent();virtual;
Function RemoveNumbers(NumberType);virtual;
// Properties
property List read ReadList;
property ListLevelNumber read ReadListLevelNumber write WriteListLevelNumber;
property ListPictureBullet read ReadListPictureBullet;
property ListString read ReadListString;
property ListTemplate read ReadListTemplate;
property ListType read ReadListType;
property ListValue read ReadListValue;
property SingleList read ReadSingleList;
property SingleListTemplate read ReadSingleListTemplate;
Function ReadSingleListTemplate();virtual;
Function ReadSingleList();virtual;
Function ReadListValue();virtual;
Function ReadListType();virtual;
Function ReadListTemplate();virtual;
Function ReadListString();virtual;
Function ReadListPictureBullet();virtual;
Function WriteListLevelNumber(value);virtual;
Function ReadListLevelNumber();virtual;
Function ReadList();virtual;
End;
// ============== 实现 ================= //
Function TSDocxListFormat.Init(docx, pr);
Begin
docx_ := docx;
pr_ := pr;
document_ := self.Parent;
while not (document_ is class(TSDocxDocument)) do
document_ := document_.Parent;
End;
Function TSDocxListFormat.GetNumId(type);
Begin
numid := document_.GetParam(type);
if not ifnil(numid) then return numid;
case type of
"BulletDefault": numid := docx_.NumberingObject().NumberId("bullet", 0);
"NumberDefault": numid := docx_.NumberingObject().NumberId("singlelevel", "decimal");
"OutlineNumberDefault": numid := docx_.NumberingObject().NumberId("multilevel", "decimal");
end;
document_.SetParam(type, numid);
return numid;
End;
Function TSDocxListFormat.Apply();virtual;
Begin
pr_.Update("first");
End;
Function TSDocxListFormat.ApplyBulletDefault(DefaultListBehavior);
Begin
pr_.NumPr.Level := 0;
pr_.NumPr.NumId := self.GetNumId("BulletDefault");
pr_.Update("first");
End;
Function TSDocxListFormat.ApplyNumberDefault(DefaultListBehavior);
Begin
pr_.NumPr.Level := 0;
pr_.NumPr.NumId := self.GetNumId("NumberDefault");
pr_.Update("first");
End;
Function TSDocxListFormat.ApplyOutlineNumberDefault(DefaultListBehavior);virtual;
Begin
get_level := function(obj);
begin
if not ifObj(obj) then return '';
level := obj.HeadingLevel();
if level = "" then
begin
id := obj.Value("BasedOn", true);
return ##get_level(docx_.StyleObject().GetStyleById(id));
end
end
value := pr_.Value("OutlineLevel");
if ifnil(value) then
begin
obj := docx_.StyleObject().GetStyleById(styleid);
value := ##get_level(obj);
end
pr_.NumPr.Level := value;
pr_.NumPr.NumId := self.GetNumId("OutlineNumberDefault");
pr_.Update("first");
End;
+177
View File
@@ -0,0 +1,177 @@
Type TSDocxListFormatRange = Class(TSDocxListFormat)
Uses TSDocxEnumerations;
public
Function Init(docx, rangeObj);
Function Apply();override;
private
Function CallFunction(pf, value);overload;
Function CallFunction(pf);overload;
private
paragraph_arr_;
public
// Methods
Function ApplyBulletDefault(DefaultListBehavior);override;
Function ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior);override;
Function ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel);override;
Function ApplyNumberDefault(DefaultListBehavior);override;
Function ApplyOutlineNumberDefault(DefaultListBehavior);override;
Function CanContinuePreviousList(ListTemplate);override;
Function ConvertNumbersToText();override;
Function ListIndent();override;
Function ListOutdent();override;
Function RemoveNumbers(NumberType);override;
// Properties
Function ReadSingleListTemplate();override;
Function ReadSingleList();override;
Function ReadListValue();override;
Function ReadListType();override;
Function ReadListTemplate();override;
Function ReadListString();override;
Function ReadListPictureBullet();override;
Function WriteListLevelNumber(value);override;
Function ReadListLevelNumber();override;
Function ReadList();override;
End;
// ============== 实现 ================= //
Function TSDocxListFormatRange.Init(docx, rangeObj);
Begin
class(TSDocxListFormat).Init(docx, nil);
paragraph_arr_ := sselect distinct(["tparagraph"]) from rangeObj.data_ end;
End;
Function TSDocxListFormatRange.Apply();override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).Apply), nil);
End;
Function TSDocxListFormatRange.CallFunction(pf, value);overload;
Begin
for i:=0 to length(paragraph_arr_)-1 do
begin
pr_ := paragraph_arr_[i].pPr;
if not ifObj(pr_.Root()) then continue;
##pf(value);
end
End;
Function TSDocxListFormatRange.CallFunction(pf);overload;
Begin
ret := nil;
for i:=0 to length(paragraph_arr_)-1 do
begin
pr_ := paragraph_arr_[i].pPr;
if not ifObj(pr_.Root()) then continue;
cur := ##pf();
if ifnil(ret) then ret := cur;
if ret <> cur then return TSDocxEnumerations.wdUndefined();
end
return ret;
End;
// Methods
Function TSDocxListFormatRange.ApplyBulletDefault(DefaultListBehavior);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).ApplyBulletDefault), DefaultListBehavior);
End;
Function TSDocxListFormatRange.ApplyListTemplate(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior);override;
Begin
End;
Function TSDocxListFormatRange.ApplyListTemplateWithLevel(ListTemplate, ContinuePreviousList, ApplyTo, DefaultListBehavior, ApplyLevel);override;
Begin
End;
Function TSDocxListFormatRange.ApplyNumberDefault(DefaultListBehavior);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).ApplyNumberDefault), DefaultListBehavior);
End;
Function TSDocxListFormatRange.ApplyOutlineNumberDefault(DefaultListBehavior);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).ApplyOutlineNumberDefault), DefaultListBehavior);
End;
Function TSDocxListFormatRange.CanContinuePreviousList(ListTemplate);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).CanContinuePreviousList), ListTemplate);
End;
Function TSDocxListFormatRange.ConvertNumbersToText();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ConvertNumbersToText));
End;
Function TSDocxListFormatRange.ListIndent();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ListIndent));
End;
Function TSDocxListFormatRange.ListOutdent();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ListOutdent));
End;
Function TSDocxListFormatRange.RemoveNumbers(NumberType);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormat).RemoveNumbers), NumberType);
End;
Function TSDocxListFormatRange.ReadSingleListTemplate();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadSingleListTemplate));
End;
Function TSDocxListFormatRange.ReadSingleList();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadSingleList));
End;
Function TSDocxListFormatRange.ReadListValue();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListValue));
End;
Function TSDocxListFormatRange.ReadListType();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListType));
End;
Function TSDocxListFormatRange.ReadListTemplate();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListTemplate));
End;
Function TSDocxListFormatRange.ReadListString();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListString));
End;
Function TSDocxListFormatRange.ReadListPictureBullet();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListPictureBullet));
End;
Function TSDocxListFormatRange.WriteListLevelNumber(value);override;
Begin
CallFunction(ThisFunction(class(TSDocxListFormatRange).WriteListLevelNumber), Value);
End;
Function TSDocxListFormatRange.ReadListLevelNumber();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadListLevelNumber));
End;
Function TSDocxListFormatRange.ReadList();override;
Begin
return CallFunction(ThisFunction(class(TSDocxListFormatRange).ReadList));
End;
@@ -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;
+306
View File
@@ -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;
+166
View File
@@ -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
// 这样设计是为了段落走走段落的shadingtable走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;
+75
View File
@@ -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;
+34
View File
@@ -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;
+489
View File
@@ -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.Rangetable.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;
-101
View File
@@ -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;
-46
View File
@@ -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
View File
@@ -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
View File
@@ -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_;
-74
View File
@@ -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;
View File
-437
View File
@@ -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;
-81
View File
@@ -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;
-96
View File
@@ -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;
-66
View File
@@ -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;
-32
View File
@@ -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;