This commit is contained in:
csh 2023-01-31 17:27:13 +08:00
parent 3146c3c9c5
commit 2037e8c2fe
11 changed files with 404 additions and 67 deletions

View File

@ -525,6 +525,7 @@ style.Protection.Lock := 1;
('attrName': 'Vertical', 'type': 'string', 'desc': '垂直对齐', 'value': array('nil(默认): 靠下', '"center": 居中', '"top": 靠上', '"justify": 两端对齐', 'distributed: 分散对齐')), ('attrName': 'Vertical', 'type': 'string', 'desc': '垂直对齐', 'value': array('nil(默认): 靠下', '"center": 居中', '"top": 靠上', '"justify": 两端对齐', 'distributed: 分散对齐')),
('attrName': 'WrapText', 'type': 'boolean', 'desc': '是否自动换行默认FALSE', 'value': array()), ('attrName': 'WrapText', 'type': 'boolean', 'desc': '是否自动换行默认FALSE', 'value': array()),
('attrName': 'ReadingOrder', 'type': 'int', 'desc': '文字方向', 'value': array('nil(默认): 根据内容', '1: 总是从左到右', '2: 总是从右到左')), ('attrName': 'ReadingOrder', 'type': 'int', 'desc': '文字方向', 'value': array('nil(默认): 根据内容', '1: 总是从左到右', '2: 总是从右到左')),
('attrName': 'TextRotation', 'type': 'int', 'desc': '文本方向', 'value': array('[-90:90]')),
), ),
'Demo': '', 'Demo': '',
), ),
@ -742,8 +743,19 @@ style.Protection.Lock := 1;
'AttrInfo': ( 'AttrInfo': (
('attrName': 'ShowGridLines', 'type': 'bool', 'desc': '网格线', 'value': array()), ('attrName': 'ShowGridLines', 'type': 'bool', 'desc': '网格线', 'value': array()),
('attrName': 'ShowRowColHeaders', 'type': 'bool', 'desc': '标题', 'value': array()), ('attrName': 'ShowRowColHeaders', 'type': 'bool', 'desc': '标题', 'value': array()),
('attrName': 'View', 'type': 'string', 'desc': '工作簿视图', 'value': array('"pageBreakPreview": 分页预览')), ('attrName': 'View', 'type': 'bool', 'desc': '工作簿视图', 'value': array('"pageBreakPreview": 分页预览')),
('attrName': 'ZoomScale', 'type': 'bool', 'desc': '缩放比例(%)', 'value': array()), ('attrName': 'ZoomScale', 'type': 'string', 'desc': '缩放比例(%)', 'value': array()),
),
'Demo': '',
),
('ObjName': 'TPane',
'Desc': ('TPane有以下属性: '),
'AttrInfo': (
('attrName': 'XSplit', 'type': 'int', 'desc': '按列分割', 'value': array()),
('attrName': 'YSplit', 'type': 'int', 'desc': '按行分割', 'value': array()),
('attrName': 'ActivePane', 'type': 'string', 'desc': '激活窗格', 'value': array('"bottomRight": 都设置{XSplit}和{YSplit}时为该值', '"topRight": 仅设置{XSplit}时', '"bottomLeft": 仅设置{YSplit}时')),
('attrName': 'State', 'type': 'string', 'desc': '冻结窗口', 'value': array('"frozen"')),
('attrName': 'TopLeftCell', 'type': 'string', 'desc': '顶部单元格,根据{ActivePane}的值设定', 'value': array('"frozen"')),
), ),
'Demo': '', 'Demo': '',
), ),

View File

@ -242,6 +242,7 @@ style.Alignment.Horizontal := "center";
style.Alignment.Vertical := "justify"; style.Alignment.Vertical := "justify";
style.Alignment.WrapText := True; style.Alignment.WrapText := True;
style.Alignment.ReadingOrder := 2; style.Alignment.ReadingOrder := 2;
style.Alignment.TextRotation := 45;
style.Border.Left.LineStyle := "thin"; style.Border.Left.LineStyle := "thin";
style.Border.Left.Color := "A020F0"; style.Border.Left.Color := "A020F0";
style.Border.Right.LineStyle := "thin"; style.Border.Right.LineStyle := "thin";
@ -357,6 +358,16 @@ println("[success] SetSheetViewOptions");
view := excel.GetSheetViewOptions(sheetName, 0); view := excel.GetSheetViewOptions(sheetName, 0);
println("[success] GetSheetViewOptions ShowGridLines = {}, ShowRowColHeaders = {}, View = {}, ZoomScale = {}", view.ShowGridLines, view.ShowRowColHeaders, view.ZoomScale, view.View); println("[success] GetSheetViewOptions ShowGridLines = {}, ShowRowColHeaders = {}, View = {}, ZoomScale = {}", view.ShowGridLines, view.ShowRowColHeaders, view.ZoomScale, view.View);
// SetPane
Pane := TOfficeObj('TPane');
Pane.XSplit := 6;
Pane.YSplit := 14;
Pane.ActivePane := 'bottomRight';
Pane.TopLeftCell := excel.CoordinatesToCellName(Pane.XSplit + 1, Pane.YSplit + 1)[1];
Pane.State := 'frozen';
excel.SetPane(sheetName, 0, Pane);
println("[success] SetPane");
// SetPageLayout // SetPageLayout
pageLayout := TOfficeObj('TPageLayout'); pageLayout := TOfficeObj('TPageLayout');
pageLayout.FitToWidth := 10; pageLayout.FitToWidth := 10;

View File

@ -203,8 +203,9 @@ Begin
///TTable对象 ///TTable对象
_AddTitle(docx, 'TTable对象属性', 2); //第二级标题 _AddTitle(docx, 'TTable对象属性', 2); //第二级标题
tbl := new TOfficeObj('TTable'); tbl := new TOfficeObj('TTable');
_LoadObjectAttributes(tbl.Format, attrs, '表格属性', 'Format'); attrs := array(('类别':'单元格属性', '接口':'Paragraph', '说明':'TParagrap对象设置单元格段落格式、字体格式'));
_LoadObjectAttributes(tbl.FormatEx, attrs, '表格扩展属性', 'FormatEx'); _LoadObjectAttributes(tbl.Format, attrs, '表格样式', 'Format');
_LoadObjectAttributes(tbl.FormatEx, attrs, '浮动表设置', 'FormatEx');
_AddClassHelpTable(docx, attrs);//添加表格TTable属性 _AddClassHelpTable(docx, attrs);//添加表格TTable属性
///TTable方法 ///TTable方法

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
// Version 1.1.1 // Version 1.1.2
Function TOfficeObj(n); Function TOfficeObj(n);
Begin Begin
@ -145,6 +145,10 @@ Begin
return new THyperLink(); return new THyperLink();
"tsheetview": "tsheetview":
return new TSheetView(); return new TSheetView();
"tpane":
return new TPane();
"tselection":
return new TSelection();
"tpagelayout": "tpagelayout":
return new TPageLayout(); return new TPageLayout();
"tappproperty": "tappproperty":
@ -3799,7 +3803,7 @@ type TAlignment=class(NodeInfo)
Function GetAttrs(); override; Function GetAttrs(); override;
Begin Begin
HandleAttrs(); HandleAttrs();
return array(("Horizontal", "horizontal", Horizontal, ""),("Vertical", "vertical", Vertical, ""),("WrapText", "wrapText", WrapText, ""),("ReadingOrder", "readingOrder", ReadingOrder, "")) union ExtAttr; return array(("Horizontal", "horizontal", Horizontal, ""),("Vertical", "vertical", Vertical, ""),("WrapText", "wrapText", WrapText, ""),("ReadingOrder", "readingOrder", ReadingOrder, ""),("TextRotation", "textRotation", TextRotation, "")) union ExtAttr;
End; End;
Function GetChildren(); override; Function GetChildren(); override;
@ -3813,6 +3817,7 @@ type TAlignment=class(NodeInfo)
Vertical; Vertical;
WrapText; WrapText;
ReadingOrder; ReadingOrder;
TextRotation;
//Nodes //Nodes
End; End;
@ -4340,6 +4345,202 @@ type TSheetView=class(NodeInfo)
//Nodes //Nodes
End; End;
///////////////////////////////////////////////////////////////
/// TPane
///////////////////////////////////////////////////////////////
type TPane=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'pane');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property XSplit read readXMLXSplit write writeXMLXSplit;
Function readXMLXSplit();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('XSplit'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLXSplit);
End;
Function writeXMLXSplit(str);
Begin
XMLXSplit := class(TSXml).CurCodePageToUtf8(str);
End;
Property YSplit read readXMLYSplit write writeXMLYSplit;
Function readXMLYSplit();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('YSplit'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLYSplit);
End;
Function writeXMLYSplit(str);
Begin
XMLYSplit := class(TSXml).CurCodePageToUtf8(str);
End;
Property TopLeftCell read readXMLTopLeftCell write writeXMLTopLeftCell;
Function readXMLTopLeftCell();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('TopLeftCell'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLTopLeftCell);
End;
Function writeXMLTopLeftCell(str);
Begin
XMLTopLeftCell := class(TSXml).CurCodePageToUtf8(str);
End;
Property ActivePane read readXMLActivePane write writeXMLActivePane;
Function readXMLActivePane();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ActivePane'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLActivePane);
End;
Function writeXMLActivePane(str);
Begin
XMLActivePane := class(TSXml).CurCodePageToUtf8(str);
End;
Property State read readXMLState write writeXMLState;
Function readXMLState();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('State'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLState);
End;
Function writeXMLState(str);
Begin
XMLState := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
HandleAttrs();
return array(("XSplit", "xSplit", XMLXSplit, ""),("YSplit", "ySplit", XMLYSplit, ""),("TopLeftCell", "topLeftCell", XMLTopLeftCell, ""),("ActivePane", "activePane", XMLActivePane, ""),("State", "state", XMLState, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
HandleChildren();
return ExtNodes;
End;
//Attributes
XMLXSplit;
XMLYSplit;
XMLTopLeftCell;
XMLActivePane;
XMLState;
//Nodes
End;
///////////////////////////////////////////////////////////////
/// TSelection
///////////////////////////////////////////////////////////////
type TSelection=class(NodeInfo)
Function Create(); overload;
Begin
Create(nil, 'selection');
End;
Function Create(p, name); overload;
Begin
Class(NodeInfo).Create(p, name);
Init();
End;
Function Init();
Begin
//TODO...
End;
Function InitRootNode(node);
Begin
RootObj := node;
End;
Property Pane read readXMLPane write writeXMLPane;
Function readXMLPane();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Pane'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLPane);
End;
Function writeXMLPane(str);
Begin
XMLPane := class(TSXml).CurCodePageToUtf8(str);
End;
Property ActiveCell read readXMLActiveCell write writeXMLActiveCell;
Function readXMLActiveCell();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('ActiveCell'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLActiveCell);
End;
Function writeXMLActiveCell(str);
Begin
XMLActiveCell := class(TSXml).CurCodePageToUtf8(str);
End;
Property Sqref read readXMLSqref write writeXMLSqref;
Function readXMLSqref();
Begin
tmpVal := class(TSXml).Utf8ToCurCodePage(Value('Sqref'));
if not ifNil(tmpVal) then return tmpVal;
return class(TSXml).Utf8ToCurCodePage(XMLSqref);
End;
Function writeXMLSqref(str);
Begin
XMLSqref := class(TSXml).CurCodePageToUtf8(str);
End;
Function GetAttrs(); override;
Begin
HandleAttrs();
return array(("Pane", "pane", XMLPane, ""),("ActiveCell", "activeCell", XMLActiveCell, ""),("Sqref", "sqref", XMLSqref, "")) union ExtAttr;
End;
Function GetChildren(); override;
Begin
HandleChildren();
return ExtNodes;
End;
//Attributes
XMLPane;
XMLActiveCell;
XMLSqref;
//Nodes
End;
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
/// TPageLayout /// TPageLayout
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
@ -7195,7 +7396,7 @@ type TcellMerge=class(NodeInfo)
Function GetAttrs(); override; Function GetAttrs(); override;
Begin Begin
HandleAttrs(); HandleAttrs();
return array(("Author", "w:author", XMLAuthor, ""),("Date", "w:date", Date, ""),("ID", "w:id", ID, ""),("vmerge", "w:vmerge", vmerge, ""),("vmergeOrig", "w:vmergeOrig", vmergeOrig, "")) union ExtAttr; return array(("Author", "w:author", XMLAuthor, ""),("Date", "w:date", Date, ""),("ID", "w:id", ID, ""),("vmerge", "w:vmerge", vmerge, "垂直合并设置。"),("vmergeOrig", "w:vmergeOrig", vmergeOrig, "")) union ExtAttr;
End; End;
Function GetChildren(); override; Function GetChildren(); override;
@ -7260,23 +7461,23 @@ type TwTcPr=class(NodeInfo)
Function GetChildren(); override; Function GetChildren(); override;
Begin Begin
HandleChildren(); HandleChildren();
return array(("field":"Width","name":"w:tcW","obj":Width,"attrEx":"w:w","nodeType":"","attrName":"", "desc":"", "class":"") return array(("field":"Width","name":"w:tcW","obj":Width,"attrEx":"w:w","nodeType":"","attrName":"", "desc":"表格单元格宽度", "class":"")
,("field":"Type","name":"w:tcW","obj":Type,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Type","name":"w:tcW","obj":Type,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"宽度属性的单位。此属性用于定义表格的各种属性,包括:单元格间距、首选宽度和表格边距。", "class":"")
,("field":"Shading","name":Shading.NodeName,"obj":Shading,"attrEx":"","nodeType":"","attrName":"", "desc":"表头底纹", "class":"TwShading") ,("field":"Shading","name":Shading.NodeName,"obj":Shading,"attrEx":"","nodeType":"","attrName":"", "desc":"表头底纹", "class":"TwShading")
,("field":"cnfStyle","name":"w:cnfStyle","obj":cnfStyle,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"cnfStyle","name":"w:cnfStyle","obj":cnfStyle,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"此表格单元的条件表格样式格式设置属性集。", "class":"")
,("field":"CellMar","name":CellMar.NodeName,"obj":CellMar,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格边距设置", "class":"TTblCellMar") ,("field":"CellMar","name":CellMar.NodeName,"obj":CellMar,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格边距设置", "class":"TTblCellMar")
,("field":"Borders","name":Borders.NodeName,"obj":Borders,"attrEx":"","nodeType":"","attrName":"", "desc":"边框属性", "class":"TwTblBorders") ,("field":"Borders","name":Borders.NodeName,"obj":Borders,"attrEx":"","nodeType":"","attrName":"", "desc":"边框属性", "class":"TwTblBorders")
,("field":"gridSpan","name":"w:gridSpan","obj":gridSpan,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"gridSpan","name":"w:gridSpan","obj":gridSpan,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"当前表单元格所跨的网格列", "class":"")
,("field":"hideMark","name":"w:hideMark","obj":hideMark,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"hideMark","name":"w:hideMark","obj":hideMark,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"忽略行高度计算中的单元格结尾标记", "class":"")
,("field":"hmerge","name":"w:hmerge","obj":hmerge,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"hmerge","name":"w:hmerge","obj":hmerge,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"水平合并单元格", "class":"")
,("field":"noWrap","name":"w:noWrap","obj":noWrap,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"noWrap","name":"w:noWrap","obj":noWrap,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"不换行单元格内容", "class":"")
,("field":"tcFitText","name":"w:tcFitText","obj":tcFitText,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"tcFitText","name":"w:tcFitText","obj":tcFitText,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"调整单元格内的文本", "class":"")
,("field":"textDirection","name":"w:textDirection","obj":textDirection,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"textDirection","name":"w:textDirection","obj":textDirection,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"表格单元格文本文字方向", "class":"")
,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo") ,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo")
,("field":"Ins","name":Ins.NodeName,"obj":Ins,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo") ,("field":"Ins","name":Ins.NodeName,"obj":Ins,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo")
,("field":"cellMerge","name":cellMerge.NodeName,"obj":cellMerge,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格属性", "class":"TcellMerge") ,("field":"cellMerge","name":cellMerge.NodeName,"obj":cellMerge,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TcellMerge")
,("field":"vAlign","name":"w:vAlign","obj":vAlign,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"vAlign","name":"w:vAlign","obj":vAlign,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"表格单元格垂直对齐", "class":"")
,("field":"vmerge","name":"w:vmerge","obj":vmerge,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"vmerge","name":"w:vmerge","obj":vmerge,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"垂直合并单元格", "class":"")
) union ExtNodes; ) union ExtNodes;
End; End;
@ -7388,15 +7589,15 @@ type TwTrPr=class(NodeInfo)
Function GetChildren(); override; Function GetChildren(); override;
Begin Begin
HandleChildren(); HandleChildren();
return array(("field":"Height","name":"w:trHeight","obj":Height,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") return array(("field":"Height","name":"w:trHeight","obj":Height,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"行高", "class":"")
,("field":"Rule","name":"w:trHeight","obj":Rule,"attrEx":"w:hRule","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Rule","name":"w:trHeight","obj":Rule,"attrEx":"w:hRule","nodeType":"","attrName":"", "desc":"如果Rule的值为自动则应根据其内容的高度自动确定表行的高度忽略Height值如果Rule的值至少为least则表行的高度应至少为Height属性的值如果Rule的值是精确的那么表行的高度应该正好是Height属性的值。", "class":"")
,("field":"Alignment","name":"w:jc","obj":Alignment,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Alignment","name":"w:jc","obj":Alignment,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"对齐方式left、right、center", "class":"")
,("field":"CantSplit","name":"w:cantSplit","obj":CantSplit,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"CantSplit","name":"w:cantSplit","obj":CantSplit,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"表行不能跨页分隔", "class":"")
,("field":"cnfStyle","name":"w:cnfStyle","obj":cnfStyle,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"cnfStyle","name":"w:cnfStyle","obj":cnfStyle,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"表行条件格式", "class":"")
,("field":"gridAfter","name":"w:gridAfter","obj":gridAfter,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"gridAfter","name":"w:gridAfter","obj":gridAfter,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"最后一个单元格后的网格列", "class":"")
,("field":"gridBefore","name":"w:gridBefore","obj":gridBefore,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"gridBefore","name":"w:gridBefore","obj":gridBefore,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"第一个单元格之前的网格列", "class":"")
,("field":"hidden","name":"w:hidden","obj":hidden,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"hidden","name":"w:hidden","obj":hidden,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"隐藏表行标记", "class":"")
,("field":"tblHeader","name":"w:tblHeader","obj":tblHeader,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"tblHeader","name":"w:tblHeader","obj":tblHeader,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"在每个新页面上重复表行", "class":"")
,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo") ,("field":"Del","name":Del.NodeName,"obj":Del,"attrEx":"","nodeType":"","attrName":"", "desc":"disable", "class":"TOptInfo")
) union ExtNodes; ) union ExtNodes;
End; End;
@ -7811,7 +8012,7 @@ type TwTblpPr=class(NodeInfo)
Function GetAttrs(); override; Function GetAttrs(); override;
Begin Begin
HandleAttrs(); HandleAttrs();
return array(("bottomFromText", "w:bottomFromText ", bottomFromText, ""),("horizAnchor", "w:horizAnchor", horizAnchor, ""),("leftFromText", "w:leftFromText", leftFromText, ""),("rightFromText", "w:rightFromText", rightFromText, ""),("tblpX", "w:tblpX", tblpX, ""),("tblpXSpec", "w:tblpXSpec", tblpXSpec, ""),("tblpY", "w:tblpY", tblpY, ""),("tblpYSpec", "w:tblpYSpec", tblpYSpec, ""),("topFromText", "w:topFromText", topFromText, ""),("vertAnchor", "w:vertAnchor", vertAnchor, "")) union ExtAttr; return array(("bottomFromText", "w:bottomFromText ", bottomFromText, "指定当前浮动表与该浮动表下方段落中文本顶部之间应保持的最小距离。"),("horizAnchor", "w:horizAnchor", horizAnchor, "指定水平定位的基础对象。"),("leftFromText", "w:leftFromText", leftFromText, "指定当前浮动表与该浮动表左侧段落中文本边缘之间应保持的最小距离。"),("rightFromText", "w:rightFromText", rightFromText, "指定当前浮动表与该浮动表右侧段落中文本边缘之间应保持的最小距离。"),("tblpX", "w:tblpX", tblpX, "指定浮动表的绝对水平位置。此绝对位置是相对于horzAnchor属性为此浮动表指定的水平定位点指定的。"),("tblpXSpec", "w:tblpXSpec", tblpXSpec, "指定浮动表的相对水平位置。此相对位置是相对于此浮动表的horizAnchor属性指定的水平定位点指定的。"),("tblpY", "w:tblpY", tblpY, "指定浮动表的绝对垂直位置。此绝对位置是相对于此浮动表的vertAnchor属性指定的垂直锚点指定的。"),("tblpYSpec", "w:tblpYSpec", tblpYSpec, "指定浮动表的相对垂直位置。此相对位置是相对于此浮动表的vertAnchor属性指定的垂直锚点指定的。"),("topFromText", "w:topFromText", topFromText, "指定当前浮动表与该浮动表上方段落中文本底部边缘之间应保持的最小距离。"),("vertAnchor", "w:vertAnchor", vertAnchor, "指定应根据其计算tblpY属性中的垂直定位的基础对象。")) union ExtAttr;
End; End;
Function GetChildren(); override; Function GetChildren(); override;
@ -7877,26 +8078,26 @@ type TwTblPr=class(NodeInfo)
Function GetChildren(); override; Function GetChildren(); override;
Begin Begin
HandleChildren(); HandleChildren();
return array(("field":"StyleID","name":"w:tblStyle","obj":StyleID,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") return array(("field":"StyleID","name":"w:tblStyle","obj":StyleID,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"样式ID", "class":"")
,("field":"Width","name":"w:tblW","obj":Width,"attrEx":"w:w","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Width","name":"w:tblW","obj":Width,"attrEx":"w:w","nodeType":"","attrName":"", "desc":"表格宽度", "class":"")
,("field":"WidthType","name":"w:tblW","obj":WidthType,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"WidthType","name":"w:tblW","obj":WidthType,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"宽度属性的单位。此属性用于定义表格的各种属性,包括:单元格间距、首选宽度和表格边距。", "class":"")
,("field":"Val","name":"w:tblLook","obj":Val,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Val","name":"w:tblLook","obj":Val,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"表格条件格式样式:表格样式最多可以指定六种不同的可选条件格式,如首行、尾行、首列、尾列等16进制short", "class":"")
,("field":"NoVBand","name":"w:tblLook","obj":NoVBand,"attrEx":"w:noVBand","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"NoVBand","name":"w:tblLook","obj":NoVBand,"attrEx":"w:noVBand","nodeType":"","attrName":"", "desc":"disable", "class":"")
,("field":"NoHBand","name":"w:tblLook","obj":NoHBand,"attrEx":"w:noHBand","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"NoHBand","name":"w:tblLook","obj":NoHBand,"attrEx":"w:noHBand","nodeType":"","attrName":"", "desc":"disable", "class":"")
,("field":"LastRow","name":"w:tblLook","obj":LastRow,"attrEx":"w:lastRow","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"LastRow","name":"w:tblLook","obj":LastRow,"attrEx":"w:lastRow","nodeType":"","attrName":"", "desc":"disable", "class":"")
,("field":"LastColumn","name":"w:tblLook","obj":LastColumn,"attrEx":"w:lastColumn","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"LastColumn","name":"w:tblLook","obj":LastColumn,"attrEx":"w:lastColumn","nodeType":"","attrName":"", "desc":"disable", "class":"")
,("field":"FirstRow","name":"w:tblLook","obj":FirstRow,"attrEx":"w:firstRow","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"FirstRow","name":"w:tblLook","obj":FirstRow,"attrEx":"w:firstRow","nodeType":"","attrName":"", "desc":"disable", "class":"")
,("field":"FirstColumn","name":"w:tblLook","obj":FirstColumn,"attrEx":"w:firstColumn","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"FirstColumn","name":"w:tblLook","obj":FirstColumn,"attrEx":"w:firstColumn","nodeType":"","attrName":"", "desc":"disable", "class":"")
,("field":"Shading","name":Shading.NodeName,"obj":Shading,"attrEx":"","nodeType":"","attrName":"", "desc":"表头底纹", "class":"TwShading") ,("field":"Shading","name":Shading.NodeName,"obj":Shading,"attrEx":"","nodeType":"","attrName":"", "desc":"表头底纹", "class":"TwShading")
,("field":"bidiVisual","name":"w:bidiVisual","obj":bidiVisual,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"bidiVisual","name":"w:bidiVisual","obj":bidiVisual,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"从右到左可视化表格", "class":"")
,("field":"Alignment","name":"w:jc","obj":Alignment,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Alignment","name":"w:jc","obj":Alignment,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"当前文本边距的对齐方式left、right、center", "class":"")
,("field":"Indent","name":"w:tblInd","obj":Indent,"attrEx":"w:w","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Indent","name":"w:tblInd","obj":Indent,"attrEx":"w:w","nodeType":"","attrName":"", "desc":"文档中当前表格前缘之前的缩进(从左到右表格中的左边缘,从右到左表格中的右边缘)。", "class":"")
,("field":"IndentType","name":"w:tblInd","obj":IndentType,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"IndentType","name":"w:tblInd","obj":IndentType,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"约定Indent值的的单位如果忽略此属性则其值应假定为dxa二十分之一点", "class":"")
,("field":"Borders","name":Borders.NodeName,"obj":Borders,"attrEx":"","nodeType":"","attrName":"", "desc":"表格边框属性", "class":"TwTblBorders") ,("field":"Borders","name":Borders.NodeName,"obj":Borders,"attrEx":"","nodeType":"","attrName":"", "desc":"表格边框属性", "class":"TwTblBorders")
,("field":"Autofit","name":"w:tblLayout","obj":Autofit,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Autofit","name":"w:tblLayout","obj":Autofit,"attrEx":"w:type","nodeType":"","attrName":"", "desc":"布局该表内容的算法。当表格显示在文档中时,可以使用固定宽度或自动调整布局算法来显示表格。如果省略了该元素,则该元素的值应假定为自动。", "class":"")
,("field":"CellMar","name":CellMar.NodeName,"obj":CellMar,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格边距设置", "class":"TTblCellMar") ,("field":"CellMar","name":CellMar.NodeName,"obj":CellMar,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格边距设置", "class":"TTblCellMar")
,("field":"Overlap","name":"w:tblOverlap ","obj":Overlap,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"", "class":"") ,("field":"Overlap","name":"w:tblOverlap ","obj":Overlap,"attrEx":"w:val","nodeType":"","attrName":"", "desc":"当前表是否允许其他浮动表重叠其范围。如果指定,则不应进行任何调整,以防止其属性通常会导致其重叠的表格在显示时重叠。如果关闭,则应根据需要调整表格,以防止它们在显示时重叠,方法是根据需要调整浮动表格属性。", "class":"")
,("field":"tblpPr","name":tblpPr.NodeName,"obj":tblpPr,"attrEx":"","nodeType":"","attrName":"", "desc":"表格样式", "class":"TwTblpPr") ,("field":"tblpPr","name":tblpPr.NodeName,"obj":tblpPr,"attrEx":"","nodeType":"","attrName":"", "desc":"浮动表设置", "class":"TwTblpPr")
) union ExtNodes; ) union ExtNodes;
End; End;
@ -8316,7 +8517,7 @@ type TtblStylePr=class(NodeInfo)
return array(("field":"pPr","name":pPr.NodeName,"obj":pPr,"attrEx":"","nodeType":"","attrName":"", "desc":"段落格式", "class":"TwpPr") return array(("field":"pPr","name":pPr.NodeName,"obj":pPr,"attrEx":"","nodeType":"","attrName":"", "desc":"段落格式", "class":"TwpPr")
,("field":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"字体属性", "class":"TwrPr") ,("field":"rPr","name":rPr.NodeName,"obj":rPr,"attrEx":"","nodeType":"","attrName":"", "desc":"字体属性", "class":"TwrPr")
,("field":"TrPr","name":TrPr.NodeName,"obj":TrPr,"attrEx":"","nodeType":"","attrName":"", "desc":"表格行属性", "class":"TwTrPr") ,("field":"TrPr","name":TrPr.NodeName,"obj":TrPr,"attrEx":"","nodeType":"","attrName":"", "desc":"表格行属性", "class":"TwTrPr")
,("field":"TblPr","name":TblPr.NodeName,"obj":TblPr,"attrEx":"","nodeType":"","attrName":"", "desc":"表格属性", "class":"TwTblPr") ,("field":"TblPr","name":TblPr.NodeName,"obj":TblPr,"attrEx":"","nodeType":"","attrName":"", "desc":"表格样式", "class":"TwTblPr")
,("field":"TcPr","name":TcPr.NodeName,"obj":TcPr,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格属性", "class":"TwTcPr") ,("field":"TcPr","name":TcPr.NodeName,"obj":TcPr,"attrEx":"","nodeType":"","attrName":"", "desc":"单元格属性", "class":"TwTcPr")
) union ExtNodes; ) union ExtNodes;
End; End;
@ -11948,13 +12149,16 @@ Type TDocumentBody = Class(DocObject)
borders := ifObj(tblBorders) ? tblBorders.Marshal() : nil; borders := ifObj(tblBorders) ? tblBorders.Marshal() : nil;
cellmar := ifObj(tblCellMar) ? tblCellMar.Marshal() : nil; cellmar := ifObj(tblCellMar) ? tblCellMar.Marshal() : nil;
End; End;
defaultParagraph := new TParagraph(); defaultParagraph := tbl.Paragraph;
defaultParagraph.pPr.rPr.Lang := 'en-US'; if not ifObj(defaultParagraph) then Begin
defaultParagraph.pPr.rPr.eastAsia := 'zh-CN'; defaultParagraph := new TParagraph();
defaultParagraph.Run.rPr.Lang := 'en-US'; defaultParagraph.pPr.rPr.Lang := 'en-US';
defaultParagraph.Run.rPr.eastAsia := 'zh-CN'; defaultParagraph.pPr.rPr.eastAsia := 'zh-CN';
defaultParagraph.Run.rPr.Lang := 'en-US';
defaultParagraph.Run.rPr.eastAsia := 'zh-CN';
End;
defaultpPr := defaultParagraph.pPr.Marshal(); defaultpPr := defaultParagraph.pPr.Marshal();
defaultrPr := defaultParagraph.Run.rPr.Marshal(); defaultrPr := defaultParagraph.pPr.rPr.Marshal();
for i:=0 to length(tbl.Data_)-1 do Begin for i:=0 to length(tbl.Data_)-1 do Begin
trNode := tbl.node_.InsertEndChild('element', 'w:tr'); trNode := tbl.node_.InsertEndChild('element', 'w:tr');
@ -12656,7 +12860,7 @@ Type TDocumentBody = Class(DocObject)
Begin Begin
if not ifObj(lastParagraph_) then if not ifObj(lastParagraph_) then
lastParagraph_ := node; lastParagraph_ := node;
else if (ifInt(posOpt) and posOpt = -1) then else if ifInt(posOpt) and posOpt = -1 then
lastParagraph_ := node; lastParagraph_ := node;
else if ifObj(posOpt) then Begin else if ifObj(posOpt) then Begin
posNode := posOpt; posNode := posOpt;
@ -13184,6 +13388,14 @@ Type TTable = Class(DocObject, TTableImpl)
return TblPr; return TblPr;
End; End;
Property Paragraph read readParagraph;
Function readParagraph();
Begin
if not ifObj(paragraph_) then
paragraph_ := new TParagraph();
return paragraph_;
End;
Property FormatEx read readFormatEx; Property FormatEx read readFormatEx;
Function readFormatEx(); Function readFormatEx();
Begin Begin
@ -13395,6 +13607,7 @@ Type TTable = Class(DocObject, TTableImpl)
Data_; Data_;
colCount_; colCount_;
colWidth_; colWidth_;
paragraph_;//缺省单元格段落格式、字体格式
End; End;
Type TCoreProperties = Class(DocObject) Type TCoreProperties = Class(DocObject)
@ -13962,3 +14175,4 @@ private
middlePosition; middlePosition;
End End

View File

@ -1,4 +1,4 @@
// Version 1.1.1 // Version 1.1.2
Type TSDocxFile = Class Type TSDocxFile = Class
///Version: V1.0 2022-09-20 ///Version: V1.0 2022-09-20

View File

@ -1,4 +1,4 @@
// Version 1.1.1 // Version 1.1.2
Type TSExcelFile = Class Type TSExcelFile = Class
///Version: V1.0 2022-08-08 ///Version: V1.0 2022-08-08
@ -613,23 +613,41 @@ Type TSExcelFile = Class
return workbook_.UnMergeCell(class(TSXml).CurCodePageToUtf8(sheet), hcell, vcell); return workbook_.UnMergeCell(class(TSXml).CurCodePageToUtf8(sheet), hcell, vcell);
End; End;
///设置工作表视图属性 ///新建窗口
///返回windowsIndex int, 窗口索引
Function NewSheetPane();
Begin
return workbook_.NewSheetView();
End;
///设置窗格
///sheet: string工作表名称 ///sheet: string工作表名称
///viewindex: int视图索引viewIndex从0开始 ///windowsIndex: int窗口索引从0开始
///sheet: objectTSheetView对象 ///Pane: TPane对象
Function SetSheetViewOptions(sheet, viewIndex, sheetView); Function SetPane(sheet, windowsIndex, Pane);
Begin Begin
o := getOj(sheet, 'xlsxSheetView'); o := getOj(sheet, 'xlsxSheetView');
if ifObj(o) then return o.SetSheetViewOptions(viewIndex, sheetView); if ifObj(o) then return o.SetPane(windowsIndex, Pane);
End;
///设置工作表视图属性
///sheet: string工作表名称
///windowsIndex: int窗口索引从0开始
///sheet: objectTSheetView对象
Function SetSheetViewOptions(sheet, windowsIndex, sheetView);
Begin
o := getOj(sheet, 'xlsxSheetView');
if ifObj(o) then return o.SetSheetViewOptions(windowsIndex, sheetView);
End; End;
///获取工作表视图属性 ///获取工作表视图属性
///sheet: string工作表名称 ///sheet: string工作表名称
///windowsIndex: int窗口索引从0开始
///返回: object, TSheetView对象 ///返回: object, TSheetView对象
Function GetSheetViewOptions(sheet, viewIndex); Function GetSheetViewOptions(sheet, windowsIndex);
Begin Begin
o := getOj(sheet, 'xlsxSheetView'); o := getOj(sheet, 'xlsxSheetView');
if ifObj(o) then return o.GetSheetViewOptions(viewIndex); if ifObj(o) then return o.GetSheetViewOptions(windowsIndex);
End; End;
// TODO printerSettings1.bin? // TODO printerSettings1.bin?
@ -652,6 +670,7 @@ Type TSExcelFile = Class
return "error sheet"; return "error sheet";
End; End;
///设置默认工作表
///sheet: string工作表名称 ///sheet: string工作表名称
Function SetDefaultSheet(sheet); Function SetDefaultSheet(sheet);
Begin Begin

View File

@ -6,14 +6,14 @@ Type xlsxSheetView = Class
xmlFile_ := xml; xmlFile_ := xml;
End; End;
Function SetSheetViewOptions(viewIndex, sheetView); Function SetSheetViewOptions(windowsIndex, sheetView);
Begin Begin
node := xmlFile_.FirstChild('worksheet').FirstChild('sheetViews'); node := xmlFile_.FirstChild('worksheet').FirstChild('sheetViews');
sheet_view_node := node.FirstChild('sheetView'); sheet_view_node := node.FirstChild('sheetView');
while ifObj(sheet_view_node) do while ifObj(sheet_view_node) do
Begin Begin
id := sheet_view_node.GetAttribute('workbookViewId'); id := sheet_view_node.GetAttribute('workbookViewId');
if trystrtoint(id, r) and r = viewIndex then if trystrtoint(id, r) and r = windowsIndex then
Begin Begin
attributes := sheet_view_node.Attributes(); attributes := sheet_view_node.Attributes();
sheetView.TabSelected := attributes['tabselected']; sheetView.TabSelected := attributes['tabselected'];
@ -28,14 +28,14 @@ Type xlsxSheetView = Class
End End
End; End;
Function GetSheetViewOptions(viewIndex, sheetView); Function GetSheetViewOptions(windowsIndex, sheetView);
Begin Begin
node := xmlFile_.FirstChild('worksheet').FirstChild('sheetViews'); node := xmlFile_.FirstChild('worksheet').FirstChild('sheetViews');
sheet_view_node := node.FirstChild('sheetView'); sheet_view_node := node.FirstChild('sheetView');
while ifObj(sheet_view_node) do while ifObj(sheet_view_node) do
Begin Begin
id := sheet_view_node.GetAttribute('workbookViewId'); id := sheet_view_node.GetAttribute('workbookViewId');
if trystrtoint(id, r) and r = viewIndex then if trystrtoint(id, r) and r = windowsIndex then
Begin Begin
sheetview := TOfficeObj('TSheetView'); sheetview := TOfficeObj('TSheetView');
sheetview.RootObj := sheet_view_node; sheetview.RootObj := sheet_view_node;
@ -46,6 +46,51 @@ Type xlsxSheetView = Class
return nil; return nil;
End End
Function SetPane(windowsIndex, Pane);
Begin
node := xmlFile_.FirstChild('worksheet').FirstChild('sheetViews');
sheet_view_node := node.FirstChild('sheetView');
while ifObj(sheet_view_node) do
Begin
id := sheet_view_node.GetAttribute('workbookViewId');
if trystrtoint(id, r) and r = windowsIndex then
Begin
sheet_view_node.DeleteChildren();
sheet_view_node.InsertFirstChild(Pane.Marshal());
if Pane.XSplit and Pane.YSplit then
begin
selection := tofficeobj('TSelection');
selection.pane := 'topRight';
selection.activecell := coordinatestocellname(pane.xsplit + 1, 1)[1];
selection.sqref := selection.activecell;
sheet_view_node.InsertEndChild(selection.Marshal());
selection.Pane := 'bottomLeft';
selection.ActiveCell := CoordinatesToCellName(1, Pane.YSplit + 1)[1];
selection.Sqref := selection.ActiveCell;
sheet_view_node.InsertEndChild(selection.Marshal());
selection := TOfficeObj('TSelection');
selection.Pane := 'bottomRight';
sheet_view_node.InsertEndChild(selection.Marshal());
end
else if Pane.XSplit then
begin
selection := tofficeobj('TSelection');
selection.pane := 'topRight';
selection.activecell := coordinatestocellname(pane.xsplit + 1, 2)[1];
selection.sqref := selection.activecell;
sheet_view_node.InsertEndChild(selection.Marshal());
end
else if Pane.YSplit then
begin
selection := tofficeobj('TSelection');
selection.pane := 'bottomLeft';
sheet_view_node.InsertEndChild(selection.Marshal());
end
End
sheet_view_node := sheet_view_node.NextElement();
End
End;
class Function NewObject(sheetname, file); class Function NewObject(sheetname, file);
Begin Begin
o := file.WorkBook().GetSheetObj(sheetname); o := file.WorkBook().GetSheetObj(sheetname);

View File

@ -1104,6 +1104,26 @@ Type xlsxWorkBook = Class
return; return;
End; End;
Function NewSheetPane();
Begin
workbook := GetXmlFileObj('xl/workbook.xml');
book_view_node := workbook.FirstChildElement('workbook').FirstChildElement('bookViews');
workbook_node := book_view_node.FirstChildElement('workbookView');
book_view_node.InsertEndChild(workbook_node.Marshal()[0]);
for i:=0 to length(sheetnames_)-1 do
begin
name := sheetNames_[i]['name'];
xml_file := GetXmlFileObj(sheetNames_[i]['file']);
sheet_node := xml_file.FirstChildElement('worksheet').FirstChildElement('sheetViews');
sheet_view := sheet_node.LastChildElement('sheetView');
view_id := strtoint(sheet_view.GetAttribute('workbookViewId')) + 1;
view_obj := TOfficeObj('TSheetView');
view_obj.WorkbookViewId := view_id;
sheet_node.InsertEndChild(view_obj.Marshal());
end
return view_id;
End;
private private
Function generateRow(c1, c2, r); Function generateRow(c1, c2, r);
Begin Begin

View File

@ -1,5 +1,20 @@
# 更新日志 # 更新日志
## 2023-1-31
### V1.1.2
#### word
1. 完善帮助文档
2. 修复获取chart图无法获取对应属性值
#### excel
1. 新增`SetPane`
2. 新增`NewSheetView`
3. 单元格样式新增属性“文本方向”: `TAlignment::TextRotation`
## 2023-1-18 ## 2023-1-18
### V1.1.1 ### V1.1.1