Delphi OLE方法操作Excel 

来源:http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/2008/0519/154269.html

引用下面单元文件

Uses ComObj, Variants;

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

var ExcelApp: Variant;

ExcelApp := CreateOleObject( ’Excel.Application’ );

注意程序结束时释放变量 ExcelApp:=unassigned;

1 显示当前窗口: ExcelApp.Visible := True;

2 更改 Excel标题栏: ExcelApp.Caption := ’应用程序调用 Microsoft Excel’;

3 添加新工作簿: ExcelApp.WorkBooks.Add;

4 添加工作表 ExcelApp.WorkSheets.add;

5 打开已存在的工作簿: ExcelApp.WorkBooks.Open( ’C:ExcelDemo.xls’ );

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

ExcelApp.WorkSheets[2].Activate; 或 ExcelApp.WorksSheets[ ’Sheet2’ ].Activate;

【导出Excel范例】

来源: http://zhidao.baidu.com/question/154677351.html

procedure QueryToExcel(Q:TAdoQuery;Tit:string;FileName:string);

var

XlApp,XlWorkbook,XlSheet:Olevariant;

i,j:integer;

Range:OleVariant;

begin

Try

XlApp:=createOleObject('Excel.Application');

XLApp.visible:=false;

XlWorkbook:=XlApp.workbooks.add;

XlSheet:=Xlworkbook.sheets.add;

except

showmessage('你还没有安装Microsoft Excel,请先安装!');

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

exit;

end;

for i:=0 to Q.FieldCount-1 do

begin

Xlsheet.Cells[1,i+1]:=Q.Fields[i].DisplayName ;

end;

for i:=1 to Q.RecordCount do

begin

for j:=0 to Q.FieldCount -1 do

begin

if ((j=0) or (j=6) or (j=22)) and (Q.Fields[j].AsString<>'') then

Xlsheet.cells[i+1,j+1]:=''''+Q.Fields[j].Asstring else

Xlsheet.cells[i+1,j+1]:=Q.Fields[j].AsString;

end;

Q.Next;

end;

Xlsheet.rows[1].insert;

Range:=Xlsheet.range[XlSheet.cells[1,1],XlSheet.cells[1,Q.FieldCount-DelCollist.count]];

Range.merge;

Range.HorizontalAlignment:= xlCenter;

Range.VerticalAlignment:= xlCenter;

Range.WrapText:=true;

Range.Font.size:=14;

Xlsheet.cells[1,1]:=Tit;

Xlsheet.Columns.EntireColumn.AutoFit;

if FileExists(FileName) then

begin

if MessageDlg('文件已经存在,要替换吗?',mtConfirmation,[mbyes,mbno],0)=mrno then

begin

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

exit;

end;

end;

try

XlWorkbook.SaveAs(FileName);

except

showmessage('导出失败,请检查你对该文件是否有写权限!');

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

exit;

end;

showmessage('导出成功!请不要改动导出的Excel表中的列标题!否则将不能将该Excel表再导入!');

XlWorkBook.Saved:=true;

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

//  XlSheet:=Unassigned;

//  XlWorkbook:=Unassigned;

//  XlApp:=Unassigned;

end;

慢慢看吧

调用这个过程

SaveDialog1.Filter:='Microsoft Excel|*.xls';

if SaveDialog1.Execute then

begin

if SaveDialog1.FileName <>'' then

begin

FilesName:=SaveDialog1.FileName;

TitleName:='XXXX基本信息表';

QueryToExcel(DataM.Qr_EquipmentDetails,TitleName,FilesName);

end;

end;

【导入Excel范例】

procedure TfrmExcelIO.btnOkClick(Sender: TObject);

var

sFileName: String;

ExcelApp:variant;

iRow, iCol: Integer;

sSql, sValue: String;

begin

sFileName := txtFile.Text;

if not FileExists(sFileName) then

begin

ShowMyMsg('系统提示', '导入文件不存在,请重新选择!');

Exit;

end;

//

Screen.Cursor := crHourGlass;

//

if radNew.Checked then

begin

TSqlProc.Execute('truncate table stk_TMHS');

end;

//

ExcelApp := CreateOleObject('Excel.Application');

ExcelApp.visible:=False;

ExcelApp.workbooks.open(sFileName);

//自适应宽度

ExcelApp.worksheets[1].Cells.EntireColumn.AutoFit; //整个表所有列

labNumber.Caption := '';

labNumber.Visible := True;

iRow := 3;   //从第3行开始导入

try

while ExcelApp.worksheets[1].cells[iRow, 1].text <> '' do

begin

sSql := 'insert into stk_TMHS(Row, Tag, TaxState, OrdNo, CarNo, Model, CarInfo, BatteryBrand, Qty, MastHeight, ForkSize, Battery, BatteryCharger, TireType, Attachment, StockState, PONo, Remark) ' +

'Values(';

//有18列

for iCol := 1 to 18 do

begin

sValue := ExcelApp.worksheets[1].cells[iRow, iCol].text;

//

if iCol = 1 then

labNumber.Caption := sValue;

//

if not (iCol in [1, 9]) then

sValue := QuotedStr(sValue);

//

if iCol = 18 then

sSql := sSql + sValue + ')'

else

sSql := sSql + sValue + ',';

end;

//

TSqlProc.Execute(sSql);

//换一行

iRow := iRow + 1;

end;

//

labNumber.Visible := False;

ExcelApp.Activeworkbook.close(false);

ExcelApp.quit;

ExcelApp:=unassigned;   //释放变量ExcelApp, 去掉Excel.exe的进程

Screen.Cursor := crHourGlass;

ShowMyMsg('系统提示', '导入完毕,共导入' + IntToStr(iRow - 3) + '行数据!');

except

labNumber.Visible := False;

ExcelApp.Activeworkbook.close(false);

ExcelApp.quit;

ExcelApp:=unassigned; //释放变量ExcelApp, 去掉Excel.exe的进程

Screen.Cursor := crHourGlass;

WarnMyMsg('系统提示', '导入第'+ IntToStr(iRow) + '行时出现错误, 请修正后再以追加模式导入!');

end;

//

Self.ModalResult := mrOk;

end;

Delphi OLE方法操作Excel相关推荐

  1. MFC中使用OLE/COM操作EXCEL的方法

    使用OLE的方法操作EXCEL,首先计算机必须安装excel,这样才会有接口暴露出来.本次使用大神封装好的类. excel作为OLE/COM库插件,定义好了各类交互接口,而且这些接口是跨语言的,可以导 ...

  2. Perl通过WIN32 OLE来操作EXCEL

    最近要用Perl(通过Win32::OLE)来操作EXCEL,在网上没找到类似的内容,好不容易在一本书上找到点入门知识,再加上自己捣鼓了一通,总算有点眉目,在此做个备份,供大家和我一起参考 ^_^ # ...

  3. ASP.NET通过OLE DB操作Excel

    ASP.NET 操作Excel目前有比较多的方法,常用的有三种:COM组件,OLE DB,和NOPI插件. #1 COM组件 优点: (1)能读取各种版本的Excel,包括2003,2007,2010 ...

  4. 如何使用SAP Intelligent Robotic Process Automation自动操作Excel

    今天是鼠年正月十二.这是Jerry鼠年的第11篇文章,也是汪子熙公众号总共第210篇原创文章. 之前Jerry的文章 使用ABAP操作Excel的几种方法,介绍的是通过ABAP这门编程语言去操作Exc ...

  5. 如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel

    机器人流程自动化 (Robotic Process Automation,简称 RPA) 是一种允许用户将企业重复的.基于规则的业务流程进行自动化的解决方案. 与需要将流程步骤硬编码到系统中的传统自动 ...

  6. VS2010操作Excel编程

    通过VC实现对Excel表格的操作的方法有多种,如:通过ODBC数据库实现,通过解析Excel表格文件,通过OLE/COM的实现.本文主要研究通过OLE/COM实现对Excel表格的操作. 本文源码的 ...

  7. Delphi 如何操作Excel

    Delphi 如何操作Excel 摘自:http://wenjieshiyu.blog.163.com/blog/static/10739413201072033115869/ 个人收藏: Delph ...

  8. officeopenxml excelpackage 需要安装excel嘛_使用ABAP操作Excel的几种方法

    这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些.用 ...

  9. 使用ABAP操作Excel的几种方法

    这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些. ...

最新文章

  1. 架空输电线路运行规程_[精品课程]绝缘子及其设计架空输电线路设计
  2. 禁止input输入框输入指定内容
  3. java错误: 非法字符: '\ufeff' 需要class, interface或enum
  4. string[x]:size 属性具有无效大小值0
  5. mysql变更AUTO_INCREMENT值
  6. php求完数,php算法:求完全数 | 学步园
  7. c语言bellman算法,求 最短路径中BELLMAN FORD算法实现的C程序
  8. 10分钟带你逆袭kafka之路
  9. 【JavaScript算法】---快速排序法
  10. linux下chkConfig的用法,mysqld开机自启动
  11. Oracle的10046事件
  12. iOS学习笔记-自定义过渡动画
  13. [Python] Request module
  14. MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具
  15. 最近,华为应用市场上线了一个服务
  16. Cookie和Session的区别和联系
  17. 康熙字典214个部首CJK编码
  18. springboot uniapp疫情防控打卡系统源码
  19. 手把手教你配置国内镜像源
  20. 水星路由器 Mercury MER1200G刷机教程(不需要编程器)

热门文章

  1. ELK---搭建(LinuxWindows)
  2. 图像透视变换原理及实现【转发】
  3. java 大二学期总结报告_大二 Java上学期总结
  4. 为远程群晖NAS的自定义域名免费申请SSL证书
  5. kali 简单版攻击WiFi(附详细教程)
  6. 为什么叫zigbee_Zigbee主要是射频还是组网呢?浅谈Zigbee的概念并说明其优势
  7. C++(学习笔记)内存模型和名称空间
  8. html5打包在ios上发布,第二篇 HTML5打包发布IOS APP之苹果开发者账号申请流程
  9. “用好”北斗,还看芯片——新一代旗舰芯片HD8120
  10. 阿里企业邮箱注册流程(新手指南)