DELPHI应用EXCEL(4) 使用TOLEContainer控件
严格的来说,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的操作。