我有 3 个 html 文件 test1、test2 和 test3。我想将这 3 个文件加载到一个 Excel 工作簿中,并将每个 HTML 文件加载到单独的工作表 test1、test2 和 test3 上。我想使用 Delphi 和 OLE 自动化。在 VB 中可能更多,但我找不到 Delphi 代码
谢谢
我有 3 个 html 文件 test1、test2 和 test3。我想将这 3 个文件加载到一个 Excel 工作簿中,并将每个 HTML 文件加载到单独的工作表 test1、test2 和 test3 上。我想使用 Delphi 和 OLE 自动化。在 VB 中可能更多,但我找不到 Delphi 代码
谢谢
正如我在评论中提到的,如果您尝试将 .Html 文件加载到 WorkBook 中,Excel 将从 WorkBook 中删除现有的 WorkSheets,然后将 .Html 加载到新的单个工作表中,因此如果您尝试打开多个.Html 文件在同一个工作簿中,您最终只会加载最后一个。并非所有 .Html 文件似乎都能被 Excel 消化,顺便说一句,它经常抱怨诸如无法访问必要的 .Css 文件之类的事情。
因此,下面的代码通过将 .Html 文件加载到单独的工作簿中来完成我认为您想要的操作,然后将第二个到第 N 个 .Html 文件的单个工作表复制到第一个工作表中,并将其保存在 C:\Temp 中。希望代码应该是合理的不言自明的,但如果有疑问,请询问。我只展示了处理第一个和第二个 .Html 文件,因为您只需为第三个到第 N 个重复第二个的步骤。
uses
Variants, ComObj;
procedure TForm1.btnLoadClick(Sender: TObject);
var
vExcel,
vWorkbook1,
vWorkBook2,
vWorkSheet,
vWorkSheet2,
vSourceRange,
vDestRange : OleVariant;
const
xlOpenXMLWorkbook = $00000033; // borrowed from Excel 2010 type lib import
begin
vExcel := CreateOleObject('Excel.Application');
vExcel.Visible := True;
vExcel.DisplayAlerts := False;
try
// The following starts a new workbook and loads the first .Html file
vWorkBook1 := vExcel.WorkBooks.Open('d:\aaad7\html\Inputs.html');
// Next, save it in C:\Temp in XLSX format
vWorkBook1.SaveAs(FileName := 'C:\temp\' + 'Output.Xlsx', FileFormat:= xlOpenXMLWorkbook);
// Next, open another wokkbook with the 2nd .Html file
vWorkBook2 := vExcel.WorkBooks.Open('d:\aaad7\html\Test.Html');
// The next bit uses Excel Range objects to make a copy of the worksheet from the 2nd
// workbook into a new worksheet in
vSourceRange := vWorkBook2.WorkSheets[1].UsedRange;
vWorkSheet := vWorkBook1.WorkSheets.Add;
vDestRange := vWorkSheet.Range['A1', 'A1'];
vSourceRange.Copy(vDestRange);
vWorkBook2.Close;
vWorkBook1.SaveAs(FileName := 'C:\temp\' + 'Output.Xlsx', FileFormat:= xlOpenXMLWorkbook);
// for the 3rd to Nth .Html files, repeat the steps starting with
// vWorkBook2 := vExcel.WorkBooks.Open([...])
finally
vWorkBook1 := UnAssigned;
vWorkBook2 := UnAssigned;
vExcel := UnAssigned;
end;
end;