DELPHI应用EXCEL(4) 使用TOLEContainer控件

发布时间 2023-08-07 17:32:17作者: Luo大哥

严格的来说,tolecontainer控件并不是一个EXCEL控件,而是一个所有OLE文件的控件,可以用它打开PDF、OFFICE、TXT文件等等。

而且使用OLECONTAINER控件打开的文件,文件内容依旧是一个VARIANT类型的数据。

OLECONTAINER控件在SYSTEM组下。

 

使用OLECONTAINER控件需要注意以下几点:

1、一次只能打开或新建一个OLE,如果已经有OLE,则需要先删除已经存在OLE。

2、OLECONTAINER需要RUN,才能激活。

3、有时候打开某些OLE时,并不能集成在DELPHI的FORM上,而是需要如同oleobject一样通过调用应用程序来实现操作。例如在我的电脑上安装的是DELPHI XE6,就只能打开EXCEL的XLS文件,而不能打开XLSX文件。

打开XLS文件的设计阶段显示如下:

 

而打开XLSX文件的设计阶段显示如下:

 

下面的语句可以对OLECONTAINER进行操作:

procedure TForm1.btn3Click(Sender: TObject);
var i,j:Integer;   SHEET:ExcelWorksheet;
begin
  OC1.DestroyObject;
  //下面这个屏蔽的语句用于打开插入OLE的语句
  //oc1.InsertObjectDialog;
  oc1.CreateObject('EXCEL.SHEET',FALSE);
  OC1.Run;
  SHEET:=iUnknown(oc1.OleObject.Application.Workbooks[1].Worksheets[1]) as ExcelWorksheet;
  SHEET.Cells.range['a1','b1'].RowHeight:=40;
  sheet.cells.range['B1','J1'].Font.size:=20;
  sheet.cells.range['B1','J1'].Font.name:='华文行楷';
  sheet.cells.range['B1','J1'].HorizontalAlignment:=xlCenter;
  sheet.cells.range['B1','J1'].Merge(true);
  SHEET.CELLS.ITEM[1,2]:='九九乘法表';
  SHEET.cells.range['B2','J10'].rows.rowheight:=30;
  SHEET.cells.range['B2','J10'].columns.columnwidth:=8;
  SHEET.CELLS.RANGE['B2','J10'].Cells.Borders.Item[7].Weight:=3;
  SHEET.cells.range['B2','J10'].Cells.Borders.item[4].weight:=1;
  SHEET.CELLS.RANGE['B2','J10'].Cells.Borders.Item[8].Weight:=3;
  SHEET.CELLS.RANGE['B2','J10'].Cells.Borders.Item[9].Weight:=3;
  SHEET.CELLS.RANGE['B2','J10'].Cells.Borders.Item[10].Weight:=3;
  oc1.OleObject.Application.Workbooks[1].Worksheets[1].Cells.Item[3,6]:='=pi()';
  begin
    for i:=1 to 9 do
      for j := 1 to i do
        begin
          oc1.OleObject.Application.Workbooks[1].Worksheets[1].Cells.item[i+1,j+1]:=Format('%d*%d=%d',[j,i,i*j]);
        end;
  end;
  oc1.Enabled:=False;
end;

执行结果如下图:

 

通过上面的例子可以看出,使用OLECONTAINER的操作其实和OLEOBJECT差不多,也能实现对EXCEL的操作。