`range.font` and `range.border`

This commit is contained in:
csh 2023-11-17 16:56:00 +08:00
parent 7283b7ac28
commit 3781bc96e7
32 changed files with 5752 additions and 543 deletions

View File

@ -53,7 +53,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);
@ -346,7 +346,7 @@ End;
// ============== 实现 ================= //
Function TSDocxApplication.Create();
Begin
Class(TSVbaBase).Create(self, random(10000000), self);
Class(TSVbaBase).Create(self, random(100000000), self);
Init();
End;
@ -361,7 +361,7 @@ End;
Function TSDocxApplication.ReadDocuments(Index)
Begin
if ifnil(Index) then return documents_;
return documents_[Index];
return documents_.Item(Index);
End;
Function TSDocxApplication.ReadActiveDocument();

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;

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;

View File

@ -2,19 +2,29 @@ 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_;
public
Function AutoSum();
@ -50,19 +60,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 +82,42 @@ 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);
End;
Function TSDocxCell.GetCell();
@ -113,16 +127,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 +197,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 +294,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 +331,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 +364,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 +375,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,7 +386,7 @@ Begin
return tcpr_.CellMar.Value("Left") / 20;
End;
Function TSDocxCell.WriteBottomPadding(bottom);
Function TSDocxCell.WriteBottomPadding(value);
Begin
tcpr_.CellMar.Bottom := 20 * bottom;
tcpr_.CellMar.BottomType := "dxa";
@ -255,9 +397,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;
@ -282,9 +424,9 @@ 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 +459,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 +474,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 +499,75 @@ 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;
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
pbegin := 0;
pend := 0;
arr := array();
class(TSWdCommon).CalculateRange(table_.Root(), docx_.Body().Root(), GetCell().Root(), false, pbegin, pend, arr);
range_ := new TSDocxRange(self.Application, self.Creator, self);
range_.Init(pbegin, pend, arr);
end
return range_;
End;

View File

@ -1,10 +1,13 @@
Type TSDocxCells = Class(TSVbaBase)
public
Function Init(table);
Function Init(table, row, column);
Function Operator[](index);
private
table_; // TOfficeObj("TTable")
row_;
column_;
public
Function Add(BeforeCell);
@ -48,3 +51,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(table_, row, column);
return cell_obj;
End;
// function
Function TSDocxCells.Item(Index);
Begin
return self[Index - 1];
End;

View File

@ -5,13 +5,12 @@ public
Function Init(table, column);
private
Function SetColumnWidth(column, wvalue, type);
Function SerializeTblGrid();
private
table_;
column_;
min_dxa_width_; // 最小宽度 321
cells_;
public
Function AutoFit();
@ -45,7 +44,7 @@ public
Function ReadIsLast();
Function ReadIsFirst();
Function ReadIndex();
Function ReadCells();
Function ReadCells(n);
Function ReadBorders();
End;
@ -55,24 +54,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();
@ -93,146 +76,55 @@ End;
// function
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
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_[n];
End;

View File

@ -49,7 +49,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;

View File

@ -9,6 +9,7 @@ private
file_name_;
full_name_;
tables_;
paragraphs_;
public
Function AcceptAllRevisions();
@ -37,15 +38,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 +61,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 Range(Start, _End);
Function Redo(Times);
Function RejectAllRevisions();
Function RejectAllRevisionsShown();
@ -113,7 +114,7 @@ public
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;
@ -403,8 +404,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();
@ -584,8 +585,10 @@ Begin
file_name_ := name;
full_name_ := fullname;
collection_ := class(Collection).GetInstance('document');
tables_ := new TSDocxTables(self.Application, self.Parent, self);
tables.Init(docx);
tables_ := new TSDocxTables(self.Application, self.Creator, self);
tables.Init(docx_);
paragraphs_ := new TSDocxParagraphs(self.Application, self.Creator, self);
paragraphs_.Init(docx_);
End;
// function
@ -614,6 +617,19 @@ Begin
docx_.SaveAs("", FileName);
End;
Function TSDocxDocument.Range(Start, _End);
Begin
// Range(0, 1) 左开右闭
node := docx_.Body().Node(); // <body>
total_position := 0;
arr := array();
class(TSWdCommon).SplitRange(node, node, Start, _End, total_position, arr);
range_obj := new TSDocxRange(self.Application, self.Creator, self);
range_obj.Init(Start, _End, arr);
return range_obj;
End;
// property
Function TSDocxDocument.ReadFullName();
Begin
@ -625,9 +641,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 +653,10 @@ End;
Function TSDocxDocument.ReadTables(index);
Begin
if ifnil(index) then return tables_;
return tables_[index];
return ifnil(index) ? tables_ : tables.Item(index);
End;
Function TSDocxDocument.ReadParagraphs(index);
Begin
return ifnil(index) ? paragraphs_ : paragraphs_.Item(index);
End;

View File

@ -64,9 +64,9 @@ Begin
AddDocument(docx, collection_.CalNewName("文档"));
End;
Function TSDocxDocuments.Item(index);
Function TSDocxDocuments.Item(Index);
Begin
return self[index];
return self[Index];
End;
Function TSDocxDocuments.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,

File diff suppressed because it is too large Load Diff

211
docx/TSDocxParagraph.tsf Normal file
View File

@ -0,0 +1,211 @@
Type TSDocxParagraph = Class(TSVbaBase)
public
Function Init(body, paragraph, index);
private
body_;
paragraph_; // TOfficeObj("TParagraph")
index_; // 第N个段落1开始计数
range_;
public
Function CloseUp();
Function Indent();
Function IndentCharWidth(Count);
Function IndentFirstLineCharWidth(Count);
Function JoinList();
Function ListAdvanceTo();
Function Next(Count);
Function OpenOrCloseUp();
Function OpenUp();
Function Outdent();
Function OutlineDemote();
Function OutlineDemoteToBody();
Function OutlinePromote();
Function Previous(Count);
Function Reset();
Function ResetAdvanceTo();
Function SelectNumber();
Function SeparateList();
Function Space1();
Function Space15();
Function Space2();
Function TabHangingIndent(Count);
Function TabIndent(Count);
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 CollapsedState read ReadCollapsedState write WriteCollapsedState;
property CollapseHeadingByDefault read ReadCollapseHeadingByDefault write WriteCollapseHeadingByDefault;
property DisableLineHeightGrid read ReadDisableLineHeightGrid write WriteDisableLineHeightGrid;
property DropCap read ReadDropCap;
property FarEastLineBreakControl read ReadFarEastLineBreakControl write WriteFarEastLineBreakControl;
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 ID read ReadID write WriteID;
property IsStyleSeparator read ReadIsStyleSeparator;
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 ListNumberOriginal read ReadListNumberOriginal;
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 Range read ReadRange;
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);
Function ReadWordWrap();
Function WriteWidowControl(value);
Function ReadWidowControl();
Function WriteTextboxTightWrap(value);
Function ReadTextboxTightWrap();
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 ReadRange();
Function WritePageBreakBefore(value);
Function ReadPageBreakBefore();
Function WriteOutlineLevel(value);
Function ReadOutlineLevel();
Function WriteNoLineNumber(value);
Function ReadNoLineNumber();
Function WriteMirrorIndents(value);
Function ReadMirrorIndents();
Function ReadListNumberOriginal();
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 WriteKeepWithNext(value);
Function ReadKeepWithNext();
Function WriteKeepTogether(value);
Function ReadKeepTogether();
Function ReadIsStyleSeparator();
Function WriteID(value);
Function ReadID();
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 WriteFarEastLineBreakControl(value);
Function ReadFarEastLineBreakControl();
Function ReadDropCap();
Function WriteDisableLineHeightGrid(value);
Function ReadDisableLineHeightGrid();
Function WriteCollapseHeadingByDefault(value);
Function ReadCollapseHeadingByDefault();
Function WriteCollapsedState(value);
Function ReadCollapsedState();
Function WriteCharacterUnitRightIndent(value);
Function ReadCharacterUnitRightIndent();
Function WriteCharacterUnitLeftIndent(value);
Function ReadCharacterUnitLeftIndent();
Function WriteCharacterUnitFirstLineIndent(value);
Function ReadCharacterUnitFirstLineIndent();
Function ReadBorders(index);
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 TSDocxParagraph.Init(body, paragraph, index);
Begin
body_ := body;
paragraph_ := paragraph;
index_ := index;
range_ := nil;
End;
// function
Function TSDocxParagraph.Next(Count);
Begin
return self.Parent.Item(index + Count);
End;
Function TSDocxParagraph.Previous(Count);
Begin
return self.Parent.Item(index - Count);
End;
// property
Function TSDocxParagraph.ReadBorders(index);
Begin
borders_obj := new TSDocxBordersParagraph(self.Application, self.Creator, self.Parent);
borders_obj.Init(paragraph_);
return ifnil(index) ? borders_obj : borders_obj[index];
End;
Function TSDocxParagraph.ReadRange();
Begin
if ifnil(range_) then
begin
pbegin := 0;
pend := 0;
arr := array();
node := body_.Root();
class(TSWdCommon).CalculateRange(node, node, paragraph_.Root(), false, pbegin, pend, arr);
range_ := new TSDocxRange(self.Application, self.Creator, self);
range_.Init(pbegin, pend, arr);
end
return range_;
End;

209
docx/TSDocxParagraphs.tsf Normal file
View File

@ -0,0 +1,209 @@
Type TSDocxParagraphs = Class(TSVbaBase)
public
Function Init(docx);
Function Operator[](index);
Function SerializeParagraphs(root);
private
docx_;
body_;
paragraphs_; // TOfficeObj("TParagraph")数组
public
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);
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;
body_ := docx_.Body();
paragraphs_ := array();
SerializeParagraphs(body_.Node());
End;
Function TSDocxParagraphs.SerializeParagraphs(root);
Begin
node := root.FirstChildElement();
while ifObj(node) do
begin
name := node.GetName();
if name = "w:p" then
begin
obj := TOfficeObj("TParagraph");
obj.Init(node);
paragraphs_[length(paragraphs_)] := obj;
end
else if name = "w:tbl" then
begin
tr := node.FirstChildElement("w:tr");
while ifObj(tr) do
begin
tc := tr.FirstChildElement("w:tc");
while ifObj(tc) do
begin
SerializeParagraphs(tc);
tc := tc.NextElement("w:tc");
end
paragraphs_[length(paragraphs_)] := TOfficeObj("TParagraph");
tr := tr.NextElement("w:tr");
end
end
node := node.NextElement();
End;
End;
Function Operator TSDocxParagraphs.[](index);
Begin
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
paragraph_obj.Init(body_, paragraphs_[index], index + 1);
return paragraph_obj;
End;
// function
Function TSDocxParagraphs.Item(Index);
Begin
return self[Index - 1];
End;
Function TSDocxParagraphs.ReadCount();
Begin
return length(paragraphs_);
End;

446
docx/TSDocxRange.tsf Normal file
View File

@ -0,0 +1,446 @@
Type TSDocxRange = class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(pbegin, pend, arr);
Function SetRangeArr(arr);
Function SetRangeFont();
Function CopyRunFormat(sourceRun, destRun);
private
range_arr_;
range_font_; // TSDocxFontRange
begin_;
end_;
public
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 Nex(_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();
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;
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();
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 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(pbegin, pend, arr);
Begin
range_arr_ := arr;
begin_ := pbegin;
end_ := pend;
range_font_ := new TSDocxFontRange(self.Application, self.Creator, self);
range_font_.Init(range_arr_);
End;
Function TSDocxRange.SetRangeArr(arr);
Begin
range_arr_ := arr;
range_font_ := new TSDocxFontRange(self.Application, self.Creator, self);
range_font_.Init(range_arr_);
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
Function TSDocxRange.InsertAfter(Text);
Begin
paragraph := range_arr_[length(range_arr_)-1]["tparagraph"];
if paragraph.Empty() then
begin
run := paragraph.AppendRun();
run.AddText(Text);
paragraph.CopyRunFormat(false, run.Root());
end
else begin
trun := range_arr_[length(range_arr_)-1]["trun"];
run := paragraph.AppendRun(trun);
run.AddText(Text);
CopyRunFormat(trun.Root(), run.Root());
end
End;
Function TSDocxRange.InsertBefore(Text);
Begin
paragraph := range_arr_[0]["tparagraph"];
if paragraph.Empty() then
begin
run := paragraph.AppendRun();
run.AddText(Text);
paragraph.CopyRunFormat(false, run.Root());
end
else begin
trun := range_arr_[0]["trun"];
node := trun.Root().PrevElement();
if not ifObj(node) then node := trun.Root();
run := paragraph.PrependRun(trun);
run.AddText(Text);
CopyRunFormat(node, run.Root());
end
End;
Function TSDocxRange.InsertBreak(Type);
Begin
pf := function(t, c);
begin
range_arr_[0] := class(TSWdCommon).SplitSingleRangeRun(range_arr_[0]);
run := range_arr_[0]["trun"];
run.Br.Type := t;
run.Br.Clear := c;
run.ClearText();
run.Apply();
end
if ifnil(Type) then Type := TSDocxEnumerations.wdPageBreak();
case Type of
TSDocxEnumerations.wdColumnBreak():
return;
TSDocxEnumerations.wdLineBreak():
##pf("textWrapping", nil);
TSDocxEnumerations.wdLineBreakClearLeft():
##pf("textWrapping", "left");
TSDocxEnumerations.wdLineBreakClearRight():
##pf("textWrapping", "right");
TSDocxEnumerations.wdPageBreak(): // TODO需要切割段落
return;
TSDocxEnumerations.wdSectionBreakContinuous():
return;
TSDocxEnumerations.wdSectionBreakEvenPage():
return;
TSDocxEnumerations.wdSectionBreakNextPage():
return;
TSDocxEnumerations.wdSectionBreakOddPage():
return;
TSDocxEnumerations.wdTextWrappingBreak():
##pf("textWrapping", "all");
end;
End;
// property
Function TSDocxRange.WriteBoldBi(value);
Begin
range_font_.BoldBi := value;
End;
Function TSDocxRange.ReadBoldBi();
Begin
return range_font_.BoldBi;
End;
Function TSDocxRange.WriteBold(value);
Begin
range_font_.Bold := value;
End;
Function TSDocxRange.ReadBold();
Begin
return range_font_.Bold;
End;
Function TSDocxRange.ReadFont();
Begin
return range_font_;
End;
Function TSDocxRange.ReadBorders(index);
Begin
borders_obj := new TSDocxBordersRange(self.Application, self.Creator, self);
borders_obj.Init(range_arr_);
return ifnil(index) ? borders_obj : borders_obj.Item(index);
End;

View File

@ -1,4 +1,5 @@
Type TSDocxRow = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(table, row);

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;

View File

@ -1,4 +1,5 @@
Type TSDocxShading = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(pr);
@ -27,7 +28,7 @@ End;
// ============== 实现 ================= //
Function TSDocxShading.Init(application, pr);
Function TSDocxShading.Init(pr);
Begin
pr_ := pr;
End;

View File

@ -7,6 +7,7 @@ public
private
docx_;
table_; // TOfficeObj('TTable') 对象
range_;
public
Function ApplyStyleDirectFormatting(StyleName);
@ -105,77 +106,87 @@ 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 := new TSDocxCell(self.Application, self.Creator, self.Parent);
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;
@ -193,3 +204,18 @@ End;
Function TSDocxTable.ReadPreferredWidth();
Begin
End;
Function TSDocxTable.ReadRange();
Begin
if ifnil(range_) then
begin
pbegin := 0;
pend := 0;
arr := array();
root := docx_.Body().Root();
class(TSWdCommon).CalculateRange(root, root, table_.Root(), false, pbegin, pend, arr);
range_ := new TSDocxRange(self.Application, self.Creator, self);
range_.Init(pbegin, pend, arr);
end
return range_;
End;

View File

@ -0,0 +1,445 @@
Type TSDocxBorder = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(borders);
protected
border_;
color_;
color_index_;
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(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;
// property
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;
border_.Update("first");
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;
border_.Update("first");
End;
Function TSDocxBorder.ReadArtWidth();virtual;
Begin
return border_.Value("Size");
End;
Function TSDocxBorder.WriteColor(value);virtual;
Begin
border_.Color := color_[value];
border_.Update("first");
End;
Function TSDocxBorder.ReadColor();virtual;
Begin
return color_[border_.Value("Color")];
End;
Function TSDocxBorder.WriteColorIndex(value);virtual;
Begin
color := color_index_[value];
if ifnil(color) then border_.Root().DeleteAttribute("w:color");
else begin
border_.Color := color;
border_.Update("first");
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;
border_.Update("first");
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;
border_.Update("first");
End;
Function TSDocxBorder.ReadLineWidth();virtual;
Begin
return border_.Value("Size");
End;
Function TSDocxBorder.WriteVisible(value);virtual;
Begin
v := value ? "single" : "nil";
border_.Update("first");
End;
Function TSDocxBorder.ReadVisible();virtual;
Begin
value := border_.Value("Val");
return value = "nil" ? false : true;
End;

View File

@ -0,0 +1,190 @@
Type TSDocxBorderRange = Class(TSDocxBorder)
Uses TSDocxEnumerations;
public
Function Init(arr, borderType);
private
Function GetBorderObjectByNode(node);
Function GetBorder(arr, hash);
Function CallFunction(fname, value);overload;
Function CallFunction(fname);overload;
Function SplitRun();
private
range_arr_;
border_type_;
split_flag_;
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(arr, borderType);
Begin
range_arr_ := arr;
border_type_ := borderType;
split_flag_ := false;
class(TSDocxBorder).Init(nil);
End;
Function TSDocxBorderRange.SplitRun();
Begin
if split_flag_ then return;
class(TSWdCommon).SplitRangeRun(range_arr_);
self.Parent.SetRangeArr(range_arr_);
split_flag_ := true;
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 length(range_arr_)-1 do
begin
border := GetBorder(range_arr_[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 length(range_arr_)-1 do
begin
border := GetBorder(range_arr_[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;

View File

@ -0,0 +1,187 @@
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;
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;

View File

@ -1,15 +1,12 @@
Type TSDocxBorders = Class(TSVbaBase)
public
Function Init(borders);
Function Operator[](index);virtual;
private
borders_;
Function GetBorder(index);virtual;
public
Function ApplyPageBordersToAllSections();
Function Item(Index);
Function Item(Index);virtual;
property AlwaysInFront read ReadAlwaysInFront write WriteAlwaysInFront;
property Count read ReadCount;
@ -85,20 +82,15 @@ 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);
Function TSDocxBorders.Item(Index);virtual;
Begin
return self[Index];
End;

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;

View File

@ -0,0 +1,39 @@
Type TSDocxBordersParagraph = Class(TSDocxBorders)
Uses TSDocxEnumerations;
public
Function Init(Paragraph);
Function GetBorder(index);override;
private
paragraph_; // TOfficeObj("TParagraph")
End;
// ============== 实现 ================= //
Function TSDocxBordersParagraph.Init(paragraph);
Begin
paragraph_ := paragraph;
End;
Function TSDocxBordersParagraph.GetBorder(index);override;
Begin
obj := paragraph_.pPr.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;

View File

@ -0,0 +1,33 @@
Type TSDocxBordersRange = Class(TSDocxBorders)
public
Function Init(arr);
Function Operator[](index);override;
private
range_arr_;
public
Function Item(Index);override;
End;
// ============== 实现 ================= //
Function TSDocxBordersRange.Init(arr);
Begin
range_arr_ := arr;
End;
Function Operator TSDocxBordersRange.[](index);override;
Begin
border_obj := new TSDocxBorderRange(self.Application, self.Creator, self.Parent);
border_obj.Init(range_arr_, index);
return border_obj;
End;
// function
Function TSDocxBordersRange.Item(Index);override;
Begin
return self[Index];
End;

View File

@ -2,7 +2,7 @@ Type TSDocxBordersTable = Class(TSDocxBorders)
public
Function Init(table);
Function Operator[](index);overload;
Function Operator[](index);override;
private
table_;
@ -16,7 +16,7 @@ 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);

732
docx/font/TSDocxFont.tsf Normal file
View File

@ -0,0 +1,732 @@
Type TSDocxFont = Class(TSVbaBase)
Uses TSDocxEnumerations;
public
Function Init(pr);
protected
pr_;
color_index_;
color_;
public
Function Grow();virtual;
Function Reset();virtual;
Function SetAsTemplateDefault();virtual;
Function Shrink();virtual;
property AllCaps read ReadAllCaps write WriteAllCaps;
property Bold read ReadBold write WriteBold;
property BoldBi read ReadBoldBi write WriteBoldBi;
property Borders read ReadBorders;
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 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
Function TSDocxFont.Reset();virtual;
Begin
pr_.Delete();
End;
// property
Function TSDocxFont.WriteAllCaps(value);virtual;
Begin
pr_.Caps := value = TSDocxEnumerations.wdToggle() ? _Not(self.Caps) : value;
pr_.Update("first");
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadBold();virtual;
Begin
return pr_.Value("Bold");
End;
Function TSDocxFont.WriteBoldBi(value);virtual;
Begin
pr_.BoldBi := value = TSDocxEnumerations.wdToggle() ? _Not(self.BoldBi) : value;
pr_.Update("first");
End;
Function TSDocxFont.ReadBoldBi();virtual;
Begin
return pr_.Value("bCs");
End;
Function TSDocxFont.WriteColorIndex(value);virtual;
Begin
color := color_index_[value];
if ifnil(color) then pr_.Root().DeleteChild("w:color");
else begin
pr_.Color := color;
pr_.Update("first");
end
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadContextualAlternates();virtual;
Begin
return pr_.Value("ContextualAlternates");
End;
Function TSDocxFont.WriteDisableCharacterSpaceGrid(value);virtual;
Begin
pr_.SnapToGrid := value ? false : true;
pr_.Update("first");
End;
Function TSDocxFont.ReadDisableCharacterSpaceGrid();virtual;
Begin
return pr_.Value("SnapToGrid") ? false : true;
End;
Function TSDocxFont.WriteDoubleStrikeThrough(value);virtual;
Begin
pr_.dStrike := value;
pr_.Update("first");
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;
pr_.Update("first");
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadEmphasisMark();virtual;
Begin
case pr_.Value("first") of
"none":
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadEngrave();virtual;
Begin
return pr_.Value("ImPrint");
End;
Function TSDocxFont.WriteHidden(value);virtual;
Begin
pr_.Vanish := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadHidden();virtual;
Begin
return pr_.Value("Vanish");
End;
Function TSDocxFont.WriteItalic(value);virtual;
Begin
pr_.Italic := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadItalic();virtual;
Begin
return pr_.Value("Italic");
End;
Function TSDocxFont.WriteItalicBi(value);virtual;
Begin
pr_.ICs := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadItalicBi();virtual;
Begin
return pr_.Value("ICs");
End;
Function TSDocxFont.WriteKerning(value);virtual;
Begin
pr_.Kern := value * 2;
pr_.Update("first");
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;
pr_.Update("first");
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadName();virtual;
Begin
return pr_.rFont.Value("EastAsia");
End;
Function TSDocxFont.WriteNameAscii(value);virtual;
Begin
pr_.rFont.Ascii := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameAscii();virtual;
Begin
return pr_.rFont.Value("Ascii");
End;
Function TSDocxFont.WriteNameBi(value);virtual;
Begin
pr_.rFont.Cs := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameBi();virtual;
Begin
return pr_.rFont.Value("Cs");
End;
Function TSDocxFont.WriteNameFarEast(value);virtual;
Begin
pr_.rFont.EastAsia := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameFarEast();virtual;
Begin
ret := pr_.rFont.Value("EastAsia");
return ret ? ret : "宋体";
End;
Function TSDocxFont.WriteNameOther(value);virtual;
Begin
pr_.rFont.HAnsi := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameOther();virtual;
Begin
return pr_.rFont.Value("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;
pr_.Update("first");
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;
pr_.Update("first");
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadOutline();virtual;
Begin
return pr_.Value("Outline");
End;
Function TSDocxFont.WritePosition(value);virtual;
Begin
pr_.Position := value * 2;
pr_.Update("first");
End;
Function TSDocxFont.ReadPosition();virtual;
Begin
return pr_.Value("Position ") / 2;
End;
Function TSDocxFont.WriteScaling(value);virtual;
Begin
pr_.W := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadScaling();virtual;
Begin
return pr_.Value("W");
End;
Function TSDocxFont.WriteShadow(value);virtual;
Begin
pr_.Shadow := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadShadow();virtual;
Begin
return pr_.Value("Shadow");
End;
Function TSDocxFont.WriteSize(value);virtual;
Begin
pr_.Sz := value * 2;
pr_.Update("first");
End;
Function TSDocxFont.ReadSize();virtual;
Begin
return pr_.Value("Sz") / 2;
End;
Function TSDocxFont.WriteSizeBi(value);virtual;
Begin
pr_.SzCs := value * 2;
pr_.Update("first");
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;
pr_.Update("first");
End;
Function TSDocxFont.ReadSmallCaps();virtual;
Begin
return pr_.Value("SmallCaps");
End;
Function TSDocxFont.WriteSpacing(value);virtual;
Begin
pr_.Spacing := value * 20;
pr_.Update("first");
End;
Function TSDocxFont.ReadSpacing();virtual;
Begin
return pr_.Value("Spacing") / 20;
End;
Function TSDocxFont.WriteStrikeThrough(value);virtual;
Begin
pr_.Strike := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadStrikeThrough();virtual;
Begin
return pr_.Value("Strike");
End;
Function TSDocxFont.WriteSubscript(value);virtual;
Begin
pr_.VertAlign := "subscript";
pr_.Update("first");
End;
Function TSDocxFont.ReadSubscript();virtual;
Begin
return pr_.Value("VertAlign");
End;
Function TSDocxFont.WriteSuperscript(value);virtual;
Begin
pr_.VertAlign := "supercript";
pr_.Update("first");
End;
Function TSDocxFont.ReadSuperscript();virtual;
Begin
return pr_.Value("VertAlign");
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;
pr_.Update("first");
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];
pr_.Update("first");
End;
Function TSDocxFont.ReadUnderlineColor();virtual;
Begin
return color_[pr_.Value("UColor")];
End;

View File

@ -0,0 +1,551 @@
Type TSDocxFontRange = Class(TSDocxFont)
Uses TSDocxEnumerations;
public
Function Init(arr);
private
Function CallFunction(pf, value);overload;
Function CallFunction(pf);overload;
Function SplitRun();
private
range_arr_;
split_flag_; // 写之前切割run切割后设为true
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 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(arr);
Begin
range_arr_ := arr;
split_flag_ := false;
class(TSDocxFont).Init(nil);
End;
Function TSDocxFontRange.SplitRun();
Begin
if split_flag_ then return;
class(TSWdCommon).SplitRangeRun(range_arr_);
self.Parent.SetRangeArr(range_arr_);
split_flag_ := true;
End;
Function TSDocxFontRange.CallFunction(pf, value);overload;
Begin
SplitRun();
for i:=0 to length(range_arr_)-1 do
begin
paragraph := range_arr_[i]["tparagraph"];
pr_ := paragraph.pPr.rPr;
##pf(value);
for i:=0 to length(range_arr_)-1 do
begin
pr_ := range_arr_[i]["trun"].rPr;
##pf(value);
end
end;
End;
Function TSDocxFontRange.CallFunction(pf);overload;
Begin
ret := nil;
for i:=0 to length(range_arr_)-1 do
begin
pr_ := range_arr_[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.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
return CallFunction(ThisFunction(class(TSDocxFont).WriteColorIndex), value);
End;
Function TSDocxFontRange.ReadColorIndex();override;
Begin
return CallFunction(ThisFunction(class(TSDocxFont).ReadColorIndex));
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;

75
docx/utils/TSWdColor.tsf Normal file
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;
hash2[nil] := TSDocxEnumerations.wdColorAutomatic();
return hash2;
End;

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;
hash2[nil] := TSDocxEnumerations.wdAuto();
return hash2;
End;

229
docx/utils/TSWdCommon.tsf Normal file
View File

@ -0,0 +1,229 @@
Type TSWdCommon = Class
Class Function AddRun(rootNode, parentNode, runNode, tParagraph, pStart, pEnd, pTotal, arr);
Begin
run_obj := TOfficeObj("TRun");
run_obj.Init(runNode);
text := ifObj(runNode) ? run_obj.Text() : "";
len := text ? length(text) : 1;
if pTotal + len > pStart then
begin
length := length(arr);
// 左边切割
if pTotal < pstart and pTotal + len > pStart + 1 then
arr[length]["lsplit"] := pStart - pTotal; // 左边丢弃的字符数
// 右边切割
if pTotal + len > pEnd then
arr[length]["rsplit"] := pTotal + len - pEnd; // 右边丢弃的字符数
arr[length]["tparagraph"] := tparagraph;
arr[length]["trun"] := run_obj;
arr[length]["text"] := text;
arr[length]["root"] := rootNode;
arr[length]["parent"] := parentNode;
end
return len;
End;
Class Function SplitRange(root, startNode, pStart, pEnd, pTotal, arr);
Begin
node := startNode.FirstChildElement();
while ifObj(node) do
begin
case node.GetName() of
"w:p":
begin
paragraph_obj := TOfficeObj("TParagraph");
paragraph_obj.Init(node);
if paragraph_obj.Empty() then
begin
class(TSWdCommon).AddRun(root, startNode, nil, paragraph_obj, pStart, pEnd, pTotal, arr);
end
else begin
paragraph_len := length(arr); // 标记段落完整的起始位置
sub_node := node.FirstChildElement();
while ifObj(sub_node) do
begin
case sub_node.GetName() of
"w:r":
begin
pTotal += class(TSWdCommon).AddRun(root, startNode, sub_node, paragraph_obj, pStart, pEnd, pTotal, arr);
if pTotal >= pEnd then return 1;
end
"w:ins", "w:del":
begin
run_node := sub_node.FirstChildElement("w:r");
while ifObj(run_node) do
begin
class(TSWdCommon).AddRun(paragraph_obj, root, run_node, pStart, pEnd, pTotal, arr);
run_node := run_node.NextElement("w:r");
end
end
end;
sub_node := sub_node.NextElement();
end
for i:=paragraph_len to length(arr)-1 do
arr[i]["entirety"] := node;
end
pTotal += 1;
if pTotal >= pEnd then return 1;
end
"w:tbl":
begin
table_len := length(arr);
tr := node.FirstChildElement("w:tr");
while ifObj(tr) do
begin
tc := tr.FirstChildElement("w:tc");
while ifObj(tc) do
begin
cell_len := length(arr);
flag := class(TSWdCommon).SplitRange(root, tc, pStart, pEnd, pTotal, arr);
if flag then return 1;
tc := tc.NextElement("w:tc");
if pTotal >= pEnd then return 1;
for i:=cell_len to length(arr)-1 do
arr[i]["entirety"] := node;
end
tr := tr.NextElement("w:tr");
pTotal += 1;
if pTotal >= pEnd then return 1;
end
for i:=table_len to length(arr)-1 do
arr[i]["entirety"] := node;
end
end;
node := node.NextElement();
end
End;
Class Function AddRange(root, startNode, findNode, tParagraph, runNode, arr);
Begin
run_obj := TOfficeObj("TRun");
run_obj.Init(runNode);
length := length(arr);
arr[length]["tparagraph"] := tParagraph;
arr[length]["trun"] := run_obj;
arr[length]["root"] := root;
arr[length]["parent"] := startNode;
arr[length]["entirety"] := findNode;
text := ifObj(runNode) ? run_obj.Text() : "";
return text ? length(text) : 1;
End;
Class Function ParagraphRange(root, startNode, findNode, node, pend, arr);
Begin
paragraph_obj := TOfficeObj("TParagraph");
paragraph_obj.Init(node);
if paragraph_obj.Empty() then
begin
class(TSWdCommon).AddRange(root, startNode, findNode, paragraph_obj, nil, arr);
end
else begin
sub_node := node.FirstChildElement();
while ifObj(sub_node) do
begin
case sub_node.GetName() of
"w:r": pend += class(TSWdCommon).AddRange(root, startNode, findNode, paragraph_obj, sub_node, arr);
"w:ins", "w:del":
begin
run_node := sub_node.FirstChildElement("w:r");
while ifObj(run_node) do
begin
pend += class(TSWdCommon).AddRange(root, findNode, paragraph_obj, run_node, arr);
run_node := run_node.NextElement("w:r");
end
end
end;
sub_node := sub_node.NextElement();
end
end
pend += 1;
End;
Class Function CalculateRange(root, startNode, findNode, findFlag, pbegin, pend, arr);
Begin
if findFlag then arr := array();
node := startNode.FirstChildElement();
while ifObj(node) do
begin
if node.Eq(findNode) then
begin
find_flag2 := true;
arr := array();
end
case node.GetName() of
"w:p": class(TSWdCommon).ParagraphRange(root, startNode, findNode, node, pend, arr);
"w:tbl":
begin
tr := node.FirstChildElement("w:tr");
while ifObj(tr) do
begin
tc := tr.FirstChildElement("w:tc");
while ifObj(tc) do
begin
tc_node := tc;
new_flag := tc_node.Eq(findNode);
if new_flag then temp := pbegin; // 把pbegin存起来防止递归覆盖
flag := CalculateRange(root, tc_node, findNode, new_flag, pbegin, pend, arr);
if new_flag then pbegin := temp;
if flag then return 1;
tc := tc.NextElement("w:tc");
end
tr := tr.NextElement("w:tr");
pend += 1;
end
end
end;
if find_flag2 then return 1;
if not flag then pbegin := pend;
node := node.NextElement();
end
if findFlag then return 1;
End;
Class Function SplitRangeRun(rangeArr);overload;
Begin
for i:=0 to length(rangeArr)-1 do
rangeArr[i] := class(TSWdCommon).SplitSingleRangeRun(rangeArr[i]);
End;
Class Function SplitSingleRangeRun(arr);overload;
Begin
insert_run := function(root, node);
begin
new_node := root.InsertAfterChild(node, "element", "w:r");
run := TOfficeObj("TRun");
run.Init(new_node);
return run;
end
paragraph := arr["tparagraph"];
run := arr["trun"];
text := arr["text"];
if arr["lsplit"] then // 分割左边
begin
lpos := arr["lsplit"];
run.SetText(text[:lpos]);
run := ##insert_run(paragraph.Root(), run.Root());
text := text[lpos + 1:];
run.SetText(text);
arr["text"] := text;
arr["lsplit"] := nil;
end
if arr["rsplit"] then // 分割右边的run
begin
rpos := length(text) - arr["rsplit"];
run.SetText(text[1:rpos]);
new_run := ##insert_run(paragraph.Root(), run.Root());
new_run.SetText(text[rpos+1:]);
arr["rsplit"] := nil;
arr["text"] := text[1:rpos];
end
arr["trun"] := run;
return arr;
End;
End;

View File

@ -1,7 +1,7 @@
Uses TSDocxEnumerations;
TestDocuments();
Function TestDocuments();
Begin
openpath := "D:/temp/vbatable.docx";
@ -17,7 +17,14 @@ Begin
println("ActiveDocument.Name = {}", application.ActiveDocument.Name);
println("ActiveDocument.Tables.Count = {}", application.ActiveDocument.Tables.Count);
TestTableCell(application);
// TestTableCell(application);
// TestTableColumns(application);
// TestTables(application);
// TestParagraphs(application);
// TestRange(application);
TestBorders(application);
// arr := application.ActiveDocument.Range(0, 10);
// println("arr = {}", arr);
Documents[2].SaveAs2(FileName : savepath);
println("savepath = {}", savepath);
@ -26,37 +33,114 @@ return;
End;
Function TestRange(application);
Begin
ActiveDocument := application.ActiveDocument;
range := ActiveDocument.Range(2, 4);
prange := ActiveDocument.Paragraphs(2).Range;
crange := ActiveDocument.Tables(1).Cell(1, 1).Range;
range.Font.Size := 20;
prange.Font.Bold := true;
crange.Font.Italic := true;
range.InsertAfter("After");
range.InsertBefore("Before");
prange.InsertAfter(Text: "after.");
prange.InsertBefore(Text: "before..");
crange.InsertAfter(Text: ".after");
crange.InsertBefore(Text: ".before");
return;
ActiveDocument.Range(2, 17).Font.Size := 20;
println("ActiveDocument.Range(2, 4).Font.Size = {}", ActiveDocument.Range(2, 4).Font.Size);
println("ActiveDocument.Range(2, 5).Font.Size = {}", ActiveDocument.Range(2, 5).Font.Size);
// ActiveDocument.Paragraphs(1).Range.Font.Bold := true;
// ActiveDocument.Paragraphs(2).Range.Font.Italic := true;
// println("ActiveDocument.Paragraphs(1).Range.Font.Bold = {}", ActiveDocument.Paragraphs(1).Range.Font.Bold);
// ActiveDocument.Paragraphs(1).Range.Font.NameFarEast := "微软雅黑";
// println("ActiveDocument.Paragraphs(1).Range.Font.NameFarEast = {}", ActiveDocument.Paragraphs(1).Range.Font.NameFarEast);
// ActiveDocument.Paragraphs(1).Range.Font.Size := 20;
// println("ActiveDocument.Paragraphs(1).Range.Font.Size = {}", ActiveDocument.Paragraphs(1).Range.Font.Size);
// ActiveDocument.Paragraphs(1).Range.Font.Italic := true;
// println("ActiveDocument.Paragraphs(1).Range.Font.Italic = {}", ActiveDocument.Paragraphs(1).Range.Font.Italic);
// ActiveDocument.Paragraphs(1).Range.Font.Name := "宋体";
// println("ActiveDocument.Paragraphs(1).Range.Font.Name = {}", ActiveDocument.Paragraphs(1).Range.Font.Name);
// ActiveDocument.Paragraphs(1).Range.Font.AllCaps := true;
// println("ActiveDocument.Paragraphs(1).Range.Font.AllCaps = {}", ActiveDocument.Paragraphs(1).Range.Font.AllCaps);
// ActiveDocument.Paragraphs(1).Range.Font.Underline := TSDocxEnumerations.wdUnderlineDash();
// println("ActiveDocument.Paragraphs(1).Range.Font.Underline = {}", ActiveDocument.Paragraphs(1).Range.Font.Underline);
// ActiveDocument.Paragraphs(1).Range.Font.UnderlineColor := TSDocxEnumerations.wdColorLime();
// println("ActiveDocument.Paragraphs(1).Range.Font.UnderlineColor = {}", ActiveDocument.Paragraphs(1).Range.Font.UnderlineColor);
// ActiveDocument.Paragraphs(1).Range.Font.Reset();
ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Bold := true;
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Bold = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Bold);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.NameFarEast := "微软雅黑";
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.NameFarEast = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.NameFarEast);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Size := 30;
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Size = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Size);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Italic := true;
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Italic = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Italic);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Name := "宋体";
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Name = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Name);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.AllCaps := true;
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.AllCaps = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.AllCaps);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Underline := TSDocxEnumerations.wdUnderlineSingle();
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Underline = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Underline);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.UnderlineColor := TSDocxEnumerations.wdColorBlue();
// println("ActiveDocument.Tables(1).Cell(1, 1).Range.Font.UnderlineColor = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Font.UnderlineColor);
// ActiveDocument.Tables(1).Cell(1, 1).Range.Font.Reset();
ActiveDocument.Tables(1).Cell(1, 1).Range.InsertAfter(Text:="111");
ActiveDocument.Tables(1).Cell(1, 1).Range.InsertBefore("before");
End;
Function TestParagraphs(application);
Begin
println(">>>>>>>>>>>>>>>>>>>>>> TestParagraphs");
ActiveDocument := application.ActiveDocument;
println("ActiveDocument.Paragraphs.Count = {}", ActiveDocument.Paragraphs.Count);
ActiveDocument.Paragraphs(1).Range.Font.Bold := true;
End;
Function TestTables(application);
Begin
ActiveDocument := application.ActiveDocument;
// ActiveDocument.Tables(1).ApplyStyleDirectFormatting('样式1');
tables := application.ActiveDocument.Tables();
// tables[1].AutoFitBehavior(TSDocxEnumerations.wdAutoFitContent());
tables[1].AutoFitBehavior(TSDocxEnumerations.wdAutoFitWindow());
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());
// tables[1].Cell(1, 1).Delete(TSDocxEnumerations.wdDeleteCellsEntireColumn());
// tables[1].Cell(1, 1).Delete(TSDocxEnumerations.wdDeleteCellsEntireRow());
// tables[1].Cell(3, 3).Delete(TSDocxEnumerations.wdDeleteCellsShiftLeft());
// tables[1].Cell(1, 2).Delete(TSDocxEnumerations.wdDeleteCellsShiftUp());
// tables[1].Cell(5, 3).Delete(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());
// tables2.Cell(1, 1).Delete(TSDocxEnumerations.wdDeleteCellsEntireColumn());
// tables2.Cell(1, 1).Delete(TSDocxEnumerations.wdDeleteCellsEntireRow());
// tables2.Cell(3, 3).Delete(TSDocxEnumerations.wdDeleteCellsShiftLeft());
// tables2.Cell(1, 2).Delete(TSDocxEnumerations.wdDeleteCellsShiftUp());
// tables2.Cell(5, 3).Delete(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();
// ActiveDocument.Tables(2).Cell(1, 1).VerticalAlignment := TSDocxEnumerations.wdCellAlignVerticalBottom();
// ActiveDocument.Tables(2).Cell(1, 2).VerticalAlignment := TSDocxEnumerations.wdCellAlignVerticalCenter();
// ActiveDocument.Tables(2).Cell(2, 2).VerticalAlignment := 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);
@ -69,15 +153,42 @@ Begin
// 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);
// ActiveDocument.Tables(2).Cell(3, 3).Tables(1).AutoFitBehavior(TSDocxEnumerations.wdAutoFitContent());
// ActiveDocument.Tables(2).Cell(3, 3).Tables(1).Cell(1, 1).Delete(TSDocxEnumerations.wdDeleteCellsEntireColumn());
// ActiveDocument.Tables(1).Cell(1, 1).Shading.Texture := TSDocxEnumerations.wdTextureHorizontal();
// ActiveDocument.Tables(3).Cell(2,1).PreferredWidthType := 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);
// ActiveDocument.Tables(3).Cell(2,1).SetHeight(RowHeight:=100, HeightRule:=TSDocxEnumerations.wdRowHeightAtLeast);
// ActiveDocument.Tables(3).Cell(2,1).HeightRule := TSDocxEnumerations.wdRowHeightExactly();
// ActiveDocument.Tables(3).Cell(2,1).Height := 30;
// println("ActiveDocument.Tables(3).Cell(2,1).Height = {}", ActiveDocument.Tables(3).Cell(2,1).Height);
// println("ActiveDocument.Tables(3).Cell(2,1).HeightRule = {}", ActiveDocument.Tables(3).Cell(2,1).HeightRule);
// println("ActiveDocument.Tables(3).Cell(1,4).Next.ColumnIndex = {}", ActiveDocument.Tables(3).Cell(1,4).Next.ColumnIndex);
// println("ActiveDocument.Tables(3).Cell(1,4).Next.RowIndex = {}", ActiveDocument.Tables(3).Cell(1,4).Next.RowIndex);
// println("ActiveDocument.Tables(3).Cell(2,4).Next.ColumnIndex = {}", ActiveDocument.Tables(3).Cell(2,4).Next);
// println("ActiveDocument.Tables(3).Cell(1,1).Previous.ColumnIndex = {}", ActiveDocument.Tables(3).Cell(1,1).Previous);
// println("ActiveDocument.Tables(3).Cell(2,1).Previous.ColumnIndex = {}", ActiveDocument.Tables(3).Cell(2,1).Previous.ColumnIndex);
// println("ActiveDocument.Tables(3).Cell(2,1).Previous.RowIndex = {}", ActiveDocument.Tables(3).Cell(2,1).Previous.RowIndex);
End;
Function TestTableColumns(application);
Begin
ActiveDocument := application.ActiveDocument;
ActiveDocument.Tables(1).Columns(1).SetWidth(100, TSDocxEnumerations.wdAdjustSameWidth());
ActiveDocument.Tables(3).Columns(2).PreferredWidthType := TSDocxEnumerations.wdPreferredWidthPercent();
ActiveDocument.Tables(3).Columns(2).PreferredWidth := 50;
println("ActiveDocument.Tables(3).Columns(2).PreferredWidth = {}", ActiveDocument.Tables(3).Columns(2).PreferredWidth);
println("ActiveDocument.Tables(3).Columns.Count = {}", ActiveDocument.Tables(3).Columns.Count);
println("ActiveDocument.Tables(3).Rows.Count = {}", ActiveDocument.Tables(3).Rows.Count);
println("ActiveDocument.Tables(3).Cell(1,2).Width = {}", ActiveDocument.Tables(3).Cell(1,2).Width);
println("ActiveDocument.Tables(2).Cell(1,2).Width = {}", ActiveDocument.Tables(2).Cell(1,2).Width);
ActiveDocument.Tables(1).Cell(1, 2).PreferredWidthType := TSDocxEnumerations.wdPreferredWidthPercent();
ActiveDocument.Tables(1).Cell(1, 2).Width := 100;
println("ActiveDocument.Tables(1).Cell(1,2).Width = {}", ActiveDocument.Tables(1).Cell(1,2).Width);
End;
Function TestTableRows();
Begin
// ActiveDocument.Tables(1).Rows.WrapAroundText := true;
@ -88,14 +199,52 @@ Begin
// println("Tables(1).Rows.WrapAroundText = {}", ActiveDocument.Tables(1).Rows.WrapAroundText);
End;
Function TestTableBorders();
Function TestBorders(application);
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);
ActiveDocument := application.ActiveDocument;
println("\n============== Start TestBorders ==============");
println("Tables(1) will set LineStyle = {}, color = {}", TSDocxEnumerations.wdLineStyleSingle(), TSDocxEnumerations.wdColorLime());
ActiveDocument.Tables(1).Borders(TSDocxEnumerations.wdBorderDiagonalUp()).LineStyle := TSDocxEnumerations.wdLineStyleSingle();
ActiveDocument.Tables(1).Borders(TSDocxEnumerations.wdBorderDiagonalUp()).Color := TSDocxEnumerations.wdColorLime();
println("ActiveDocument.Tables(1).Borders(TSDocxEnumerations.wdBorderDiagonalUp()).LineStyle = {}", ActiveDocument.Tables(1).Borders(TSDocxEnumerations.wdBorderDiagonalUp()).LineStyle);
println("ActiveDocument.Tables(1).Borders(TSDocxEnumerations.wdBorderDiagonalUp()).Color := {}", ActiveDocument.Tables(1).Borders(TSDocxEnumerations.wdBorderDiagonalUp()).Color);
println("\n");
println("Tables(1).Cell(1, 1) will set LineStyle = {}, LineWidth = {}", TSDocxEnumerations.wdLineStyleDot(), TSDocxEnumerations.wdLineWidth025pt());
ActiveDocument.Tables(1).Cell(1, 1).Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineStyle := TSDocxEnumerations.wdLineStyleDot();
ActiveDocument.Tables(1).Cell(1, 1).Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineWidth := TSDocxEnumerations.wdLineWidth025pt();
println("ActiveDocument.Tables(1).Cell(1, 1).Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineStyle = {}", ActiveDocument.Tables(1).Cell(1, 1).Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineStyle);
println("ActiveDocument.Tables(1).Cell(1, 1).Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineWidth = {}", ActiveDocument.Tables(1).Cell(1, 1).Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineWidth);
println("\n");
println("Range(2, 4) will set LineStyle = {}, ColorIndex = {}", TSDocxEnumerations.wdLineStyleTriple(), TSDocxEnumerations.wdBlue());
ActiveDocument.Range(2, 4).Borders(TSDocxEnumerations.wdBorderBottom()).LineStyle := TSDocxEnumerations.wdLineStyleTriple();
ActiveDocument.Range(2, 4).Borders(TSDocxEnumerations.wdBorderBottom()).ColorIndex := TSDocxEnumerations.wdBlue();
println("ActiveDocument.Range(2, 4).Borders(TSDocxEnumerations.wdBorderBottom()).LineStyle = {}", ActiveDocument.Range(2, 4).Borders(TSDocxEnumerations.wdBorderBottom()).LineStyle);
println("ActiveDocument.Range(2, 4).Borders(TSDocxEnumerations.wdBorderBottom()).ColorIndex = {}", ActiveDocument.Range(2, 4).Borders(TSDocxEnumerations.wdBorderBottom()).ColorIndex);
println("\n");
println("Paragraphs(2).Range will set LineStyle = {}", TSDocxEnumerations.wdLineStyleDouble());
ActiveDocument.Paragraphs(2).Range.Borders(TSDocxEnumerations.wdBorderLeft()).LineStyle := TSDocxEnumerations.wdLineStyleDouble();
println("ActiveDocument.Paragraphs(2).Range.Borders(TSDocxEnumerations.wdBorderLeft()).LineStyle = {}", ActiveDocument.Paragraphs(2).Range.Borders(TSDocxEnumerations.wdBorderLeft()).LineStyle);
println("\n");
println("Tables(1).Range wdBorderDiagonalUp will set LineStyle = {}", TSDocxEnumerations.wdLineStyleOutset());
println("Tables(1).Range wdBorderBottom will set LineStyle = {}", TSDocxEnumerations.wdLineStyleDashSmallGap());
ActiveDocument.Tables(1).Range.Borders(TSDocxEnumerations.wdBorderDiagonalUp()).LineStyle := TSDocxEnumerations.wdLineStyleOutset();
ActiveDocument.Tables(1).Range.Borders(TSDocxEnumerations.wdBorderBottom()).LineStyle := TSDocxEnumerations.wdLineStyleDashSmallGap();
println("ActiveDocument.Tables(1).Range.Borders(TSDocxEnumerations.wdBorderDiagonalUp()).LineStyle = {}", ActiveDocument.Tables(1).Range.Borders(TSDocxEnumerations.wdBorderDiagonalUp()).LineStyle);
println("ActiveDocument.Tables(1).Range.Borders(TSDocxEnumerations.wdBorderBottom()).LineStyle = {}", ActiveDocument.Tables(1).Range.Borders(TSDocxEnumerations.wdBorderBottom()).LineStyle);
println("\n");
println("Tables(1).Cell(1, 1).Range wdBorderVertical will set LineStyle = {}", TSDocxEnumerations.wdLineStyleEmboss3D());
println("Tables(1).Cell(1, 1).Range wdBorderDiagonalDown will set LineStyle = {}", TSDocxEnumerations.wdLineStyleEngrave3D());
ActiveDocument.Tables(1).Cell(1, 1).Range.Borders(TSDocxEnumerations.wdBorderVertical()).LineStyle := TSDocxEnumerations.wdLineStyleEmboss3D();
ActiveDocument.Tables(1).Cell(1, 1).Range.Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineStyle := TSDocxEnumerations.wdLineStyleEngrave3D();
println("ActiveDocument.Tables(1).Cell(1, 1).Range.Borders(TSDocxEnumerations.wdBorderVertical()).LineStyle = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Borders(TSDocxEnumerations.wdBorderVertical()).LineStyle);
println("ActiveDocument.Tables(1).Cell(1, 1).Range.Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineStyle = {}", ActiveDocument.Tables(1).Cell(1, 1).Range.Borders(TSDocxEnumerations.wdBorderDiagonalDown()).LineStyle);
println("============== End TestBorders ==============\n");
End;

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;