0

我有 3 个 html 文件 test1、test2 和 test3。我想将这 3 个文件加载到一个 Excel 工作簿中,并将每个 HTML 文件加载到单独的工作表 test1、test2 和 test3 上。我想使用 Delphi 和 OLE 自动化。在 VB 中可能更多,但我找不到 Delphi 代码

谢谢

4

1 回答 1

1

正如我在评论中提到的,如果您尝试将 .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;
于 2020-07-26T18:28:20.437 回答