首页 > 其他分享 >Delphi应用EXCEL(3) 使用OLEOBJECT

Delphi应用EXCEL(3) 使用OLEOBJECT

时间:2023-08-07 15:56:24浏览次数:41  
标签:ExcelApp EXCEL Delphi ActiveSheet Excel oleobj 0.035 OLEOBJECT PageSetup

1、创建EXCEL的方法

首先创建 Excel 对象,使用单元ComObj :

Var 
  ExcelApp : Variant ; 
begin ExcelApp := CreateOleObject ( '' Excel.Application '' ) ;

使用OLEOBJECT创建的EXCEL应用程序是一个Variant类型,所以DELPHI不能自动补充语句,也没有帮助文件,需要到visual basic中去寻求帮助,完成功能语句的调用。

下面的部分都是引用别人的内容:

使用oleobject创建的excel有许多优点:

l  不需要安装OFFICE控件

l  打开、保存等等更简单,可以省略参数的输入

但也有明显的缺点

l  不能自动填充代码

l  不能使用with do语句

l  需要手动关闭创建的office。

下面是一些关于oleobject的功能说明。

1 ) 显示当前窗口:

  ExcelApp.Visible := True ;

2 ) 更改 Excel 标题栏:

ExcelApp.Caption := '' 应用程序调用 Microsoft Excel '' ;

3 ) 添加新工作簿:

ExcelApp.WorkBooks.Add ;

当然也可以定义一个变量OLEEXCELWB: Variant,

然后:OLEEXCELWB:= ExcelApp.WorkBooks.Add;则OLEEXCELWB就是新建的workbook;

4 ) 打开已存在的工作簿:

ExcelApp.WorkBooks.Open ( '' C : \Excel\Demo.xls '' ) ;

5 ) 设置第2个工作表为活动工作表:

ExcelApp.WorkSheets [ 2 ] .Activate ;

ExcelApp.WorksSheets [ '' Sheet2 '' ] .Activate ;

6 ) 给单元格赋值:

ExcelApp.Cells [ 1 , 4 ] .Value := '' 第一行第四列 '' ;

7 ) 设置指定列的宽度(单位:字符个数),以第一列为例:

ExcelApp.ActiveSheet.Columns [ 1 ] .ColumnsWidth := 5 ;

8 ) 设置指定行的高度(单位:磅)(1磅=0.035 厘米),以第二行为例:

ExcelApp.ActiveSheet.Rows [ 2 ] .RowHeight := 1 / 0.035 ; // 1厘米

9 ) 在第8行之前插入分页符:

ExcelApp.WorkSheets [ 1 ] .Rows [ 8 ] .PageBreak := 1 ;

10 ) 在第8列之前删除分页符:

ExcelApp.ActiveSheet.Columns [ 4 ] .PageBreak := 0 ;

11 ) 指定边框线宽度:

ExcelApp.ActiveSheet.Range [ '' B3 : D4 '' ] .Borders [ 2 ] .Weight := 3 ;

1 - 左 2 - 右 3 - 顶 4 - 底 5 - 斜 ( \ ) 6 - 斜 ( / ) ,7-10指的是range边框

12 ) 清除第一行第四列单元格公式:

ExcelApp.ActiveSheet.Cells [ 1 , 4 ] .ClearContents ;

13 ) 设置第一行字体属性:

ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Name := '' 隶书 '' ;

ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Color := clBlue ;

ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Bold := True ;

ExcelApp.ActiveSheet.Rows [ 1 ] .Font.UnderLine := True ;

14 ) 进行页面设置:

a.页眉:

ExcelApp.ActiveSheet.PageSetup.CenterHeader := '' 报表演示 '' ;

b.页脚:

ExcelApp.ActiveSheet.PageSetup.CenterFooter := '' 第&P页 '' ;

c.页眉到顶端边距2cm:

ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2 / 0.035 ;

d.页脚到底端边距3cm:

ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3 / 0.035 ;

e.顶边距2cm:

ExcelApp.ActiveSheet.PageSetup.TopMargin := 2 / 0.035 ;

f.底边距2cm:

ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2 / 0.035 ;

g.左边距2cm:

ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2 / 0.035 ;

h.右边距2cm:

ExcelApp.ActiveSheet.PageSetup.RightMargin := 2 / 0.035 ;

i.页面水平居中:

ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2 / 0.035 ;

j.页面垂直居中:

ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2 / 0.035 ;

k.打印单元格网线:

ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True ;

15 ) 拷贝操作:

a.拷贝整个工作表:

ExcelApp.ActiveSheet.Used.Range.Copy ;

b.拷贝指定区域:

ExcelApp.ActiveSheet.Range [ '' A1 : E2 '' ] .Copy ;

c.从A1位置开始粘贴:

ExcelApp.ActiveSheet.Range. [ '' A1 '' ] .PasteSpecial ;

d.从文件尾部开始粘贴:

ExcelApp.ActiveSheet.Range.PasteSpecial ;

16 ) 插入一行或一列:

a.ExcelApp.ActiveSheet.Rows [ 2 ] .Insert ;

b.ExcelApp.ActiveSheet.Columns [ 1 ] .Insert ;

17 ) 删除一行或一列:

a.ExcelApp.ActiveSheet.Rows [ 2 ] .Delete ;

b.ExcelApp.ActiveSheet.Columns [ 1 ] .Delete ;

18 ) 打印预览工作表:

ExcelApp.ActiveSheet.PrintPreview ;

19 ) 打印输出工作表:

ExcelApp.ActiveSheet.PrintOut ;

20 ) 工作表保存:

If Not ExcelApp.ActiveWorkBook.Saved Then

  ExcelApp.ActiveSheet.PrintPreview ;

21 ) 工作表另存为:

ExcelApp.ActiveWorkBook.SaveAs ( '' C : \Excel\Demo1.xls '' ) ;

22 ) 放弃存盘:

ExcelApp.ActiveWorkBook.Saved := True ;

23 ) 关闭工作簿:

ExcelApp.WorkBooks.Close ;

24 ) 退出 Excel:

ExcelApp.Quit ;

上面部分引用了别人的内容,都是在网上找的,如有冒犯,敬请指出,本人将尽快予以改正。

2、使用DELPHI定义的office类型

DELPHI定义了excelworkbook,excelworksheet等OFFICE类型,使用这些类型则可以自动填充代码,也可以使用with do语句。

需要应用单元:ExcelXP

下面的语句,就是此应用:

var oleobj:Variant; i,j:Integer;
    es:ExcelWorksheet;
begin
  oleobj:=CreateOleObject('Excel.Application');
  oleobj.Visible:=true;
  oleobj.DisplayAlerts:=False;
  oleobj.workbooks.add;
  es:=iunknown(oleobj.Workbooks[1].Worksheets[2]) as ExcelWorksheet;
  with es.Range['B2','G11'] DO
  for I := 1 to 10 do
    for j := 1 to 5 do
      ITEM[i,J]:=Format('%d行,%d列',[i,j]);
  oleobj.cells[1,2].value:='only a test';
  oleobj.activeworkbook.saveas('d:\abc.xls',TRUE);

运行结果:

 

为什么oleobj.cells[1,2].value:='only a test';没有修改第一行,第二列的内容呢?

因为实际上该语句得到了很好地执行,但activesheet是sheet1,所以修改的sheet1的内容。

实际上,我们的delphi在安装OFFICE控件后,每次重新启动DELPHI,安装好的DELPHI控件需要手动引入,但单元“ExcelXP”即便不引入OFFIECE控件也可直接引用。

把variant类型的数据转换为DELPHI定义的excel类型的关键是使用iunknown进行转换。除此之外,就没有什么特殊的了。

 

标签:ExcelApp,EXCEL,Delphi,ActiveSheet,Excel,oleobj,0.035,OLEOBJECT,PageSetup
From: https://www.cnblogs.com/luohq001/p/17611656.html

相关文章

  • DELPHI应用EXCEL(1)
    在介绍使用delphi控制excel之前前,我们首先需要了解关于EXCEL的几个基本概念:EXCEL应用程序、工作薄(book)、工作表(sheet)以及单元格(CELLS); 首先,我们是打开excel应用程序,并可设置应用程序可见或不可见,可以设置应用程序标题等等;没有管理工作簿(workbook)的应用程序是没有意义的,我......
  • Siemens 如何用脚本将WinCC7.5写数据到Excel中?
    01要完成的功能任务在Wincc界面中使用按钮,添加脚本将需要写入的数据写入到excel表格中;02软件Wincc7.5、office2016;03实现方法1.Wincc新建工程,然后打开画面添加按钮对象以及TAG2、TAG3两个内部变量的IO域(图1所示) 2.在按钮中组态以下VBS脚本,如图2所示: 3.更改脚本中Excel......
  • 解析json数据导出某个字段的值到excel(记录)
    记录一下导出代码publicstaticvoidmain(String[]args){ //将你的json数据放在txt文档里并复制路径到下面StringfilePath="E:/home/2023年需求/人才/20230801出表/job_mobile_json.txt";//替换成你的文件路径try{Stringcontent=r......
  • excel 合并单元格内容数据写入
    youcanusethiscodetoopen(test.xlsx)fileandmodifyA1cellandthensaveitwithanewnameimportopenpyxlxfile=openpyxl.load_workbook('test.xlsx')sheet=xfile.get_sheet_by_name('Sheet1')sheet['A1']='hel......
  • Javaexcel文件读取,插入到数据库中
    你可以使用Java的ApachePOI库来读取Excel文件,并使用JDBC连接数据库将数据插入到数据库中。下面是一个示例代码:importjava.io.FileInputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importorg.apache.poi.ss.usermo......
  • 如何快速对比两张Excel报表
    背景最近由于工作原因,要切换系统,新老系统都会产生excel报表,上线前需要验证新老系统产生的报表数据的一致性,作为测试的一部分。理论上,是要求新老系统新生成的报表要一模一样,要是不一致的地方,也需要标注出合理的解释。本文地址:https://www.cnblogs.com/hchengmx/p/17609130.html......
  • Java 利用poi读取excel行数,列数
    一般读取行总数时,会调用getLastRowNum(),读取列总数时,会调用getLastCellNum(),但是这两个方法的返回值有点区别。sheet.getLastRowNum();//返回最后一行的索引,即比行总数小1 row.getLastCellNum();//返回的是最后一列的列数,即等于总列数getLastRowNum():如果she......
  • 从excel读数据的格式
    问题:从excel中读取的数据应是什么格式呢?   1pytest中需要参数化时,需要的[(valuea,valueb)(valuex,valuey)]-------------列表内是元祖importpytestdefadd(x,y):[email protected]("x,y,expected",[(1,1,2),(2,3,5),......
  • Delphi使用Asterisk AMI接口给分机播放系统录音
    Delphi使用AsteriskAMI接口给分机播放系统录音查找资料在上一篇“Delphi调用Asterisk系统AMI接口取得来电号码”成功连接上AsteriskAMI接口取得来电号码,我们来测试用AMI来做点其它,比如说当系统出现故障后,给分机发送一个报警提醒,要怎么实现呢?经过查找资料我们发现在/var/lib/aster......
  • 读excel测试用例;登录;做pytest 请求
    1.从excel中读数据 返回【{字典}{字典}】;当传参数时,可以获得对应单元格内容importxlrdimportjsonfromconfigs.configsimportHOSTfromutils.md5importget_md5#在创建excel时,将登录接口的返回结果粘贴到excel时需要“只粘贴文本”#将excel实例化defget_exce......