From 3781bc96e74946d7f65601b6b4a81cbebab89e6d Mon Sep 17 00:00:00 2001 From: csh Date: Fri, 17 Nov 2023 16:56:00 +0800 Subject: [PATCH] `range.font` and `range.border` --- docx/TSDocxApplication.tsf | 6 +- docx/TSDocxBorder.tsf | 144 -- docx/TSDocxBorderTable.tsf | 36 - docx/TSDocxCell.tsf | 323 +++- docx/TSDocxCells.tsf | 26 +- docx/TSDocxColumn.tsf | 160 +- docx/TSDocxColumns.tsf | 2 +- docx/TSDocxDocument.tsf | 50 +- docx/TSDocxDocuments.tsf | 4 +- docx/TSDocxEnumerations.tsf | 1728 +++++++++++++++++++++- docx/TSDocxParagraph.tsf | 211 +++ docx/TSDocxParagraphs.tsf | 209 +++ docx/TSDocxRange.tsf | 446 ++++++ docx/TSDocxRow.tsf | 1 + docx/TSDocxRows.tsf | 5 + docx/TSDocxShading.tsf | 3 +- docx/TSDocxTable.tsf | 80 +- docx/border/TSDocxBorder.tsf | 445 ++++++ docx/border/TSDocxBorderRange.tsf | 190 +++ docx/border/TSDocxBorderTable.tsf | 187 +++ docx/{ => border}/TSDocxBorders.tsf | 16 +- docx/border/TSDocxBordersCell.tsf | 43 + docx/border/TSDocxBordersParagraph.tsf | 39 + docx/border/TSDocxBordersRange.tsf | 33 + docx/{ => border}/TSDocxBordersTable.tsf | 4 +- docx/font/TSDocxFont.tsf | 732 +++++++++ docx/font/TSDocxFontRange.tsf | 551 +++++++ docx/utils/TSWdColor.tsf | 75 + docx/utils/TSWdColorIndex.tsf | 34 + docx/utils/TSWdCommon.tsf | 229 +++ test/docx_test.tsl | 209 ++- utils/collection_delete.tsf | 74 - 32 files changed, 5752 insertions(+), 543 deletions(-) delete mode 100644 docx/TSDocxBorder.tsf delete mode 100644 docx/TSDocxBorderTable.tsf create mode 100644 docx/TSDocxParagraph.tsf create mode 100644 docx/TSDocxParagraphs.tsf create mode 100644 docx/TSDocxRange.tsf create mode 100644 docx/border/TSDocxBorder.tsf create mode 100644 docx/border/TSDocxBorderRange.tsf create mode 100644 docx/border/TSDocxBorderTable.tsf rename docx/{ => border}/TSDocxBorders.tsf (94%) create mode 100644 docx/border/TSDocxBordersCell.tsf create mode 100644 docx/border/TSDocxBordersParagraph.tsf create mode 100644 docx/border/TSDocxBordersRange.tsf rename docx/{ => border}/TSDocxBordersTable.tsf (80%) create mode 100644 docx/font/TSDocxFont.tsf create mode 100644 docx/font/TSDocxFontRange.tsf create mode 100644 docx/utils/TSWdColor.tsf create mode 100644 docx/utils/TSWdColorIndex.tsf create mode 100644 docx/utils/TSWdCommon.tsf delete mode 100644 utils/collection_delete.tsf diff --git a/docx/TSDocxApplication.tsf b/docx/TSDocxApplication.tsf index 620e1b8..6275594 100644 --- a/docx/TSDocxApplication.tsf +++ b/docx/TSDocxApplication.tsf @@ -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(); diff --git a/docx/TSDocxBorder.tsf b/docx/TSDocxBorder.tsf deleted file mode 100644 index 69b9703..0000000 --- a/docx/TSDocxBorder.tsf +++ /dev/null @@ -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; diff --git a/docx/TSDocxBorderTable.tsf b/docx/TSDocxBorderTable.tsf deleted file mode 100644 index d3c5674..0000000 --- a/docx/TSDocxBorderTable.tsf +++ /dev/null @@ -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; diff --git a/docx/TSDocxCell.tsf b/docx/TSDocxCell.tsf index 3044376..6193bc1 100644 --- a/docx/TSDocxCell.tsf +++ b/docx/TSDocxCell.tsf @@ -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=100,xml是2000 -Function TSDocxCell.WriteWidth(width); +Function TSDocxCell.WriteWidth(value); Begin - tcpr_.Width := width * 20; - tcpr_.Type := "dxa"; + width_type := tcpr_.Value("Type"); + width_value := value; + case width_type of + "auto": + begin + width_value := width_value * 20; + width_type := "dxa"; + end + "dxa": width_value := width_value * 20; + "pct": width_value := width_value * 12.05; + end; + tcpr_.Width := integer(width_value); + tcpr_.Type := width_type; tcpr_.Update(); End; Function TSDocxCell.ReadWidth(); Begin - return tcpr_.Value("width") / 20; + width_type := tcpr_.Value("Type"); + width_value := tcpr_.Value("width"); + case width_type of + "dxa", "auto": return width_value / 20; + "pct": return width_value / 12.05; + end; End; -Function TSDocxCell.WriteWordWrap(wrap); +Function TSDocxCell.WriteWordWrap(value); Begin - tcpr_.noWrap := wrap ? 0 : 1; + tcpr_.noWrap := value ? 0 : 1; tcpr_.Update(); End; Function TSDocxCell.ReadWordWrap(); @@ -189,9 +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; diff --git a/docx/TSDocxCells.tsf b/docx/TSDocxCells.tsf index 9b678a2..848273c 100644 --- a/docx/TSDocxCells.tsf +++ b/docx/TSDocxCells.tsf @@ -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; diff --git a/docx/TSDocxColumn.tsf b/docx/TSDocxColumn.tsf index 1112bc7..6f35dba 100644 --- a/docx/TSDocxColumn.tsf +++ b/docx/TSDocxColumn.tsf @@ -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; diff --git a/docx/TSDocxColumns.tsf b/docx/TSDocxColumns.tsf index 294e69e..9016cb1 100644 --- a/docx/TSDocxColumns.tsf +++ b/docx/TSDocxColumns.tsf @@ -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; diff --git a/docx/TSDocxDocument.tsf b/docx/TSDocxDocument.tsf index ef2080f..215eeab 100644 --- a/docx/TSDocxDocument.tsf +++ b/docx/TSDocxDocument.tsf @@ -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(); // + 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; diff --git a/docx/TSDocxDocuments.tsf b/docx/TSDocxDocuments.tsf index 08ef922..678d2c5 100644 --- a/docx/TSDocxDocuments.tsf +++ b/docx/TSDocxDocuments.tsf @@ -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, diff --git a/docx/TSDocxEnumerations.tsf b/docx/TSDocxEnumerations.tsf index 1f6bacf..a812c51 100644 --- a/docx/TSDocxEnumerations.tsf +++ b/docx/TSDocxEnumerations.tsf @@ -1,7 +1,16 @@ Unit TSDocxEnumerations; Interface + + // WdConstants enumeration + Function wdAutoPosition(); + Function wdBackward(); + Function wdCreatorCode(); + Function wdFirst(); + Function wdForward(); + Function wdToggle(); + Function wdUndefined(); + // WdSaveOptions enumeration - Function TEST123(); Function wdDoNotSaveChanges(); Function wdPromptToSaveChanges(); Function wdSaveChanges(); @@ -130,7 +139,389 @@ Interface Function wdPreferredWidthPercent(); Function wdPreferredWidthPoints(); + // WdColorIndex + Function wdAuto(); + Function wdBlack(); + Function wdBlue(); + Function wdBrightGreen(); + Function wdByAuthor(); + Function wdDarkBlue(); + Function wdDarkRed(); + Function wdDarkYellow(); + Function wdGray25(); + Function wdGray50(); + Function wdGreen(); + Function wdNoHighlight(); + Function wdPink(); + Function wdRed(); + Function wdTeal(); + Function wdTurquoise(); + Function wdViolet(); + Function wdWhite(); + Function wdYellow(); + + // WdColor + Function wdColorAqua(); + Function wdColorAutomatic(); + Function wdColorBlack(); + Function wdColorBlue(); + Function wdColorBlueGray(); + Function wdColorBrightGreen(); + Function wdColorBrown(); + Function wdColorDarkBlue(); + Function wdColorDarkGreen(); + Function wdColorDarkRed(); + Function wdColorDarkTeal(); + Function wdColorDarkYellow(); + Function wdColorGold(); + Function wdColorGray05(); + Function wdColorGray10(); + Function wdColorGray125(); + Function wdColorGray15(); + Function wdColorGray20(); + Function wdColorGray25(); + Function wdColorGray30(); + Function wdColorGray35(); + Function wdColorGray375(); + Function wdColorGray40(); + Function wdColorGray45(); + Function wdColorGray50(); + Function wdColorGray55(); + Function wdColorGray60(); + Function wdColorGray625(); + Function wdColorGray65(); + Function wdColorGray70(); + Function wdColorGray75(); + Function wdColorGray80(); + Function wdColorGray85(); + Function wdColorGray875(); + Function wdColorGray90(); + Function wdColorGray95(); + Function wdColorGreen(); + Function wdColorIndigo(); + Function wdColorLavender(); + Function wdColorLightBlue(); + Function wdColorLightGreen(); + Function wdColorLightOrange(); + Function wdColorLightTurquoise(); + Function wdColorLightYellow(); + Function wdColorLime(); + Function wdColorOliveGreen(); + Function wdColorOrange(); + Function wdColorPaleBlue(); + Function wdColorPink(); + Function wdColorPlum(); + Function wdColorRed(); + Function wdColorRose(); + Function wdColorSeaGreen(); + Function wdColorSkyBlue(); + Function wdColorTan(); + Function wdColorTeal(); + Function wdColorTurquoise(); + Function wdColorViolet(); + Function wdColorWhite(); + Function wdColorYellow(); + + // WdEmphasisMark + Function wdEmphasisMarkNone(); + Function wdEmphasisMarkOverComma(); + Function wdEmphasisMarkOverSolidCircle(); + Function wdEmphasisMarkOverWhiteCircle(); + Function wdEmphasisMarkUnderSolidCircle(); + + // WdLigatures + Function wdLigaturesAll(); + Function wdLigaturesContextual(); + Function wdLigaturesContextualDiscretional(); + Function wdLigaturesContextualHistorical(); + Function wdLigaturesContextualHistoricalDiscretional(); + Function wdLigaturesDiscretional(); + Function wdLigaturesHistorical(); + Function wdLigaturesHistoricalDiscretional(); + Function wdLigaturesNone(); + Function wdLigaturesStandard(); + Function wdLigaturesStandardContextual(); + Function wdLigaturesStandardContextualDiscretional(); + Function wdLigaturesStandardContextualHistorical(); + Function wdLigaturesStandardDiscretional(); + Function wdLigaturesStandardHistorical(); + Function wdLigaturesStandardHistoricalDiscretional(); + + // WdNumberForm + Function wdNumberFormDefault(); + Function wdNumberFormLining(); + Function wdNumberFormOldstyle(); + + // WdNumberSpacing + Function wdNumberSpacingDefault(); + Function wdNumberSpacingProportional(); + Function wdNumberSpacingTabular(); + + // WdStylisticSet + Function wdStylisticSet01(); + Function wdStylisticSet02(); + Function wdStylisticSet03(); + Function wdStylisticSet04(); + Function wdStylisticSet05(); + Function wdStylisticSet06(); + Function wdStylisticSet07(); + Function wdStylisticSet08(); + Function wdStylisticSet09(); + Function wdStylisticSet10(); + Function wdStylisticSet11(); + Function wdStylisticSet12(); + Function wdStylisticSet13(); + Function wdStylisticSet14(); + Function wdStylisticSet15(); + Function wdStylisticSet16(); + Function wdStylisticSet17(); + Function wdStylisticSet18(); + Function wdStylisticSet19(); + Function wdStylisticSet20(); + Function wdStylisticSetDefault(); + + // WdUnderline + Function wdUnderlineDash(); + Function wdUnderlineDashHeavy(); + Function wdUnderlineDashLong(); + Function wdUnderlineDashLongHeavy(); + Function wdUnderlineDotDash(); + Function wdUnderlineDotDashHeavy(); + Function wdUnderlineDotDotDash(); + Function wdUnderlineDotDotDashHeavy(); + Function wdUnderlineDotted(); + Function wdUnderlineDottedHeavy(); + Function wdUnderlineDouble(); + Function wdUnderlineNone(); + Function wdUnderlineSingle(); + Function wdUnderlineThick(); + Function wdUnderlineWavy(); + Function wdUnderlineWavyDouble(); + Function wdUnderlineWavyHeavy(); + Function wdUnderlineWords(); + + // WdBreakType + Function wdColumnBreak(); + Function wdLineBreak(); + Function wdLineBreakClearLeft(); + Function wdLineBreakClearRight(); + Function wdPageBreak(); + Function wdSectionBreakContinuous(); + Function wdSectionBreakEvenPage(); + Function wdSectionBreakNextPage(); + Function wdSectionBreakOddPage(); + Function wdTextWrappingBreak(); + + // WdPageBorderArt + Function wdArtApples(); + Function wdArtArchedScallops(); + Function wdArtBabyPacifier(); + Function wdArtBabyRattle(); + Function wdArtBalloons3Colors(); + Function wdArtBalloonsHotAir(); + Function wdArtBasicBlackDashes(); + Function wdArtBasicBlackDots(); + Function wdArtBasicBlackSquares(); + Function wdArtBasicThinLines(); + Function wdArtBasicWhiteDashes(); + Function wdArtBasicWhiteDots(); + Function wdArtBasicWhiteSquares(); + Function wdArtBasicWideInline(); + Function wdArtBasicWideMidline(); + Function wdArtBasicWideOutline(); + Function wdArtBats(); + Function wdArtBirds(); + Function wdArtBirdsFlight(); + Function wdArtCabins(); + Function wdArtCakeSlice(); + Function wdArtCandyCorn(); + Function wdArtCelticKnotwork(); + Function wdArtCertificateBanner(); + Function wdArtChainLink(); + Function wdArtChampagneBottle(); + Function wdArtCheckedBarBlack(); + Function wdArtCheckedBarColor(); + Function wdArtCheckered(); + Function wdArtChristmasTree(); + Function wdArtCirclesLines(); + Function wdArtCirclesRectangles(); + Function wdArtClassicalWave(); + Function wdArtClocks(); + Function wdArtCompass(); + Function wdArtConfetti(); + Function wdArtConfettiGrays(); + Function wdArtConfettiOutline(); + Function wdArtConfettiStreamers(); + Function wdArtConfettiWhite(); + Function wdArtCornerTriangles(); + Function wdArtCouponCutoutDashes(); + Function wdArtCouponCutoutDots(); + Function wdArtCrazyMaze(); + Function wdArtCreaturesButterfly(); + Function wdArtCreaturesFish(); + Function wdArtCreaturesInsects(); + Function wdArtCreaturesLadyBug(); + Function wdArtCrossStitch(); + Function wdArtCup(); + Function wdArtDecoArch(); + Function wdArtDecoArchColor(); + Function wdArtDecoBlocks(); + Function wdArtDiamondsGray(); + Function wdArtDoubleD(); + Function wdArtDoubleDiamonds(); + Function wdArtEarth1(); + Function wdArtEarth2(); + Function wdArtEclipsingSquares1(); + Function wdArtEclipsingSquares2(); + Function wdArtEggsBlack(); + Function wdArtFans(); + Function wdArtFilm(); + Function wdArtFirecrackers(); + Function wdArtFlowersBlockPrint(); + Function wdArtFlowersDaisies(); + Function wdArtFlowersModern1(); + Function wdArtFlowersModern2(); + Function wdArtFlowersPansy(); + Function wdArtFlowersRedRose(); + Function wdArtFlowersRoses(); + Function wdArtFlowersTeacup(); + Function wdArtFlowersTiny(); + Function wdArtGems(); + Function wdArtGingerbreadMan(); + Function wdArtGradient(); + Function wdArtHandmade1(); + Function wdArtHandmade2(); + Function wdArtHeartBalloon(); + Function wdArtHeartGray(); + Function wdArtHearts(); + Function wdArtHeebieJeebies(); + Function wdArtHolly(); + Function wdArtHouseFunky(); + Function wdArtHypnotic(); + Function wdArtIceCreamCones(); + Function wdArtLightBulb(); + Function wdArtLightning1(); + Function wdArtLightning2(); + Function wdArtMapleLeaf(); + Function wdArtMapleMuffins(); + Function wdArtMapPins(); + Function wdArtMarquee(); + Function wdArtMarqueeToothed(); + Function wdArtMoons(); + Function wdArtMosaic(); + Function wdArtMusicNotes(); + Function wdArtNorthwest(); + Function wdArtOvals(); + Function wdArtPackages(); + Function wdArtPalmsBlack(); + Function wdArtPalmsColor(); + Function wdArtPaperClips(); + Function wdArtPapyrus(); + Function wdArtPartyFavor(); + Function wdArtPartyGlass(); + Function wdArtPencils(); + Function wdArtPeople(); + Function wdArtPeopleHats(); + Function wdArtPeopleWaving(); + Function wdArtPoinsettias(); + Function wdArtPostageStamp(); + Function wdArtPumpkin1(); + Function wdArtPushPinNote1(); + Function wdArtPushPinNote2(); + Function wdArtPyramids(); + Function wdArtPyramidsAbove(); + Function wdArtQuadrants(); + Function wdArtRings(); + Function wdArtSafari(); + Function wdArtSawtooth(); + Function wdArtSawtoothGray(); + Function wdArtScaredCat(); + Function wdArtSeattle(); + Function wdArtShadowedSquares(); + Function wdArtSharksTeeth(); + Function wdArtShorebirdTracks(); + Function wdArtSkyrocket(); + Function wdArtSnowflakeFancy(); + Function wdArtSnowflakes(); + Function wdArtSombrero(); + Function wdArtSouthwest(); + Function wdArtStars(); + Function wdArtStars3D(); + Function wdArtStarsBlack(); + Function wdArtStarsShadowed(); + Function wdArtStarsTop(); + Function wdArtSun(); + Function wdArtSwirligig(); + Function wdArtTornPaper(); + Function wdArtTornPaperBlack(); + Function wdArtTrees(); + Function wdArtTriangleParty(); + Function wdArtTriangles(); + Function wdArtTribal1(); + Function wdArtTribal2(); + Function wdArtTribal3(); + Function wdArtTribal4(); + Function wdArtTribal5(); + Function wdArtTribal6(); + Function wdArtTwistedLines1(); + Function wdArtTwistedLines2(); + Function wdArtVine(); + Function wdArtWaveline(); + Function wdArtWeavingAngles(); + Function wdArtWeavingBraid(); + Function wdArtWeavingRibbon(); + Function wdArtWeavingStrips(); + Function wdArtWhiteFlowers(); + Function wdArtWoodwork(); + Function wdArtXIllusions(); + Function wdArtZanyTriangles(); + Function wdArtZigZag(); + Function wdArtZigZagStitch(); + + // WdLineWidth + Function wdLineWidth025pt(); + Function wdLineWidth050pt(); + Function wdLineWidth075pt(); + Function wdLineWidth100pt(); + Function wdLineWidth150pt(); + Function wdLineWidth225pt(); + Function wdLineWidth300pt(); + Function wdLineWidth450pt(); + Function wdLineWidth600pt(); + Implementation + + // WdConstants enumeration + Function wdAutoPosition(); + Begin + return 0; + End; + Function wdBackward(); + Begin + return -1073741823; + End; + Function wdCreatorCode(); + Begin + return 1297307460; + End; + Function wdFirst(); + Begin + return 1; + End; + Function wdForward(); + Begin + return 1073741823; + End; + Function wdToggle(); + Begin + return 9999998; + End; + Function wdUndefined(); + Begin + return 9999999; + End; + + // WdSaveOptions enumeration Function wdDoNotSaveChanges(); Begin return 0; @@ -585,9 +976,1340 @@ Implementation Begin return 3; End; - Function TEST123(); + + // WdColorIndex + Function wdAuto(); Begin - println("123"); + return 0; End; + Function wdBlack(); + Begin + return 1; + End; + Function wdBlue(); + Begin + return 2; + End; + Function wdBrightGreen(); + Begin + return 4; + End; + Function wdByAuthor(); + Begin + return -1; + End; + Function wdDarkBlue(); + Begin + return 9; + End; + Function wdDarkRed(); + Begin + return 13; + End; + Function wdDarkYellow(); + Begin + return 14; + End; + Function wdGray25(); + Begin + return 16; + End; + Function wdGray50(); + Begin + return 15; + End; + Function wdGreen(); + Begin + return 11; + End; + Function wdNoHighlight(); + Begin + return 0; + End; + Function wdPink(); + Begin + return 5; + End; + Function wdRed(); + Begin + return 6; + End; + Function wdTeal(); + Begin + return 10; + End; + Function wdTurquoise(); + Begin + return 3; + End; + Function wdViolet(); + Begin + return 12; + End; + Function wdWhite(); + Begin + return 8; + End; + Function wdYellow(); + Begin + return 7; + End; + + // WdColor + Function wdColorAqua(); + Begin + return 13421619; + End; + Function wdColorAutomatic(); + Begin + return -16777216; + End; + Function wdColorBlack(); + Begin + return 0; + End; + Function wdColorBlue(); + Begin + return 16711680; + End; + Function wdColorBlueGray(); + Begin + return 10053222; + End; + Function wdColorBrightGreen(); + Begin + return 65280; + End; + Function wdColorBrown(); + Begin + return 13209; + End; + Function wdColorDarkBlue(); + Begin + return 8388608; + End; + Function wdColorDarkGreen(); + Begin + return 13056; + End; + Function wdColorDarkRed(); + Begin + return 128; + End; + Function wdColorDarkTeal(); + Begin + return 6697728; + End; + Function wdColorDarkYellow(); + Begin + return 32896; + End; + Function wdColorGold(); + Begin + return 52479; + End; + Function wdColorGray05(); + Begin + return 15987699; + End; + Function wdColorGray10(); + Begin + return 15132390; + End; + Function wdColorGray125(); + Begin + return 14737632; + End; + Function wdColorGray15(); + Begin + return 14277081; + End; + Function wdColorGray20(); + Begin + return 13421772; + End; + Function wdColorGray25(); + Begin + return 12632256; + End; + Function wdColorGray30(); + Begin + return 11776947; + End; + Function wdColorGray35(); + Begin + return 10921638; + End; + Function wdColorGray375(); + Begin + return 10526880; + End; + Function wdColorGray40(); + Begin + return 10066329; + End; + Function wdColorGray45(); + Begin + return 9211020; + End; + Function wdColorGray50(); + Begin + return 8421504; + End; + Function wdColorGray55(); + Begin + return 7566195; + End; + Function wdColorGray60(); + Begin + return 6710886; + End; + Function wdColorGray625(); + Begin + return 6316128; + End; + Function wdColorGray65(); + Begin + return 5855577; + End; + Function wdColorGray70(); + Begin + return 5000268; + End; + Function wdColorGray75();; + Begin + return 4210752; + End; + Function wdColorGray80(); + Begin + return 3355443; + End; + Function wdColorGray85(); + Begin + return 2500134; + End; + Function wdColorGray875(); + Begin + return 2105376; + End; + Function wdColorGray90(); + Begin + return 1644825; + End; + Function wdColorGray95(); + Begin + return 789516; + End; + Function wdColorGreen(); + Begin + return 32768; + End; + Function wdColorIndigo(); + Begin + return 10040115; + End; + Function wdColorLavender(); + Begin + return 16751052; + End; + Function wdColorLightBlue(); + Begin + return 16737843; + End; + Function wdColorLightGreen(); + Begin + return 13434828; + End; + Function wdColorLightOrange(); + Begin + return 39423; + End; + Function wdColorLightTurquoise(); + Begin + return 16777164; + End; + Function wdColorLightYellow(); + Begin + return 10092543; + End; + Function wdColorLime(); + Begin + return 52377; + End; + Function wdColorOliveGreen(); + Begin + return 13107; + End; + Function wdColorOrange(); + Begin + return 26367; + End; + Function wdColorPaleBlue(); + Begin + return 16764057; + End; + Function wdColorPink(); + Begin + return 16711935; + End; + Function wdColorPlum(); + Begin + return 6697881; + End; + Function wdColorRed(); + Begin + return 255; + End; + Function wdColorRose(); + Begin + return 13408767; + End; + Function wdColorSeaGreen(); + Begin + return 6723891; + End; + Function wdColorSkyBlue(); + Begin + return 16763904; + End; + Function wdColorTan(); + Begin + return 10079487; + End; + Function wdColorTeal(); + Begin + return 8421376; + End; + Function wdColorTurquoise(); + Begin + return 16776960; + End; + Function wdColorViolet(); + Begin + return 8388736; + End; + Function wdColorWhite(); + Begin + return 16777215; + End; + Function wdColorYellow(); + Begin + return 65535; + End; + + // WdEmphasisMark + Function wdEmphasisMarkNone(); + Begin + return 0; + End; + Function wdEmphasisMarkOverComma(); + Begin + return 2; + End; + Function wdEmphasisMarkOverSolidCircle(); + Begin + return 1; + End; + Function wdEmphasisMarkOverWhiteCircle(); + Begin + return 3; + End; + Function wdEmphasisMarkUnderSolidCircle(); + Begin + return 4; + End; + + // WdLigatures + Function wdLigaturesAll(); + Begin + return 15; + End; + Function wdLigaturesContextual(); + Begin + return 2; + End; + Function wdLigaturesContextualDiscretional(); + Begin + return 10; + End; + Function wdLigaturesContextualHistorical(); + Begin + return 6; + End; + Function wdLigaturesContextualHistoricalDiscretional(); + Begin + return 14; + End; + Function wdLigaturesDiscretional(); + Begin + return 8; + End; + Function wdLigaturesHistorical(); + Begin + return 4; + End; + Function wdLigaturesHistoricalDiscretional(); + Begin + return 12; + End; + Function wdLigaturesNone(); + Begin + return 0; + End; + Function wdLigaturesStandard(); + Begin + return 1; + End; + Function wdLigaturesStandardContextual(); + Begin + return 3; + End; + Function wdLigaturesStandardContextualDiscretional(); + Begin + return 11; + End; + Function wdLigaturesStandardContextualHistorical(); + Begin + return 7; + End; + Function wdLigaturesStandardDiscretional(); + Begin + return 9; + End; + Function wdLigaturesStandardHistorical(); + Begin + return 5; + End; + Function wdLigaturesStandardHistoricalDiscretional(); + Begin + return 13; + End; + + // WdNumberForm + Function wdNumberFormDefault(); + Begin + return 0; + End; + Function wdNumberFormLining(); + Begin + return 1; + End; + Function wdNumberFormOldstyle(); + Begin + return 2; + End; + + // WdNumberSpacing + Function wdNumberSpacingDefault(); + Begin + return 0; + End; + Function wdNumberSpacingProportional(); + Begin + return 1; + End; + Function wdNumberSpacingTabular(); + Begin + return 2; + End; + + // WdStylisticSet + Function wdStylisticSet01(); + Begin + return 1; + End; + Function wdStylisticSet02(); + Begin + return 2; + End; + Function wdStylisticSet03(); + Begin + return 4; + End; + Function wdStylisticSet04(); + Begin + return 8; + End; + Function wdStylisticSet05(); + Begin + return 16; + End; + Function wdStylisticSet06(); + Begin + return 32; + End; + Function wdStylisticSet07(); + Begin + return 64; + End; + Function wdStylisticSet08(); + Begin + return 128; + End; + Function wdStylisticSet09(); + Begin + return 256; + End; + Function wdStylisticSet10(); + Begin + return 512; + End; + Function wdStylisticSet11(); + Begin + return 1024; + End; + Function wdStylisticSet12(); + Begin + return 2048; + End; + Function wdStylisticSet13(); + Begin + return 4096; + End; + Function wdStylisticSet14(); + Begin + return 8192; + End; + Function wdStylisticSet15(); + Begin + return 16384; + End; + Function wdStylisticSet16(); + Begin + return 32768; + End; + Function wdStylisticSet17(); + Begin + return 65536; + End; + Function wdStylisticSet18(); + Begin + return 131072; + End; + Function wdStylisticSet19(); + Begin + return 262144; + End; + Function wdStylisticSet20(); + Begin + return 524288; + End; + Function wdStylisticSetDefault(); + Begin + return 0; + End; + + // WdUnderline + Function wdUnderlineDash(); + Begin + return 7; + End; + Function wdUnderlineDashHeavy(); + Begin + return 23; + End; + Function wdUnderlineDashLong(); + Begin + return 39; + End; + Function wdUnderlineDashLongHeavy(); + Begin + return 55; + End; + Function wdUnderlineDotDash(); + Begin + return 9; + End; + Function wdUnderlineDotDashHeavy(); + Begin + return 25; + End; + Function wdUnderlineDotDotDash(); + Begin + return 10; + End; + Function wdUnderlineDotDotDashHeavy(); + Begin + return 26; + End; + Function wdUnderlineDotted(); + Begin + return 4; + End; + Function wdUnderlineDottedHeavy(); + Begin + return 20; + End; + Function wdUnderlineDouble(); + Begin + return 3; + End; + Function wdUnderlineNone(); + Begin + return 0; + End; + Function wdUnderlineSingle(); + Begin + return 1; + End; + Function wdUnderlineThick(); + Begin + return 6; + End; + Function wdUnderlineWavy(); + Begin + return 11; + End; + Function wdUnderlineWavyDouble(); + Begin + return 43; + End; + Function wdUnderlineWavyHeavy(); + Begin + return 27; + End; + Function wdUnderlineWords(); + Begin + return 2; + End; + + // WdBreakType + Function wdColumnBreak(); + Begin + return 8; + End; + Function wdLineBreak(); + Begin + return 6; + End; + Function wdLineBreakClearLeft(); + Begin + return 9; + End; + Function wdLineBreakClearRight(); + Begin + return 10; + End; + Function wdPageBreak(); + Begin + return 7; + End; + Function wdSectionBreakContinuous(); + Begin + return 3; + End; + Function wdSectionBreakEvenPage(); + Begin + return 4; + End; + Function wdSectionBreakNextPage(); + Begin + return 2; + End; + Function wdSectionBreakOddPage(); + Begin + return 5; + End; + Function wdTextWrappingBreak(); + Begin + return 11; + End; + + // WdPageBorderArt + Function wdArtApples(); + Begin + return 1; + End; + Function wdArtArchedScallops(); + Begin + return 97; + End; + Function wdArtBabyPacifier(); + Begin + return 70; + End; + Function wdArtBabyRattle(); + Begin + return 71; + End; + Function wdArtBalloons3Colors(); + Begin + return 11; + End; + Function wdArtBalloonsHotAir(); + Begin + return 12; + End; + Function wdArtBasicBlackDashes(); + Begin + return 155; + End; + Function wdArtBasicBlackDots(); + Begin + return 156; + End; + Function wdArtBasicBlackSquares(); + Begin + return 154; + End; + Function wdArtBasicThinLines(); + Begin + return 151; + End; + Function wdArtBasicWhiteDashes(); + Begin + return 152; + End; + Function wdArtBasicWhiteDots(); + Begin + return 147; + End; + Function wdArtBasicWhiteSquares(); + Begin + return 153; + End; + Function wdArtBasicWideInline(); + Begin + return 150; + End; + Function wdArtBasicWideMidline(); + Begin + return 148; + End; + Function wdArtBasicWideOutline(); + Begin + return 149; + End; + Function wdArtBats(); + Begin + return 37; + End; + Function wdArtBirds(); + Begin + return 102; + End; + Function wdArtBirdsFlight(); + Begin + return 35; + End; + Function wdArtCabins(); + Begin + return 72; + End; + Function wdArtCakeSlice(); + Begin + return 3; + End; + Function wdArtCandyCorn(); + Begin + return 4; + End; + Function wdArtCelticKnotwork(); + Begin + return 99; + End; + Function wdArtCertificateBanner(); + Begin + return 158; + End; + Function wdArtChainLink(); + Begin + return 128; + End; + Function wdArtChampagneBottle(); + Begin + return 6; + End; + Function wdArtCheckedBarBlack(); + Begin + return 145; + End; + Function wdArtCheckedBarColor(); + Begin + return 61; + End; + Function wdArtCheckered(); + Begin + return 144; + End; + Function wdArtChristmasTree(); + Begin + return 8; + End; + Function wdArtCirclesLines(); + Begin + return 91; + End; + Function wdArtCirclesRectangles(); + Begin + return 140; + End; + Function wdArtClassicalWave(); + Begin + return 56; + End; + Function wdArtClocks(); + Begin + return 27; + End; + Function wdArtCompass(); + Begin + return 54; + End; + Function wdArtConfetti(); + Begin + return 31; + End; + Function wdArtConfettiGrays(); + Begin + return 115; + End; + Function wdArtConfettiOutline(); + Begin + return 116; + End; + Function wdArtConfettiStreamers(); + Begin + return 14; + End; + Function wdArtConfettiWhite(); + Begin + return 117; + End; + Function wdArtCornerTriangles(); + Begin + return 141; + End; + Function wdArtCouponCutoutDashes(); + Begin + return 163; + End; + Function wdArtCouponCutoutDots(); + Begin + return 164; + End; + Function wdArtCrazyMaze(); + Begin + return 100; + End; + Function wdArtCreaturesButterfly(); + Begin + return 32; + End; + Function wdArtCreaturesFish(); + Begin + return 34; + End; + Function wdArtCreaturesInsects(); + Begin + return 142; + End; + Function wdArtCreaturesLadyBug(); + Begin + return 33; + End; + Function wdArtCrossStitch(); + Begin + return 138; + End; + Function wdArtCup(); + Begin + return 67; + End; + Function wdArtDecoArch(); + Begin + return 89; + End; + Function wdArtDecoArchColor(); + Begin + return 50; + End; + Function wdArtDecoBlocks(); + Begin + return 90; + End; + Function wdArtDiamondsGray(); + Begin + return 88; + End; + Function wdArtDoubleD(); + Begin + return 55; + End; + Function wdArtDoubleDiamonds(); + Begin + return 127; + End; + Function wdArtEarth1(); + Begin + return 22; + End; + Function wdArtEarth2(); + Begin + return 21; + End; + Function wdArtEclipsingSquares1(); + Begin + return 101; + End; + Function wdArtEclipsingSquares2(); + Begin + return 86; + End; + Function wdArtEggsBlack(); + Begin + return 66; + End; + Function wdArtFans(); + Begin + return 51; + End; + Function wdArtFilm(); + Begin + return 52; + End; + Function wdArtFirecrackers(); + Begin + return 28; + End; + Function wdArtFlowersBlockPrint(); + Begin + return 49; + End; + Function wdArtFlowersDaisies(); + Begin + return 48; + End; + Function wdArtFlowersModern1(); + Begin + return 45; + End; + Function wdArtFlowersModern2(); + Begin + return 44; + End; + Function wdArtFlowersPansy(); + Begin + return 43; + End; + Function wdArtFlowersRedRose(); + Begin + return 39; + End; + Function wdArtFlowersRoses(); + Begin + return 38; + End; + Function wdArtFlowersTeacup(); + Begin + return 103; + End; + Function wdArtFlowersTiny(); + Begin + return 42; + End; + Function wdArtGems(); + Begin + return 139; + End; + Function wdArtGingerbreadMan(); + Begin + return 69; + End; + Function wdArtGradient(); + Begin + return 122; + End; + Function wdArtHandmade1(); + Begin + return 159; + End; + Function wdArtHandmade2(); + Begin + return 160; + End; + Function wdArtHeartBalloon(); + Begin + return 16; + End; + Function wdArtHeartGray(); + Begin + return 68; + End; + Function wdArtHearts(); + Begin + return 15; + End; + Function wdArtHeebieJeebies(); + Begin + return 120; + End; + Function wdArtHolly(); + Begin + return 41; + End; + Function wdArtHouseFunky(); + Begin + return 73; + End; + Function wdArtHypnotic(); + Begin + return 87; + End; + Function wdArtIceCreamCones(); + Begin + return 5; + End; + Function wdArtLightBulb(); + Begin + return 121; + End; + Function wdArtLightning1(); + Begin + return 53; + End; + Function wdArtLightning2(); + Begin + return 119; + End; + Function wdArtMapleLeaf(); + Begin + return 81; + End; + Function wdArtMapleMuffins(); + Begin + return 2; + End; + Function wdArtMapPins(); + Begin + return 30; + End; + Function wdArtMarquee(); + Begin + return 146; + End; + Function wdArtMarqueeToothed(); + Begin + return 131; + End; + Function wdArtMoons(); + Begin + return 125; + End; + Function wdArtMosaic(); + Begin + return 118; + End; + Function wdArtMusicNotes(); + Begin + return 79; + End; + Function wdArtNorthwest(); + Begin + return 104; + End; + Function wdArtOvals(); + Begin + return 126; + End; + Function wdArtPackages(); + Begin + return 26; + End; + Function wdArtPalmsBlack(); + Begin + return 80; + End; + Function wdArtPalmsColor(); + Begin + return 10; + End; + Function wdArtPaperClips(); + Begin + return 82; + End; + Function wdArtPapyrus(); + Begin + return 92; + End; + Function wdArtPartyFavor(); + Begin + return 13; + End; + Function wdArtPartyGlass(); + Begin + return 7; + End; + Function wdArtPencils(); + Begin + return 25; + End; + Function wdArtPeople(); + Begin + return 84; + End; + Function wdArtPeopleHats(); + Begin + return 23; + End; + Function wdArtPeopleWaving(); + Begin + return 85; + End; + Function wdArtPoinsettias(); + Begin + return 40; + End; + Function wdArtPostageStamp(); + Begin + return 135; + End; + Function wdArtPumpkin1(); + Begin + return 65; + End; + Function wdArtPushPinNote1(); + Begin + return 63; + End; + Function wdArtPushPinNote2(); + Begin + return 64; + End; + Function wdArtPyramids(); + Begin + return 113; + End; + Function wdArtPyramidsAbove(); + Begin + return 114; + End; + Function wdArtQuadrants(); + Begin + return 60; + End; + Function wdArtRings(); + Begin + return 29; + End; + Function wdArtSafari(); + Begin + return 98; + End; + Function wdArtSawtooth(); + Begin + return 133; + End; + Function wdArtSawtoothGray(); + Begin + return 134; + End; + Function wdArtScaredCat(); + Begin + return 36; + End; + Function wdArtSeattle(); + Begin + return 78; + End; + Function wdArtShadowedSquares(); + Begin + return 57; + End; + Function wdArtSharksTeeth(); + Begin + return 132; + End; + Function wdArtShorebirdTracks(); + Begin + return 83; + End; + Function wdArtSkyrocket(); + Begin + return 77; + End; + Function wdArtSnowflakeFancy(); + Begin + return 76; + End; + Function wdArtSnowflakes(); + Begin + return 75; + End; + Function wdArtSombrero(); + Begin + return 24; + End; + Function wdArtSouthwest(); + Begin + return 105; + End; + Function wdArtStars(); + Begin + return 19; + End; + Function wdArtStars3D(); + Begin + return 17; + End; + Function wdArtStarsBlack(); + Begin + return 74; + End; + Function wdArtStarsShadowed(); + Begin + return 18; + End; + Function wdArtStarsTop(); + Begin + return 157; + End; + Function wdArtSun(); + Begin + return 20; + End; + Function wdArtSwirligig(); + Begin + return 62; + End; + Function wdArtTornPaper(); + Begin + return 161; + End; + Function wdArtTornPaperBlack(); + Begin + return 162; + End; + Function wdArtTrees(); + Begin + return 9; + End; + Function wdArtTriangleParty(); + Begin + return 123; + End; + Function wdArtTriangles(); + Begin + return 129; + End; + Function wdArtTribal1(); + Begin + return 130; + End; + Function wdArtTribal2(); + Begin + return 109; + End; + Function wdArtTribal3(); + Begin + return 108; + End; + Function wdArtTribal4(); + Begin + return 107; + End; + Function wdArtTribal5(); + Begin + return 110; + End; + Function wdArtTribal6(); + Begin + return 106; + End; + Function wdArtTwistedLines1(); + Begin + return 58; + End; + Function wdArtTwistedLines2(); + Begin + return 124; + End; + Function wdArtVine(); + Begin + return 47; + End; + Function wdArtWaveline(); + Begin + return 59; + End; + Function wdArtWeavingAngles(); + Begin + return 96; + End; + Function wdArtWeavingBraid(); + Begin + return 94; + End; + Function wdArtWeavingRibbon(); + Begin + return 95; + End; + Function wdArtWeavingStrips(); + Begin + return 136; + End; + Function wdArtWhiteFlowers(); + Begin + return 46; + End; + Function wdArtWoodwork(); + Begin + return 93; + End; + Function wdArtXIllusions(); + Begin + return 111; + End; + Function wdArtZanyTriangles(); + Begin + return 112; + End; + Function wdArtZigZag(); + Begin + return 137; + End; + Function wdArtZigZagStitch(); + Begin + return 143; + End; + + // WdLineWidth + Function wdLineWidth025pt(); + Begin + return 2; + End; + Function wdLineWidth050pt(); + Begin + return 4; + End; + Function wdLineWidth075pt(); + Begin + return 6; + End; + Function wdLineWidth100pt(); + Begin + return 8; + End; + Function wdLineWidth150pt(); + Begin + return 12; + End; + Function wdLineWidth225pt(); + Begin + return 18; + End; + Function wdLineWidth300pt(); + Begin + return 24; + End; + Function wdLineWidth450pt(); + Begin + return 36; + End; + Function wdLineWidth600pt(); + Begin + return 48; + End; + End. diff --git a/docx/TSDocxParagraph.tsf b/docx/TSDocxParagraph.tsf new file mode 100644 index 0000000..e1f1c15 --- /dev/null +++ b/docx/TSDocxParagraph.tsf @@ -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; diff --git a/docx/TSDocxParagraphs.tsf b/docx/TSDocxParagraphs.tsf new file mode 100644 index 0000000..3fd9ad9 --- /dev/null +++ b/docx/TSDocxParagraphs.tsf @@ -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; diff --git a/docx/TSDocxRange.tsf b/docx/TSDocxRange.tsf new file mode 100644 index 0000000..79b889a --- /dev/null +++ b/docx/TSDocxRange.tsf @@ -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; diff --git a/docx/TSDocxRow.tsf b/docx/TSDocxRow.tsf index f0318ba..0f2e3e4 100644 --- a/docx/TSDocxRow.tsf +++ b/docx/TSDocxRow.tsf @@ -1,4 +1,5 @@ Type TSDocxRow = Class(TSVbaBase) +Uses TSDocxEnumerations; public Function Init(table, row); diff --git a/docx/TSDocxRows.tsf b/docx/TSDocxRows.tsf index cb4e2eb..678fd33 100644 --- a/docx/TSDocxRows.tsf +++ b/docx/TSDocxRows.tsf @@ -153,3 +153,8 @@ Begin class(TSXml).RemoveNode(table_.Root(), "w:tblPr/w:tblOverlap"); end End; + +Function TSDocxRows.ReadCount(); +Begin + return table_.Rows(); +End; diff --git a/docx/TSDocxShading.tsf b/docx/TSDocxShading.tsf index 4b3ee43..93545fd 100644 --- a/docx/TSDocxShading.tsf +++ b/docx/TSDocxShading.tsf @@ -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; diff --git a/docx/TSDocxTable.tsf b/docx/TSDocxTable.tsf index 2aeebe4..92a95ac 100644 --- a/docx/TSDocxTable.tsf +++ b/docx/TSDocxTable.tsf @@ -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; diff --git a/docx/border/TSDocxBorder.tsf b/docx/border/TSDocxBorder.tsf new file mode 100644 index 0000000..d39a0a3 --- /dev/null +++ b/docx/border/TSDocxBorder.tsf @@ -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; diff --git a/docx/border/TSDocxBorderRange.tsf b/docx/border/TSDocxBorderRange.tsf new file mode 100644 index 0000000..032509c --- /dev/null +++ b/docx/border/TSDocxBorderRange.tsf @@ -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; diff --git a/docx/border/TSDocxBorderTable.tsf b/docx/border/TSDocxBorderTable.tsf new file mode 100644 index 0000000..c303d11 --- /dev/null +++ b/docx/border/TSDocxBorderTable.tsf @@ -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; + diff --git a/docx/TSDocxBorders.tsf b/docx/border/TSDocxBorders.tsf similarity index 94% rename from docx/TSDocxBorders.tsf rename to docx/border/TSDocxBorders.tsf index c8b4e08..e1f03f2 100644 --- a/docx/TSDocxBorders.tsf +++ b/docx/border/TSDocxBorders.tsf @@ -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; diff --git a/docx/border/TSDocxBordersCell.tsf b/docx/border/TSDocxBordersCell.tsf new file mode 100644 index 0000000..816d6e6 --- /dev/null +++ b/docx/border/TSDocxBordersCell.tsf @@ -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; + diff --git a/docx/border/TSDocxBordersParagraph.tsf b/docx/border/TSDocxBordersParagraph.tsf new file mode 100644 index 0000000..5d7f906 --- /dev/null +++ b/docx/border/TSDocxBordersParagraph.tsf @@ -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; + diff --git a/docx/border/TSDocxBordersRange.tsf b/docx/border/TSDocxBordersRange.tsf new file mode 100644 index 0000000..3cd06ed --- /dev/null +++ b/docx/border/TSDocxBordersRange.tsf @@ -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; diff --git a/docx/TSDocxBordersTable.tsf b/docx/border/TSDocxBordersTable.tsf similarity index 80% rename from docx/TSDocxBordersTable.tsf rename to docx/border/TSDocxBordersTable.tsf index b33f831..c188f84 100644 --- a/docx/TSDocxBordersTable.tsf +++ b/docx/border/TSDocxBordersTable.tsf @@ -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); diff --git a/docx/font/TSDocxFont.tsf b/docx/font/TSDocxFont.tsf new file mode 100644 index 0000000..e1c3755 --- /dev/null +++ b/docx/font/TSDocxFont.tsf @@ -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; diff --git a/docx/font/TSDocxFontRange.tsf b/docx/font/TSDocxFontRange.tsf new file mode 100644 index 0000000..b604ca7 --- /dev/null +++ b/docx/font/TSDocxFontRange.tsf @@ -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; diff --git a/docx/utils/TSWdColor.tsf b/docx/utils/TSWdColor.tsf new file mode 100644 index 0000000..99d52f1 --- /dev/null +++ b/docx/utils/TSWdColor.tsf @@ -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; + diff --git a/docx/utils/TSWdColorIndex.tsf b/docx/utils/TSWdColorIndex.tsf new file mode 100644 index 0000000..cdb009e --- /dev/null +++ b/docx/utils/TSWdColorIndex.tsf @@ -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; + diff --git a/docx/utils/TSWdCommon.tsf b/docx/utils/TSWdCommon.tsf new file mode 100644 index 0000000..b4aeb40 --- /dev/null +++ b/docx/utils/TSWdCommon.tsf @@ -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; diff --git a/test/docx_test.tsl b/test/docx_test.tsl index 043f0fc..607c86e 100644 --- a/test/docx_test.tsl +++ b/test/docx_test.tsl @@ -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; diff --git a/utils/collection_delete.tsf b/utils/collection_delete.tsf deleted file mode 100644 index 4d1e56c..0000000 --- a/utils/collection_delete.tsf +++ /dev/null @@ -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;