v1.1.9
This commit is contained in:
parent
89bfc05455
commit
6721a005ca
Binary file not shown.
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.1.8
|
// Version 1.1.9
|
||||||
|
|
||||||
Function TOfficeObj(n);
|
Function TOfficeObj(n);
|
||||||
Begin
|
Begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.1.8
|
// Version 1.1.9
|
||||||
|
|
||||||
Type TSDocxFile = Class
|
Type TSDocxFile = Class
|
||||||
///Version: V1.0 2022-09-20
|
///Version: V1.0 2022-09-20
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Version 1.1.8
|
// Version 1.1.9
|
||||||
|
|
||||||
Type TSExcelFile = Class
|
Type TSExcelFile = Class
|
||||||
///Version: V1.0 2022-08-08
|
///Version: V1.0 2022-08-08
|
||||||
|
|
@ -141,7 +141,7 @@ Type TSExcelFile = Class
|
||||||
return workbook_.NewSheet(class(TSXml).CurCodePageToUtf8(sheet));
|
return workbook_.NewSheet(class(TSXml).CurCodePageToUtf8(sheet));
|
||||||
End;
|
End;
|
||||||
|
|
||||||
///在指定sheet之前插入新sheet
|
///在指定sheet之后插入新sheet
|
||||||
///sourceSheet: string,指定工作表名称
|
///sourceSheet: string,指定工作表名称
|
||||||
///destSheet: string,目的工作表名称
|
///destSheet: string,目的工作表名称
|
||||||
Function NewSheet(sourceSheet, destSheet);overload;
|
Function NewSheet(sourceSheet, destSheet);overload;
|
||||||
|
|
@ -149,6 +149,14 @@ Type TSExcelFile = Class
|
||||||
return workbook_.NewSheet(class(TSXml).CurCodePageToUtf8(sourceSheet), class(TSXml).CurCodePageToUtf8(destSheet));
|
return workbook_.NewSheet(class(TSXml).CurCodePageToUtf8(sourceSheet), class(TSXml).CurCodePageToUtf8(destSheet));
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
///在指定sheet之前插入新sheet
|
||||||
|
///sourceSheet: string,指定工作表名称
|
||||||
|
///destSheet: string,目的工作表名称
|
||||||
|
Function InsertSheet(sourceSheet, destSheet);
|
||||||
|
Begin
|
||||||
|
return workbook_.InsertSheet(class(TSXml).CurCodePageToUtf8(sourceSheet), class(TSXml).CurCodePageToUtf8(destSheet));
|
||||||
|
End;
|
||||||
|
|
||||||
///删除sheet
|
///删除sheet
|
||||||
///sheet: string,工作表名称
|
///sheet: string,工作表名称
|
||||||
Function DeleteSheet(sheet);
|
Function DeleteSheet(sheet);
|
||||||
|
|
|
||||||
|
|
@ -281,6 +281,92 @@ Type xlsxWorkBook = Class
|
||||||
SetDefaultSheet(destSheet);
|
SetDefaultSheet(destSheet);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function InsertSheet(sourceSheet, destSheet);
|
||||||
|
Begin
|
||||||
|
lname := LowerCase(destSheet);
|
||||||
|
if ifint(sheetIndexMap_[ lname ]) then return 'destSheet already exists.';
|
||||||
|
sname := LowerCase(sourceSheet);
|
||||||
|
if not ifint(sheetIndexMap_[ sname ]) then return 'sourceSheet does not exists';
|
||||||
|
|
||||||
|
//添加文件xl/worksheets/sheetN.xml
|
||||||
|
sheetId := vselect maxof(['sheetId']) from sheetNames_ end;
|
||||||
|
sheetId := integer(sheetId) + 1;
|
||||||
|
fname := sheetPrefix_ $ inttostr(sheetsCount_ + 1) $ '.xml';
|
||||||
|
zipfile_.Add(fname, class(TSXml).XmlHeader() + class(TSXml).GetTemplate('sheet1'));
|
||||||
|
|
||||||
|
//设置 workbook.xml.rels
|
||||||
|
rid := getWorkbookRelsRid();
|
||||||
|
workbook_rels := GetXmlFileObj('xl/_rels/workbook.xml.rels');
|
||||||
|
rels := workbook_rels.FirstChildElement('Relationships').InsertEndChild('element', 'Relationship');
|
||||||
|
rels.SetAttribute('Target', getTarget( sheetsCount_ + 1));
|
||||||
|
rels.SetAttribute('Type', class(TSXml).GetTemplate('RelationshipWorkSheet'));
|
||||||
|
rels.SetAttribute('Id', rid);
|
||||||
|
//workbook_rels.Print;
|
||||||
|
|
||||||
|
//设置 xl/workbook.xml
|
||||||
|
workbook := GetXmlFileObj('xl/workbook.xml');
|
||||||
|
node := workbook.FirstChildElement('workbook').FirstChildElement('sheets');
|
||||||
|
sheet_node := node.FirstChildElement('sheet');
|
||||||
|
prev_node := nil;
|
||||||
|
while ifObj(sheet_node) do
|
||||||
|
begin
|
||||||
|
if LowerCase(sheet_node.GetAttribute('name')) = LowerCase(sourceSheet) then
|
||||||
|
begin
|
||||||
|
if ifnil(prev_node) then sheet_node := node.InsertFirstChild('element', 'sheet');
|
||||||
|
else sheet_node := node.InsertAfterChild(prev_node, 'element', 'sheet');
|
||||||
|
sheet_node.SetAttribute('name', destSheet);
|
||||||
|
sheet_node.SetAttribute('sheetId', sheetId);
|
||||||
|
sheet_node.SetAttribute('r:id', rid);
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
prev_node := sheet_node;
|
||||||
|
sheet_node := sheet_node.NextElement();
|
||||||
|
end
|
||||||
|
//workbook.Print();
|
||||||
|
|
||||||
|
//设置docProps/app.xml
|
||||||
|
app := GetXmlFileObj(class(TSXml).GetFileName('docProps_app'));
|
||||||
|
//app.Print();
|
||||||
|
node := app.FirstChildElement('Properties').FirstChildElement('TitlesOfParts');
|
||||||
|
vector := node.FirstChildElement('vt:vector');
|
||||||
|
vector.SetAttribute('size', length(sheetNames_) + 1);
|
||||||
|
lpstr := vector.FirstChildElement('vt:lpstr');
|
||||||
|
pstr := nil;
|
||||||
|
while ifObj(lpstr) do
|
||||||
|
begin
|
||||||
|
if LowerCase(lpstr.GetText()) = LowerCase(sourceSheet) then
|
||||||
|
begin
|
||||||
|
if ifnil(pstr) then vector.InsertFirstChild('element', 'vt:lpstr');
|
||||||
|
else lpstr := vector.InsertAfterChild(pstr, 'element', 'vt:lpstr');
|
||||||
|
lpstr.SetValue(destSheet);
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
pstr := lpstr;
|
||||||
|
lpstr := lpstr.NextElement();
|
||||||
|
end
|
||||||
|
|
||||||
|
//设置[Content_Types].xml
|
||||||
|
content_xml := GetXmlFileObj(class(TSXml).GetFileName('Content_Types'));
|
||||||
|
class(TSXml).AddOverrideContentType(content_xml, '/' + fname, class(TSXml).GetTemplate('sheetContentType'));
|
||||||
|
|
||||||
|
ind := sheetIndexMap_[sname];
|
||||||
|
for i:=sheetsCount_ downto ind+1 do
|
||||||
|
begin
|
||||||
|
sheetNames_[i]['name'] := sheetNames_[i-1]['name'];
|
||||||
|
sheetNames_[i]['sheetId'] := sheetNames_[i-1]['sheetId'];
|
||||||
|
sheetNames_[i]['rid'] := sheetNames_[i-1]['rid'];
|
||||||
|
sheetNames_[i]['file'] := sheetNames_[i-1]['file'];
|
||||||
|
sheetIndexMap_[ LowerCase(sheetNames_[i]['name']) ] := i;
|
||||||
|
end
|
||||||
|
sheetIndexMap_[lname] := ind;
|
||||||
|
sheetNames_[ind]['name'] := destSheet;
|
||||||
|
sheetNames_[ind]['sheetId'] := sheetId;
|
||||||
|
sheetNames_[ind]['rid'] := rid;
|
||||||
|
sheetNames_[ind]['file'] := fname;
|
||||||
|
sheetsCount_ ++;
|
||||||
|
SetDefaultSheet(destSheet);
|
||||||
|
End;
|
||||||
|
|
||||||
Function DeleteSheet(sheet);
|
Function DeleteSheet(sheet);
|
||||||
Begin
|
Begin
|
||||||
if sheetsCount_ <= 1 then return 'Cant not delete the last sheet.';
|
if sheetsCount_ <= 1 then return 'Cant not delete the last sheet.';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue