Delphi OLE方法操作Excel
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相关推荐
- MFC中使用OLE/COM操作EXCEL的方法
使用OLE的方法操作EXCEL,首先计算机必须安装excel,这样才会有接口暴露出来.本次使用大神封装好的类. excel作为OLE/COM库插件,定义好了各类交互接口,而且这些接口是跨语言的,可以导 ...
- Perl通过WIN32 OLE来操作EXCEL
最近要用Perl(通过Win32::OLE)来操作EXCEL,在网上没找到类似的内容,好不容易在一本书上找到点入门知识,再加上自己捣鼓了一通,总算有点眉目,在此做个备份,供大家和我一起参考 ^_^ # ...
- ASP.NET通过OLE DB操作Excel
ASP.NET 操作Excel目前有比较多的方法,常用的有三种:COM组件,OLE DB,和NOPI插件. #1 COM组件 优点: (1)能读取各种版本的Excel,包括2003,2007,2010 ...
- 如何使用SAP Intelligent Robotic Process Automation自动操作Excel
今天是鼠年正月十二.这是Jerry鼠年的第11篇文章,也是汪子熙公众号总共第210篇原创文章. 之前Jerry的文章 使用ABAP操作Excel的几种方法,介绍的是通过ABAP这门编程语言去操作Exc ...
- 如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel
机器人流程自动化 (Robotic Process Automation,简称 RPA) 是一种允许用户将企业重复的.基于规则的业务流程进行自动化的解决方案. 与需要将流程步骤硬编码到系统中的传统自动 ...
- VS2010操作Excel编程
通过VC实现对Excel表格的操作的方法有多种,如:通过ODBC数据库实现,通过解析Excel表格文件,通过OLE/COM的实现.本文主要研究通过OLE/COM实现对Excel表格的操作. 本文源码的 ...
- Delphi 如何操作Excel
Delphi 如何操作Excel 摘自:http://wenjieshiyu.blog.163.com/blog/static/10739413201072033115869/ 个人收藏: Delph ...
- officeopenxml excelpackage 需要安装excel嘛_使用ABAP操作Excel的几种方法
这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些.用 ...
- 使用ABAP操作Excel的几种方法
这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些. ...
最新文章
- 架空输电线路运行规程_[精品课程]绝缘子及其设计架空输电线路设计
- 禁止input输入框输入指定内容
- java错误: 非法字符: '\ufeff' 需要class, interface或enum
- string[x]:size 属性具有无效大小值0
- mysql变更AUTO_INCREMENT值
- php求完数,php算法:求完全数 | 学步园
- c语言bellman算法,求 最短路径中BELLMAN FORD算法实现的C程序
- 10分钟带你逆袭kafka之路
- 【JavaScript算法】---快速排序法
- linux下chkConfig的用法,mysqld开机自启动
- Oracle的10046事件
- iOS学习笔记-自定义过渡动画
- [Python] Request module
- MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具
- 最近,华为应用市场上线了一个服务
- Cookie和Session的区别和联系
- 康熙字典214个部首CJK编码
- springboot uniapp疫情防控打卡系统源码
- 手把手教你配置国内镜像源
- 水星路由器 Mercury MER1200G刷机教程(不需要编程器)
热门文章
- ELK---搭建(LinuxWindows)
- 图像透视变换原理及实现【转发】
- java 大二学期总结报告_大二 Java上学期总结
- 为远程群晖NAS的自定义域名免费申请SSL证书
- kali 简单版攻击WiFi(附详细教程)
- 为什么叫zigbee_Zigbee主要是射频还是组网呢?浅谈Zigbee的概念并说明其优势
- C++(学习笔记)内存模型和名称空间
- html5打包在ios上发布,第二篇 HTML5打包发布IOS APP之苹果开发者账号申请流程
- “用好”北斗,还看芯片——新一代旗舰芯片HD8120
- 阿里企业邮箱注册流程(新手指南)