v1.4.6
This commit is contained in:
parent
8aa050461c
commit
addc41144e
|
|
@ -1,28 +1,28 @@
|
|||
path := ExtractFileDir(ExtractFileDir(PluginPath()));
|
||||
{$IFNDEF Win32}
|
||||
path := path + '\\funcext\\TSOffice\\TSExcelFile.tsf';
|
||||
path := path + '\\funcext\\TSOffice\\TSXlsxFile.tsf';
|
||||
{$ELSE}
|
||||
path := path + '/funcext/TSOffice/TSExcelFile.tsf';
|
||||
path := path + '/funcext/TSOffice/TSXlsxFile.tsf';
|
||||
{$ENDIF}
|
||||
funcs := LoadClassInfo(path);
|
||||
|
||||
testing := 1;
|
||||
file := new TSExcelFile();
|
||||
file := new TSXlsxFile();
|
||||
[err, errinfo] := file.NewFile();
|
||||
if err then
|
||||
return PrintError("NewFile", err, errinfo);
|
||||
PrintSuccess("NewFile", testing++);
|
||||
|
||||
file.SetSheetName('Sheet1', 'ExcelFile');
|
||||
file.SetSheetName('Sheet1', 'XlsxFile');
|
||||
PrintSuccess("SetSheetName", testing++);
|
||||
|
||||
file.NewSheet("Functions");
|
||||
PrintSuccess("NewSheet", testing++);
|
||||
|
||||
file.SetDefaultSheet('ExcelFile');
|
||||
file.SetDefaultSheet('TSXlsxFile');
|
||||
|
||||
richtext := TOfficeObj('TRichText');
|
||||
txt1 := richtext.AddText('TSExcelFile类 ');
|
||||
txt1 := richtext.AddText('TSXlsxFile类 ');
|
||||
txt1.Font.Size := 35;
|
||||
txt1.Font.Color := "FF0000";
|
||||
txt1.Font.Bold := 1;
|
||||
|
|
@ -34,14 +34,14 @@ txt2.Font.Bold := 1;
|
|||
txt2.Font.Italic := 1;
|
||||
txt2.Font.Color := "FFC0CB";
|
||||
|
||||
file.SetCellRichText('ExcelFile', 'A1', richtext);
|
||||
file.SetCellRichText('XlsxFile', 'A1', richtext);
|
||||
PrintSuccess("SetCellRichText", testing++);
|
||||
[err, richText] := file.GetCellRichText('ExcelFile', 'A1');
|
||||
[err, richText] := file.GetCellRichText('XlsxFile', 'A1');
|
||||
if err then
|
||||
return PrintError("GetCellRichText", err, errinfo);
|
||||
PrintSuccess("GetCellRichText", testing++);
|
||||
|
||||
file.MergeCell('ExcelFile', 'A1', 'C1');
|
||||
file.MergeCell('XlsxFile', 'A1', 'C1');
|
||||
PrintSuccess("MergeCell", testing++);
|
||||
|
||||
|
||||
|
|
@ -65,15 +65,15 @@ style.Fill.Gradient.Stop2.Color := "E0EBF5";
|
|||
styleId := file.NewStyle(style);
|
||||
PrintSuccess("NewStyle", testing++);
|
||||
|
||||
file.SetCellStyle("ExcelFile", 'A1', 'C1', styleId);
|
||||
file.SetCellStyle("XlsxFile", 'A1', 'C1', styleId);
|
||||
|
||||
file.SetCellValue("ExcelFile", "A3", "索引");
|
||||
file.SetCellValue("ExcelFile", "B3", "函数名称");
|
||||
file.SetCellValue("ExcelFile", "C3", "功能");
|
||||
file.SetColWidth("ExcelFile", "A", "A", 6);
|
||||
file.SetColWidth("ExcelFile", "B", "B", 55);
|
||||
file.SetColWidth("ExcelFile", "C", "C", 100);
|
||||
file.SetCellStyle("ExcelFile", "A3", "C3", styleId);
|
||||
file.SetCellValue("XlsxFile", "A3", "索引");
|
||||
file.SetCellValue("XlsxFile", "B3", "函数名称");
|
||||
file.SetCellValue("XlsxFile", "C3", "功能");
|
||||
file.SetColWidth("XlsxFile", "A", "A", 6);
|
||||
file.SetColWidth("XlsxFile", "B", "B", 55);
|
||||
file.SetColWidth("XlsxFile", "C", "C", 100);
|
||||
file.SetCellStyle("XlsxFile", "A3", "C3", styleId);
|
||||
|
||||
|
||||
style2 := TOfficeObj("TStyle");
|
||||
|
|
@ -108,9 +108,9 @@ Begin
|
|||
[err0, cell0] := file.CoordinatesToCellName(1, i+4);
|
||||
[err1, cell1] := file.CoordinatesToCellName(2, i+4);
|
||||
[err2, cell2] := file.CoordinatesToCellName(3, i+4);
|
||||
file.SetCellValue("ExcelFile", cell0, i+1);
|
||||
file.SetCellValue("ExcelFile", cell1, funcs[i]['funcname']);
|
||||
file.SetCellValue("ExcelFile", cell2, funcs[i]['name']);
|
||||
file.SetCellValue("XlsxFile", cell0, i+1);
|
||||
file.SetCellValue("XlsxFile", cell1, funcs[i]['funcname']);
|
||||
file.SetCellValue("XlsxFile", cell2, funcs[i]['name']);
|
||||
|
||||
str := funcs[i]['name'] + "\nFunction " + funcs[i]['funcname'] + funcs[i]['comment'];
|
||||
arr := str2array(str, "\n");
|
||||
|
|
@ -130,15 +130,15 @@ Begin
|
|||
hyperlink.LinkType := "location";
|
||||
hyperlink.LinkUrl := "Functions!" $ c1;
|
||||
|
||||
file.SetCellHyperLink("ExcelFile", cell1, hyperlink);
|
||||
file.SetCellStyle("ExcelFile", cell1, cell1, styleId4);
|
||||
file.SetCellHyperLink("XlsxFile", cell1, hyperlink);
|
||||
file.SetCellStyle("XlsxFile", cell1, cell1, styleId4);
|
||||
|
||||
End
|
||||
|
||||
file.SetColWidth('Functions', 'A', 'A', 120);
|
||||
PrintSuccess('SetColWidth', testing++);
|
||||
|
||||
saveName := utf8toansi("ExcelFile使用帮助.xlsx");
|
||||
saveName := utf8toansi("XlsxFile使用帮助.xlsx");
|
||||
[err, errinfo] := file.SaveAs('', saveName);
|
||||
if err then
|
||||
return PrintError("SaveAs", err, errinfo);
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,4 @@
|
|||
// Version 1.4.5
|
||||
// Version 1.4.6
|
||||
|
||||
Type TSDocxFile = Class
|
||||
///Version: V1.0 2022-09-20
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Version 1.4.5
|
||||
// Version 1.4.6
|
||||
|
||||
Type TSExcelFile = Class
|
||||
///Version: V1.0 2022-08-08
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -142,7 +142,7 @@ Type TTableContent = class
|
|||
Begin
|
||||
///获取标题列表 array((("Level":level,"Paragraph":"object","Text":title,"numId":,"ilvl":,"numArr":));
|
||||
numMap := array();
|
||||
r := docx_.Document().Body().GetHeadingListImpl(docx_, posOpt, UpperHeadingLevel, LowerHeadingLevel, numMap, true);
|
||||
r := docx_.Document().Body().GetHeadingListImpl(docx_, -1, UpperHeadingLevel, LowerHeadingLevel, numMap, true);
|
||||
for i:=0 to length(r)-1 do Begin
|
||||
p := _AddItem(UpperHeadingLevel, LowerHeadingLevel, r[i]['Level'], i = 0 ? true: false);
|
||||
//fldCharType
|
||||
|
|
|
|||
|
|
@ -166,64 +166,71 @@ Type xlsxWorkBook = Class
|
|||
Begin
|
||||
lname := LowerCase(sheet);
|
||||
if ifint(sheetIndexMap_[ lname ]) then return 'The sheet already exists.';
|
||||
rid := getWorkbookRelsRid();
|
||||
|
||||
fname := sheetPrefix_ $ inttostr(sheetsCount_ + 1) $ '.xml';
|
||||
sheetId := addSheetN(fname);
|
||||
rid := setWorkbookRels();
|
||||
setWorkbookSheet(sheet, sheetId, rid);
|
||||
setDocPropsApp(sheet);
|
||||
setContentTypes(fname);
|
||||
|
||||
sheetNames_[sheetsCount_]['name'] := sheet;
|
||||
sheetNames_[sheetsCount_]['sheetId'] := sheetId;
|
||||
sheetNames_[sheetsCount_]['rid'] := rid;
|
||||
sheetNames_[sheetsCount_]['file'] := fname;
|
||||
sheetIndexMap_[ lname ] := sheetsCount_;
|
||||
sheetsCount_ ++;
|
||||
SetDefaultSheet(sheet);
|
||||
End;
|
||||
|
||||
Function addSheetN(fname);
|
||||
Begin
|
||||
//添加文件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'));
|
||||
return sheetId;
|
||||
End;
|
||||
|
||||
Function setWorkbookRels();
|
||||
Begin
|
||||
rid := getWorkbookRelsRid();
|
||||
//设置 workbook.xml.rels
|
||||
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;
|
||||
return rid;
|
||||
End;
|
||||
|
||||
Function setWorkbookSheet(sheetName, sheetId, rid);
|
||||
Begin
|
||||
//设置 xl/workbook.xml
|
||||
workbook := GetXmlFileObj('xl/workbook.xml');
|
||||
node := workbook.FirstChildElement('workbook').FirstChildElement('sheets').InsertEndChild('element','sheet');
|
||||
node.SetAttribute('name', sheet);
|
||||
node.SetAttribute('name', sheetName);
|
||||
node.SetAttribute('sheetId', sheetId);
|
||||
node.SetAttribute('r:id', rid);
|
||||
//workbook.Print();
|
||||
End;
|
||||
|
||||
Function setDocPropsApp(sheet);
|
||||
Begin
|
||||
//设置docProps/app.xml
|
||||
app := GetXmlFileObj(class(TSXml).GetFileName('docProps_app'));
|
||||
//app.Print();
|
||||
node := app.FirstChildElement('Properties').FirstChildElement('TitlesOfParts');
|
||||
if not ifObj(node) then Begin
|
||||
node := app.FirstChildElement('Properties').InsertEndChild('element','TitlesOfParts');
|
||||
End;
|
||||
vector := node.FirstChildElement('vt:vector');
|
||||
if not ifObj(vector) then Begin
|
||||
vector := node.InsertEndChild('element', 'vt:vector');
|
||||
vector.SetAttribute('baseType', 'lpstr');
|
||||
vector.SetAttribute('size', length(sheetNames_) + 1);
|
||||
for i:=0 to length(sheetNames_)-1 do Begin
|
||||
vector.InsertEndChild('element', 'vt:lpstr', sheetNames_[i]['name']);
|
||||
End;
|
||||
End
|
||||
else
|
||||
vector.SetAttribute('size', length(sheetNames_) + 1);
|
||||
vector := class(TSXml).GetNode(app, 'Properties/TitlesOfParts/vt:vector');
|
||||
vector.SetAttribute('size', length(sheetNames_) + 1);
|
||||
vector.InsertEndChild('element', 'vt:lpstr', sheet);
|
||||
//app.Print();
|
||||
End;
|
||||
|
||||
Function setContentTypes(fname);
|
||||
Begin
|
||||
//设置[Content_Types].xml
|
||||
content_xml := GetXmlFileObj(class(TSXml).GetFileName('Content_Types'));
|
||||
class(TSXml).AddOverrideContentType(content_xml, '/' + fname, class(TSXml).GetTemplate('sheetContentType'));
|
||||
|
||||
sheetNames_[sheetsCount_]['name'] := sheet;
|
||||
sheetNames_[sheetsCount_]['sheetId'] := sheetId;
|
||||
sheetNames_[sheetsCount_]['rid'] := rid;
|
||||
sheetNames_[sheetsCount_]['file'] := fname;
|
||||
sheetIndexMap_[ LowerCase(sheet) ] := sheetsCount_;
|
||||
sheetsCount_ ++;
|
||||
SetDefaultSheet(sheet);
|
||||
End;
|
||||
|
||||
|
||||
Function NewSheet(sourceSheet, destSheet);overload;
|
||||
Begin
|
||||
lname := LowerCase(destSheet);
|
||||
|
|
@ -726,23 +733,25 @@ Type xlsxWorkBook = Class
|
|||
Function SetSheetVisible(sheet, visible);
|
||||
Begin
|
||||
workbook := GetXmlFileObj('xl/workbook.xml');
|
||||
node := workbook.FirstChildElement('workbook').FirstChildElement('sheets').FirstChildElement('sheet');
|
||||
hidden := visible = 1 ? 0 : 1;
|
||||
default_sheet_name := GetDefaultSheet();
|
||||
if default_sheet_name = sheet then
|
||||
node := class(TSXml).GetNode(workbook, 'workbook/sheets/sheet');
|
||||
if GetSheetsCount() = 1 then return "Only one sheet, can't set visible.";
|
||||
sheet := lowercase(sheet);
|
||||
default_sheet_name := lowercase(GetDefaultSheet());
|
||||
if default_sheet_name = sheet and not visible then
|
||||
begin
|
||||
ind := sheetIndexMap_[LowerCase(default_sheet_name)];
|
||||
if ind = 0 then default_name := sheetNames_[ind + 1]['name'];
|
||||
else default_name := sheetNames_[ind - 1]['name'];
|
||||
default_name := ind = 0 ? sheetNames_[1]['name'] : sheetNames_[ind - 1]['name'];
|
||||
SetDefaultSheet(default_name);
|
||||
end
|
||||
if visible then SetDefaultSheet(sheet);
|
||||
state := visible ? "nohidden" : "hidden";
|
||||
while ifObj(node) do
|
||||
Begin
|
||||
name := node.GetAttribute('name');
|
||||
name := lowercase(node.GetAttribute('name'));
|
||||
if name = sheet then
|
||||
Begin
|
||||
if hidden then node.SetAttribute('state', 'hidden');
|
||||
else node.DeleteAttribute('state');
|
||||
node.SetAttribute('state', state);
|
||||
break;
|
||||
End
|
||||
node := node.NextElement();
|
||||
End
|
||||
|
|
@ -753,11 +762,12 @@ Type xlsxWorkBook = Class
|
|||
Begin
|
||||
sheet_file := GetSheetXmlFile(sheet);
|
||||
if not ifObj(sheet_file) then return 0;
|
||||
sheet := lowercase(sheet);
|
||||
workbook := GetXmlFileObj('xl/workbook.xml');
|
||||
node := workbook.FirstChildElement('workbook').FirstChildElement('sheets').FirstChildElement('sheet');
|
||||
node := class(TSXml).GetNode(workbook, 'workbook/sheets/sheet');
|
||||
while ifObj(node) do
|
||||
Begin
|
||||
name := node.GetAttribute('name');
|
||||
name := lowercase(node.GetAttribute('name'));
|
||||
if name = sheet then
|
||||
Begin
|
||||
val := node.GetAttribute('state');
|
||||
|
|
@ -1104,23 +1114,11 @@ Type xlsxWorkBook = Class
|
|||
node := sheet_node.InsertFirstChild('element', 'sheetView');
|
||||
node.SetAttribute('workbookViewId', 0);
|
||||
end
|
||||
if name = sheet then
|
||||
if lowercase(name) = lowercase(sheet) then
|
||||
Begin
|
||||
node.SetAttribute('tabSelected', 1);
|
||||
workbook := GetXmlFileObj('xl/workbook.xml');
|
||||
workbook_node := workbook.FirstChildElement('workbook');
|
||||
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 := class(TSXml).GetNode(workbook, 'workbook/bookViews/workbookView');
|
||||
view_node.SetAttribute('activeTab', ind);
|
||||
End
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue