v1.2.8
This commit is contained in:
parent
08f046ed02
commit
e39cd05b1f
Binary file not shown.
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.2.7
|
// Version 1.2.8
|
||||||
|
|
||||||
Function TOfficeObj(n);
|
Function TOfficeObj(n);
|
||||||
Begin
|
Begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.2.7
|
// Version 1.2.8
|
||||||
|
|
||||||
Type TSDocxFile = Class
|
Type TSDocxFile = Class
|
||||||
///Version: V1.0 2022-09-20
|
///Version: V1.0 2022-09-20
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.2.7
|
// Version 1.2.8
|
||||||
|
|
||||||
Type TSExcelFile = Class
|
Type TSExcelFile = Class
|
||||||
///Version: V1.0 2022-08-08
|
///Version: V1.0 2022-08-08
|
||||||
|
|
|
||||||
|
|
@ -261,7 +261,7 @@ Type TSXml = Class
|
||||||
|
|
||||||
class Function GetWorkSheetPrevNode(workNode, nodeName);
|
class Function GetWorkSheetPrevNode(workNode, nodeName);
|
||||||
Begin
|
Begin
|
||||||
order_arr := array('dimension', 'sheetViews', 'sheetFormatPr', 'cols', 'sheetData', 'sheetProtection', 'mergeCells', 'phoneticPr',
|
order_arr := array('dimension', 'sheetPr', 'sheetViews', 'sheetFormatPr', 'cols', 'sheetData', 'sheetProtection', 'mergeCells', 'phoneticPr',
|
||||||
'hyperlinks', 'pageMargins', 'headerFooter', 'pageSetup', 'rowBreaks', 'colBreaks', 'drawing', 'legacyDrawing', 'picture');
|
'hyperlinks', 'pageMargins', 'headerFooter', 'pageSetup', 'rowBreaks', 'colBreaks', 'drawing', 'legacyDrawing', 'picture');
|
||||||
for i:=0 to length(order_arr)-1 do
|
for i:=0 to length(order_arr)-1 do
|
||||||
begin
|
begin
|
||||||
|
|
@ -272,6 +272,30 @@ Type TSXml = Class
|
||||||
end
|
end
|
||||||
End
|
End
|
||||||
|
|
||||||
|
class Function GetWorkBookPrevNode(workNode, nodeName);
|
||||||
|
Begin
|
||||||
|
order_arr := array('fileVersion', 'workbookPr', 'bookViews');
|
||||||
|
for i:=0 to length(order_arr)-1 do
|
||||||
|
begin
|
||||||
|
if order_arr[i] = nodeName then return prev;
|
||||||
|
current := workNode.FirstChild(order_arr[i]);
|
||||||
|
if i = 0 then prev := current;
|
||||||
|
else prev := ifObj(current) ? current : prev;
|
||||||
|
end
|
||||||
|
End
|
||||||
|
|
||||||
|
class Function GetWorkSheetNode(workNode, nodeName);
|
||||||
|
Begin
|
||||||
|
node := workNode.FirstChildElement(nodeName);
|
||||||
|
if not ifObj(node) then
|
||||||
|
begin
|
||||||
|
prev_node := class(TSXml).GetWorkSheetPrevNode(workNode, nodeName);
|
||||||
|
if ifObj(prev_node) then node := workNode.InsertAfterChild(prev_node, 'element', nodeName);
|
||||||
|
else node := workNode.InsertFirstChild('element', nodeName);
|
||||||
|
end
|
||||||
|
return node;
|
||||||
|
End
|
||||||
|
|
||||||
class Function GetDatetimeStr(v);
|
class Function GetDatetimeStr(v);
|
||||||
Begin
|
Begin
|
||||||
return FormatDateTime('YYYY-MM-DD', v) + 'T' + timetostr(v) + 'Z';//2017-03-02T04:16:00Z
|
return FormatDateTime('YYYY-MM-DD', v) + 'T' + timetostr(v) + 'Z';//2017-03-02T04:16:00Z
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,14 @@ Type xlsxHeaderFooter = Class
|
||||||
node := xmlFile_.FirstChildElement('worksheet');
|
node := xmlFile_.FirstChildElement('worksheet');
|
||||||
header_node := node.FirstChildElement('headerFooter');
|
header_node := node.FirstChildElement('headerFooter');
|
||||||
if ifObj(header_node) then
|
if ifObj(header_node) then
|
||||||
node.DeleteChild(header_node);
|
begin
|
||||||
page_node := node.FirstChildElement('pageMargins');
|
marshal := headerFooter.Marshal();
|
||||||
if ifObj(page_node) then
|
class(TSXml).UpdateNode(header_node, marshal['attributes'], marshal['children']);
|
||||||
node.InsertAfterChild(page_node, headerFooter.Marshal());
|
end
|
||||||
else
|
else begin
|
||||||
node.InsertEndChild(headerFooter.Marshal());
|
prev_node := class(TSXml).GetWorkSheetPrevNode(node, 'headerFooter');
|
||||||
|
node.InsertAfterChild(prev_node, headerFooter.Marshal());
|
||||||
|
end
|
||||||
End
|
End
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -846,11 +846,6 @@ Type xlsxWorkBook = Class
|
||||||
Function SetRowHeight(sheet, row, height);
|
Function SetRowHeight(sheet, row, height);
|
||||||
Begin
|
Begin
|
||||||
obj := GetSheetObj(sheet);
|
obj := GetSheetObj(sheet);
|
||||||
axis := CoordinatesToCellName(1, row, False)[1];
|
|
||||||
if not obj.CellIsExists(axis) then
|
|
||||||
begin
|
|
||||||
obj.SetCellValue(axis, '', array('t': 's'));
|
|
||||||
end
|
|
||||||
obj.SetAttribute(row, array('ht': height, "customHeight": 1));
|
obj.SetAttribute(row, array('ht': height, "customHeight": 1));
|
||||||
End
|
End
|
||||||
|
|
||||||
|
|
@ -874,17 +869,42 @@ Type xlsxWorkBook = Class
|
||||||
if startCol > endCol then return;
|
if startCol > endCol then return;
|
||||||
sheet_xml_file := GetSheetXmlFile(sheet);
|
sheet_xml_file := GetSheetXmlFile(sheet);
|
||||||
work_node := sheet_xml_file.FirstChildElement('worksheet');
|
work_node := sheet_xml_file.FirstChildElement('worksheet');
|
||||||
col_node := work_node.FirstChildElement('cols');
|
col_node := class(TSXml).GetWorkSheetNode(work_node, 'cols');
|
||||||
if not ifObj(col_node) then
|
|
||||||
col_node := work_node.InsertAfterChild(work_node.FirstChildElement('sheetFormatPr'), 'element', 'cols');
|
|
||||||
node := col_node.FirstChildElement('col');
|
node := col_node.FirstChildElement('col');
|
||||||
while ifObj(node) do
|
while ifObj(node) do
|
||||||
Begin
|
Begin
|
||||||
min := strtoint(node.GetAttribute('min'));
|
min := strtoint(node.GetAttribute('min'));
|
||||||
max := strtoint(node.GetAttribute('max'));
|
max := strtoint(node.GetAttribute('max'));
|
||||||
val := trystrtofloat(node.GetAttribute('width'), r) ? r : '';
|
val := trystrtofloat(node.GetAttribute('width'), r) ? r : '';
|
||||||
if startCol >= min and endCol <= max then
|
if startCol = min and endCol = max then
|
||||||
Begin
|
begin
|
||||||
|
node.SetAttribute('width', width);
|
||||||
|
node.SetAttribute('customWidth', 1);
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
else if startCol <= min and endCol >= max then
|
||||||
|
begin
|
||||||
|
node.SetAttribute('width', width);
|
||||||
|
node.SetAttribute('customWidth', 1);
|
||||||
|
node.SetAttribute('min', startCol);
|
||||||
|
node.SetAttribute('max', endCol);
|
||||||
|
node := node.NextElement();
|
||||||
|
while ifObj(node) do
|
||||||
|
begin
|
||||||
|
max := strtoint(node.GetAttribute('max'));
|
||||||
|
min := strtoint(node.GetAttribute('min'));
|
||||||
|
if max <= endCol and min <= endCol then
|
||||||
|
begin
|
||||||
|
delete_node := node;
|
||||||
|
node := node.NextElement();
|
||||||
|
col_node.DeleteChild(delete_node);
|
||||||
|
end
|
||||||
|
else node := node.NextElement();
|
||||||
|
end
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
else if startCol >= min and endCol <= max then
|
||||||
|
begin
|
||||||
if width = val then return array(0, '');
|
if width = val then return array(0, '');
|
||||||
if min = max then
|
if min = max then
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -899,7 +919,7 @@ Type xlsxWorkBook = Class
|
||||||
node_new.SetAttribute('min', endCol + 1);
|
node_new.SetAttribute('min', endCol + 1);
|
||||||
End
|
End
|
||||||
break;
|
break;
|
||||||
End
|
end
|
||||||
node := node.NextElement();
|
node := node.NextElement();
|
||||||
End
|
End
|
||||||
arr := array('type': 'element', 'name': 'col', 'attributes': ('min': startCol, 'max': endCol, 'width': width,
|
arr := array('type': 'element', 'name': 'col', 'attributes': ('min': startCol, 'max': endCol, 'width': width,
|
||||||
|
|
@ -1056,14 +1076,11 @@ Type xlsxWorkBook = Class
|
||||||
for i:=0 to length(sheetnames_)-1 do
|
for i:=0 to length(sheetnames_)-1 do
|
||||||
begin
|
begin
|
||||||
name := sheetNames_[i]['name'];
|
name := sheetNames_[i]['name'];
|
||||||
xml_file := GetXmlFileObj(sheetNames_[i]['file']);
|
file := sheetNames_[i]['file'];
|
||||||
work_node := xml_file.FirstChildElement('worksheet');
|
xml_file := GetXmlFileObj(file);
|
||||||
sheet_node := work_node.FirstChildElement('sheetViews');
|
if AnsiContainsText(file, 'chart') then root_node := xml_file.FirstChildElement('chartsheet');
|
||||||
if not ifObj(sheet_node) then
|
else root_node := xml_file.FirstChildElement('worksheet');
|
||||||
begin
|
sheet_node := class(TSXml).GetWorkSheetNode(root_node, 'sheetViews');
|
||||||
prev_node := class(TSXml).GetWorkSheetPrevNode(work_node, 'sheetViews');
|
|
||||||
sheet_node := work_node.InsertAfterChild(prev_node, 'element', 'sheetViews');
|
|
||||||
end
|
|
||||||
node := sheet_node.FirstChildElement('sheetView');
|
node := sheet_node.FirstChildElement('sheetView');
|
||||||
if not ifObj(node) then
|
if not ifObj(node) then
|
||||||
begin
|
begin
|
||||||
|
|
@ -1074,12 +1091,24 @@ Type xlsxWorkBook = Class
|
||||||
Begin
|
Begin
|
||||||
node.SetAttribute('tabselected', 1);
|
node.SetAttribute('tabselected', 1);
|
||||||
workbook := GetXmlFileObj('xl/workbook.xml');
|
workbook := GetXmlFileObj('xl/workbook.xml');
|
||||||
book_view_node := workbook.FirstChildElement('workbook').FirstChildElement('bookViews').FirstChildElement('workbookView');
|
workbook_node := workbook.FirstChildElement('workbook');
|
||||||
book_view_node.SetAttribute('activeTab', ind);
|
book_view_node := workbook_node.FirstChildElement('bookViews');
|
||||||
|
if not ifObj(book_view_node) then
|
||||||
|
begin
|
||||||
|
prev_node := class(TSXml).GetWorkBookPrevNode(workbook_node, 'bookViews');
|
||||||
|
if not ifObj(prev_node) then book_view_node := workbook_node.InsertFirstChild('element', 'bookViews');
|
||||||
|
else book_view_node := workbook_node.InsertAfterChild(prev_node, 'element', 'bookViews');
|
||||||
|
end;
|
||||||
|
view_node := book_view_node.FirstChildElement('workbookView');
|
||||||
|
if not ifObj(view_node) then
|
||||||
|
begin
|
||||||
|
view_node := book_view_node.InsertFirstChild('element', 'workbookView');
|
||||||
|
end
|
||||||
|
view_node.SetAttribute('activeTab', ind);
|
||||||
End
|
End
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
node := xml_file.FirstChildElement('worksheet').FirstChildElement('sheetViews').FirstChildElement('sheetView');
|
node := root_node.FirstChildElement('sheetViews').FirstChildElement('sheetView');
|
||||||
node.SetAttribute('tabselected', 0);
|
node.SetAttribute('tabselected', 0);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -1090,8 +1119,11 @@ Type xlsxWorkBook = Class
|
||||||
for i:=0 to length(sheetnames_)-1 do
|
for i:=0 to length(sheetnames_)-1 do
|
||||||
begin
|
begin
|
||||||
name := sheetnames_[i]['name'];
|
name := sheetnames_[i]['name'];
|
||||||
xml_file := GetXmlFileObj(sheetnames_[i]['file']);
|
file := sheetNames_[i]['file'];
|
||||||
sheet_node := xml_file.FirstChildElement('worksheet').FirstChildElement('sheetviews').FirstChildElement('sheetview');
|
xml_file := GetXmlFileObj(file);
|
||||||
|
if AnsiContainsText(file, 'chart') then root_node := xml_file.FirstChildElement('chartsheet');
|
||||||
|
else root_node := xml_file.FirstChildElement('worksheet');
|
||||||
|
sheet_node := root_node.FirstChildElement('sheetviews').FirstChildElement('sheetview');
|
||||||
if sheet_node.GetAttribute('tabSelected') = '1' then return name;
|
if sheet_node.GetAttribute('tabSelected') = '1' then return name;
|
||||||
end
|
end
|
||||||
End
|
End
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue