This commit is contained in:
csh 2024-03-04 14:11:34 +08:00
parent f499526f04
commit b4ef4a531c
4 changed files with 267 additions and 249 deletions

View File

@ -1,4 +1,4 @@
// Version 1.6.3
// Version 1.6.4
Function TOfficeObj(n);
Begin
case lowercase(n) of
@ -10763,15 +10763,15 @@ Type TDocComments = Class
End;
//w:pPr
// 'w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore',
// 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers',
// 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku',
// 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE',
// 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid',
// 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents',
// 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment',
// 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle',
// 'w:rPr', 'w:sectPr', 'w:pPrChange'
// 'w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore',
// 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers',
// 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku',
// 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE',
// 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid',
// 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents',
// 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment',
// 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle',
// 'w:rPr', 'w:sectPr', 'w:pPrChange'
//w:p
Type TWHyperLink = Class(TWHyperLinkImpl)
@ -10852,8 +10852,8 @@ Type TParagraph = Class(DocObject, TParagraphImpl)
///制表位TTabStops对象
///返回TTabStops对象
//<w:tabs>
// <w:tab w:val="left" w:pos="2160" />
// <w:tab w:val="left" w:pos="5040" />
// <w:tab w:val="left" w:pos="2160" />
// <w:tab w:val="left" w:pos="5040" />
//</w:tabs>
Function TabStops();
Begin
@ -10952,25 +10952,25 @@ Type TParagraph = Class(DocObject, TParagraphImpl)
return new TRun(node);
End;
///在段落对象开头添加TRun对象
///返回TRun对象
Function PrependRun();overload;
Begin
///在段落对象开头添加TRun对象
///返回TRun对象
Function PrependRun();overload;
Begin
node := node_.FirstChildElement('w:r');
node := node_.InsertBeforeChild(node, 'element', 'w:r');
node.InsertFirstChild('element', 'w:rPr');
return new TRun(node);
End;
End;
///在段落某个TRun对象之前添加TRun对象
///在段落某个TRun对象之前添加TRun对象
///runTRun对象
///返回TRun对象
Function PrependRun(run);overload;
Begin
///返回TRun对象
Function PrependRun(run);overload;
Begin
node := node_.InsertBeforeChild(run.Root(), 'element', 'w:r');
node.InsertFirstChild('element', 'w:rPr');
return new TRun(node);
End;
End;
///段落中全部的修改标记(修订删除、修订插入)
///返回TRevision对象列表array(TRevision...);
@ -11058,7 +11058,7 @@ Type TParagraph = Class(DocObject, TParagraphImpl)
///判断是否为空段落
///返回: bool
Function Empty();
Begin
Begin
if ifObj(node_) then
begin
if ifObj(node_.FirstChildElement("w:r")) then return false;
@ -11073,7 +11073,7 @@ Type TParagraph = Class(DocObject, TParagraphImpl)
return true;
end
return false;
End;
End;
///获取当前段落的上一个段落
///返回TParagraph对象
@ -11432,8 +11432,8 @@ Type TPicture = Class(DocObject, TPictureImpl)
maxY := 23.0;//垂直方向23cm
imageW := image.Width() / 28.346 * ETU;
imageH := image.Height() / 28.346 * ETU;
if Width <= 0 and Height <= 0 then Begin //图像缺省大小
widthVal := imageW;
if Width <= 0 and Height <= 0 then Begin //图像缺省大小
widthVal := imageW;
heightVal := imageH;
End
else Begin //用户设置了图片尺寸
@ -11471,7 +11471,7 @@ Type TPicture = Class(DocObject, TPictureImpl)
widthVal *= ratio;
End;
//println('w={}-{},maxx={}, h={}-{},maxh={},ratio={}',integer(imageW),integer(widthVal),15 * ETU, integer(imageH),integer(heightVal),23 * ETU,ratio);
return array(integer(widthVal), integer(heightVal));
return array(integer(widthVal), integer(heightVal));
End;
Image;//图片内容Binary
@ -11821,10 +11821,10 @@ private
Function getLegendPosition(t);
Begin
m := array("bottom": "b",
"left": "l",
"right": "r",
"top": "t",
m := array("bottom": "b",
"left": "l",
"right": "r",
"top": "t",
"top_right": "tr");
return m[t];
End;
@ -11982,120 +11982,120 @@ private
Function chartValAxCrossBetween(t);
Begin
m := array(
'area': 'midCat',
'areastacked': 'midCat',
'areapercentstacked': 'midCat',
'area3d': 'midCat',
'area3dstacked': 'midCat',
'area3dpercentstacked': 'midCat',
'bar': 'between',
'barstacked': 'between',
'barpercentstacked': 'between',
'bar3dclustered': 'between',
'bar3dstacked': 'between',
'bar3dpercentstacked': 'between',
'bar3dconeclustered': 'between',
'bar3dconestacked': 'between',
'bar3dconepercentstacked': 'between',
'bar3dpyramidclustered': 'between',
'bar3dpyramidstacked': 'between',
'area': 'midCat',
'areastacked': 'midCat',
'areapercentstacked': 'midCat',
'area3d': 'midCat',
'area3dstacked': 'midCat',
'area3dpercentstacked': 'midCat',
'bar': 'between',
'barstacked': 'between',
'barpercentstacked': 'between',
'bar3dclustered': 'between',
'bar3dstacked': 'between',
'bar3dpercentstacked': 'between',
'bar3dconeclustered': 'between',
'bar3dconestacked': 'between',
'bar3dconepercentstacked': 'between',
'bar3dpyramidclustered': 'between',
'bar3dpyramidstacked': 'between',
'bar3dpyramidpercentstacked': 'between',
'bar3dcylinderclustered': 'between',
'bar3dcylinderstacked': 'between',
'bar3dcylinderclustered': 'between',
'bar3dcylinderstacked': 'between',
'bar3dcylinderpercentstacked': 'between',
'col': 'between',
'colstacked': 'between',
'colpercentstacked': 'between',
'col3d': 'between',
'col3dclustered': 'between',
'col3dstacked': 'between',
'col3dpercentstacked': 'between',
'col3dcone': 'between',
'col3dconeclustered': 'between',
'col3dconestacked': 'between',
'col3dconepercentstacked': 'between',
'col3dpyramid': 'between',
'col3dpyramidclustered': 'between',
'col3dpyramidstacked': 'between',
'col': 'between',
'colstacked': 'between',
'colpercentstacked': 'between',
'col3d': 'between',
'col3dclustered': 'between',
'col3dstacked': 'between',
'col3dpercentstacked': 'between',
'col3dcone': 'between',
'col3dconeclustered': 'between',
'col3dconestacked': 'between',
'col3dconepercentstacked': 'between',
'col3dpyramid': 'between',
'col3dpyramidclustered': 'between',
'col3dpyramidstacked': 'between',
'col3dpyramidpercentstacked': 'between',
'col3dcylinder': 'between',
'col3dcylinderclustered': 'between',
'col3dcylinderstacked': 'between',
'col3dcylinder': 'between',
'col3dcylinderclustered': 'between',
'col3dcylinderstacked': 'between',
'col3dcylinderpercentstacked': 'between',
'doughnut': 'between',
'line': 'between',
'pie': 'between',
'pie3d': 'between',
'pieofpiechart': 'between',
'barofpiechart': 'between',
'radar': 'between',
'scatter': 'between',
'surface3d': 'midCat',
'wireframesurface3d': 'midCat',
'contour': 'midCat',
'wireframecontour': 'midCat',
'bubble': 'midCat',
'bubble3d': 'midCat');
'doughnut': 'between',
'line': 'between',
'pie': 'between',
'pie3d': 'between',
'pieofpiechart': 'between',
'barofpiechart': 'between',
'radar': 'between',
'scatter': 'between',
'surface3d': 'midCat',
'wireframesurface3d': 'midCat',
'contour': 'midCat',
'wireframecontour': 'midCat',
'bubble': 'midCat',
'bubble3d': 'midCat');
return m[t];
End;
Function chartValAxNumFmtFormatCode(t);
Begin
m := array(
'area': 'General',
'areastacked': 'General',
'areapercentstacked': '0%',
'area3d': 'General',
'area3dstacked': 'General',
'area3dpercentstacked': '0%',
'bar': 'General',
'barstacked': 'General',
'barpercentstacked': '0%',
'bar3dclustered': 'General',
'bar3dstacked': 'General',
'bar3dpercentstacked': '0%',
'bar3dconeclustered': 'General',
'bar3dconestacked': 'General',
'bar3dconepercentstacked': '0%',
'bar3dpyramidclustered': 'General',
'bar3dpyramidstacked': 'General',
'area': 'General',
'areastacked': 'General',
'areapercentstacked': '0%',
'area3d': 'General',
'area3dstacked': 'General',
'area3dpercentstacked': '0%',
'bar': 'General',
'barstacked': 'General',
'barpercentstacked': '0%',
'bar3dclustered': 'General',
'bar3dstacked': 'General',
'bar3dpercentstacked': '0%',
'bar3dconeclustered': 'General',
'bar3dconestacked': 'General',
'bar3dconepercentstacked': '0%',
'bar3dpyramidclustered': 'General',
'bar3dpyramidstacked': 'General',
'bar3dpyramidpercentstacked': '0%',
'bar3dcylinderclustered': 'General',
'bar3dcylinderstacked': 'General',
'bar3dcylinderclustered': 'General',
'bar3dcylinderstacked': 'General',
'bar3dcylinderpercentstacked': '0%',
'col': 'General',
'colstacked': 'General',
'colpercentstacked': '0%',
'col3d': 'General',
'col3dclustered': 'General',
'col3dstacked': 'General',
'col3dpercentstacked': '0%',
'col3dcone': 'General',
'col3dconeclustered': 'General',
'col3dconestacked': 'General',
'col3dconepercentstacked': '0%',
'col3dpyramid': 'General',
'col3dpyramidclustered': 'General',
'col3dpyramidstacked': 'General',
'col': 'General',
'colstacked': 'General',
'colpercentstacked': '0%',
'col3d': 'General',
'col3dclustered': 'General',
'col3dstacked': 'General',
'col3dpercentstacked': '0%',
'col3dcone': 'General',
'col3dconeclustered': 'General',
'col3dconestacked': 'General',
'col3dconepercentstacked': '0%',
'col3dpyramid': 'General',
'col3dpyramidclustered': 'General',
'col3dpyramidstacked': 'General',
'col3dpyramidpercentstacked': '0%',
'col3dcylinder': 'General',
'col3dcylinderclustered': 'General',
'col3dcylinderstacked': 'General',
'col3dcylinder': 'General',
'col3dcylinderclustered': 'General',
'col3dcylinderstacked': 'General',
'col3dcylinderpercentstacked': '0%',
'doughnut': 'General',
'line': 'General',
'pie': 'General',
'pie3d': 'General',
'pieofpiechart': 'General',
'barofpiechart': 'General',
'radar': 'General',
'scatter': 'General',
'surface3d': 'General',
'wireframesurface3d': 'General',
'contour': 'General',
'wireframecontour': 'General',
'bubble': 'General',
'bubble3d': 'General');
'doughnut': 'General',
'line': 'General',
'pie': 'General',
'pie3d': 'General',
'pieofpiechart': 'General',
'barofpiechart': 'General',
'radar': 'General',
'scatter': 'General',
'surface3d': 'General',
'wireframesurface3d': 'General',
'contour': 'General',
'wireframecontour': 'General',
'bubble': 'General',
'bubble3d': 'General');
return m[t];
End;
@ -12354,26 +12354,26 @@ private
Function getSharp(t);
Begin
m := array(
'bar3dconeclustered': 'cone',
'bar3dconestacked': 'cone',
'bar3dconepercentstacked': 'cone',
'bar3dpyramidclustered': 'pyramid',
'bar3dpyramidstacked': 'pyramid',
'bar3dconeclustered': 'cone',
'bar3dconestacked': 'cone',
'bar3dconepercentstacked': 'cone',
'bar3dpyramidclustered': 'pyramid',
'bar3dpyramidstacked': 'pyramid',
'bar3dpyramidpercentstacked': 'pyramid',
'bar3dcylinderclustered': 'cylinder',
'bar3dcylinderstacked': 'cylinder',
'bar3dcylinderclustered': 'cylinder',
'bar3dcylinderstacked': 'cylinder',
'bar3dcylinderpercentstacked': 'cylinder',
'col3dcone': 'cone',
'col3dconeclustered': 'cone',
'col3dconestacked': 'cone',
'col3dconepercentstacked': 'cone',
'col3dpyramid': 'pyramid',
'col3dpyramidclustered': 'pyramid',
'col3dpyramidstacked': 'pyramid',
'col3dcone': 'cone',
'col3dconeclustered': 'cone',
'col3dconestacked': 'cone',
'col3dconepercentstacked': 'cone',
'col3dpyramid': 'pyramid',
'col3dpyramidclustered': 'pyramid',
'col3dpyramidstacked': 'pyramid',
'col3dpyramidpercentstacked': 'pyramid',
'col3dcylinder': 'cylinder',
'col3dcylinderclustered': 'cylinder',
'col3dcylinderstacked': 'cylinder',
'col3dcylinder': 'cylinder',
'col3dcylinderclustered': 'cylinder',
'col3dcylinderstacked': 'cylinder',
'col3dcylinderpercentstacked': 'cylinder');
return m[t];
End;
@ -12429,9 +12429,9 @@ private
Function getVaryColors(t);
Begin
m := array(
'barstacked': 100,
'barstacked': 100,
'barpercentstacked': 100,
'colstacked': 100,
'colstacked': 100,
'colpercentstacked': 100
);
return m[t];
@ -12440,88 +12440,88 @@ private
Function getGrouping(t);
Begin
m := array(
'area': 'standard',
'areastacked': 'stacked',
'areapercentstacked': 'percentStacked',
'area3d': 'standard',
'area3dstacked': 'stacked',
'area3dpercentstacked': 'percentStacked',
'bar': 'clustered',
'barstacked': 'stacked',
'barpercentstacked': 'percentStacked',
'bar3dclustered': 'clustered',
'bar3dstacked': 'stacked',
'bar3dpercentstacked': 'percentStacked',
'bar3dconeclustered': 'clustered',
'bar3dconestacked': 'stacked',
'bar3dconepercentstacked': 'percentStacked',
'bar3dpyramidclustered': 'clustered',
'bar3dpyramidstacked': 'stacked',
'area': 'standard',
'areastacked': 'stacked',
'areapercentstacked': 'percentStacked',
'area3d': 'standard',
'area3dstacked': 'stacked',
'area3dpercentstacked': 'percentStacked',
'bar': 'clustered',
'barstacked': 'stacked',
'barpercentstacked': 'percentStacked',
'bar3dclustered': 'clustered',
'bar3dstacked': 'stacked',
'bar3dpercentstacked': 'percentStacked',
'bar3dconeclustered': 'clustered',
'bar3dconestacked': 'stacked',
'bar3dconepercentstacked': 'percentStacked',
'bar3dpyramidclustered': 'clustered',
'bar3dpyramidstacked': 'stacked',
'bar3dpyramidpercentstacked': 'percentStacked',
'bar3dcylinderclustered': 'clustered',
'bar3dcylinderstacked': 'stacked',
'bar3dcylinderclustered': 'clustered',
'bar3dcylinderstacked': 'stacked',
'bar3dcylinderpercentstacked': 'percentStacked',
'col': 'clustered',
'colstacked': 'stacked',
'colpercentstacked': 'percentStacked',
'col3d': 'standard',
'col3dclustered': 'clustered',
'col3dstacked': 'stacked',
'col3dpercentstacked': 'percentStacked',
'col3dcone': 'standard',
'col3dconeclustered': 'clustered',
'col3dconestacked': 'stacked',
'col3dconepercentstacked': 'percentStacked',
'col3dpyramid': 'standard',
'col3dpyramidclustered': 'clustered',
'col3dpyramidstacked': 'stacked',
'col': 'clustered',
'colstacked': 'stacked',
'colpercentstacked': 'percentStacked',
'col3d': 'standard',
'col3dclustered': 'clustered',
'col3dstacked': 'stacked',
'col3dpercentstacked': 'percentStacked',
'col3dcone': 'standard',
'col3dconeclustered': 'clustered',
'col3dconestacked': 'stacked',
'col3dconepercentstacked': 'percentStacked',
'col3dpyramid': 'standard',
'col3dpyramidclustered': 'clustered',
'col3dpyramidstacked': 'stacked',
'col3dpyramidpercentstacked': 'percentStacked',
'col3dcylinder': 'standard',
'col3dcylinderclustered': 'clustered',
'col3dcylinderstacked': 'stacked',
'col3dcylinder': 'standard',
'col3dcylinderclustered': 'clustered',
'col3dcylinderstacked': 'stacked',
'col3dcylinderpercentstacked': 'percentStacked',
'line': 'standard');
'line': 'standard');
return m[t];
End;
Function getBarDir(t);
Begin
m := array(
'bar': 'bar',
'barstacked': 'bar',
'barpercentstacked': 'bar',
'bar3dclustered': 'bar',
'bar3dstacked': 'bar',
'bar3dpercentstacked': 'bar',
'bar3dconeclustered': 'bar',
'bar3dconestacked': 'bar',
'bar3dconepercentstacked': 'bar',
'bar3dpyramidclustered': 'bar',
'bar3dpyramidstacked': 'bar',
'bar': 'bar',
'barstacked': 'bar',
'barpercentstacked': 'bar',
'bar3dclustered': 'bar',
'bar3dstacked': 'bar',
'bar3dpercentstacked': 'bar',
'bar3dconeclustered': 'bar',
'bar3dconestacked': 'bar',
'bar3dconepercentstacked': 'bar',
'bar3dpyramidclustered': 'bar',
'bar3dpyramidstacked': 'bar',
'bar3dpyramidpercentstacked': 'bar',
'bar3dcylinderclustered': 'bar',
'bar3dcylinderstacked': 'bar',
'bar3dcylinderclustered': 'bar',
'bar3dcylinderstacked': 'bar',
'bar3dcylinderpercentstacked': 'bar',
'col': 'col',
'colstacked': 'col',
'colpercentstacked': 'col',
'col3d': 'col',
'col3dclustered': 'col',
'col3dstacked': 'col',
'col3dpercentstacked': 'col',
'col3dcone': 'col',
'col3dconestacked': 'col',
'col3dconeclustered': 'col',
'col3dconepercentstacked': 'col',
'col3dpyramid': 'col',
'col3dpyramidclustered': 'col',
'col3dpyramidstacked': 'col',
'col': 'col',
'colstacked': 'col',
'colpercentstacked': 'col',
'col3d': 'col',
'col3dclustered': 'col',
'col3dstacked': 'col',
'col3dpercentstacked': 'col',
'col3dcone': 'col',
'col3dconestacked': 'col',
'col3dconeclustered': 'col',
'col3dconepercentstacked': 'col',
'col3dpyramid': 'col',
'col3dpyramidclustered': 'col',
'col3dpyramidstacked': 'col',
'col3dpyramidpercentstacked': 'col',
'col3dcylinder': 'col',
'col3dcylinderclustered': 'col',
'col3dcylinderstacked': 'col',
'col3dcylinder': 'col',
'col3dcylinderclustered': 'col',
'col3dcylinderstacked': 'col',
'col3dcylinderpercentstacked': 'col',
'line': 'standard');
'line': 'standard');
return m[t];
End;
@ -12697,7 +12697,7 @@ Type TSectPr = Class
LineRatio := 1.0;
if ifObj(pPr) then Begin
if pPr.LineSpacingRule = 'exact' and pPr.LineSpacing then //固定行距
if pPr.LineSpacingRule = 'exact' and pPr.LineSpacing then //固定行距
defaultLineHeight := pPr.LineSpacing;
else if pPr.LineSpacing then Begin
LineRatio := pPr.LineSpacing / 240;
@ -12936,13 +12936,13 @@ Type TDocumentBody = Class(DocObject)
return r;
End;
///word最后一个段落
///word最后一个段落
///返回TParagraph对象
Function LastParagraph();
Begin
Function LastParagraph();
Begin
node := node_.LastChildElement('w:p');
return ifObj(node) ? new TParagraph(node) : nil;
End;
End;
///添加新段落
///paragraph: TParagraph对象
@ -13116,9 +13116,9 @@ Type TDocumentBody = Class(DocObject)
trNode := tbl.node_.InsertEndChild('element', 'w:tr');
trNode.InsertEndChild('element', 'w:trPr');
multiLine := false;
if ifstring(tbl.Data_[i, j]) and Pos('\n', tbl.Data_[i, j]) then
multiLine := true;
for j:=0 to tbl.colCount_-1 do Begin
if ifstring(tbl.Data_[i, j]) and Pos('\n', tbl.Data_[i, j]) then
multiLine := true;
//对象太多的话,对象效率奇慢,优化掉(性能可能相差50倍)
if 0 then Begin
tc := new TCell();
@ -14196,9 +14196,9 @@ Type TDocSection = Class(DocObject, TDocSectionImpl)
///返回指定页眉
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function Header(type);
Begin
return _getHeaderFooter('w:headerReference', type);
@ -14206,9 +14206,9 @@ Type TDocSection = Class(DocObject, TDocSectionImpl)
///返回指定页脚
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function Footer(type);
Begin
return _getHeaderFooter('w:footerReference', type);
@ -14216,9 +14216,9 @@ Type TDocSection = Class(DocObject, TDocSectionImpl)
///添加页眉
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function AddHeader(type);
Begin
return _AddHeaderFooter('header', (ifNil(type) or type = '') ? 'default' : type);
@ -14226,9 +14226,9 @@ Type TDocSection = Class(DocObject, TDocSectionImpl)
///添加页脚
///type页眉类型default、even、first
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
///default, Header for odd pages or all if no even header.
///first, Header for first page of section.
///even, Header for even pages of recto/verso section.
Function AddFooter(type);
Begin
return _AddHeaderFooter('footer', (ifNil(type) or type = '') ? 'default' : type);
@ -14359,6 +14359,11 @@ Type TTextBox = Class(TDocumentBody, TTextBoxImpl)
End;
End;
Function Clear();
Begin
if ifObj(node_) then node_.DeleteChildren();
End;
pNode_;//<w:p>
NodeEx_;//w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx/wps:txbxContent
End;
@ -14772,14 +14777,14 @@ Type TTable = Class(DocObject, TTableImpl)
End;
/// 设置行高
Function RowHeight(row, height);
Begin
Function RowHeight(row, height);
Begin
if row <= 0 or row > Rows() then return;
node := _getRowNode(row - 1);
node := class(TSXml).GetNode(node, 'w:trPr/w:trHeight', 'end');
node.SetAttribute('w:hRule', 'exact');
node.SetAttribute('w:val', height);
End;
End;
Function Height(row);
Begin
@ -15248,11 +15253,11 @@ End;
//w:style
// 'w:name', 'w:aliases', 'w:basedOn', 'w:next', 'w:link',
// 'w:autoRedefine', 'w:hidden', 'w:uiPriority', 'w:semiHidden',
// 'w:unhideWhenUsed', 'w:qFormat', 'w:locked', 'w:personal',
// 'w:personalCompose', 'w:personalReply', 'w:rsid', 'w:pPr', 'w:rPr',
// 'w:tblPr', 'w:trPr', 'w:tcPr', 'w:tblStylePr'
// 'w:name', 'w:aliases', 'w:basedOn', 'w:next', 'w:link',
// 'w:autoRedefine', 'w:hidden', 'w:uiPriority', 'w:semiHidden',
// 'w:unhideWhenUsed', 'w:qFormat', 'w:locked', 'w:personal',
// 'w:personalCompose', 'w:personalReply', 'w:rsid', 'w:pPr', 'w:rPr',
// 'w:tblPr', 'w:trPr', 'w:tcPr', 'w:tblStylePr'
Type TDocxStyle = Class(TDocxStyleImpl)
Function Create(); overload;
Begin

View File

@ -1,4 +1,4 @@
// Version 1.6.3
// Version 1.6.4
Type TSDocxFile = Class
///Version: V1.0 2022-09-20
///适用于 Microsoft Word docx格式文件

View File

@ -1,4 +1,4 @@
// Version 1.6.3
// Version 1.6.4
Type TSXlsxFile = Class
///Version: V1.0 2022-08-08
///适用于 Microsoft Excel? 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM / XLTX 等多种文档格式。

View File

@ -1,5 +1,18 @@
# 更新日志
## 2023-3-4
### V1.6.4
#### word
1. 修复`InsertTable`内容`\n`无换行问题
2. `TextBox`支持`Clear`清空内容
#### word
1. 修复目录生成陷入死循环问题
## 2023-2-23
### V1.6.3