delphi操作excel
作者:admin 日期:2010-03-30
Delphi操作Excel命令
作者:admin 日期:2010-03-30
Delphi控制Excel的重要属性和方法
作者:admin 日期:2010-03-30
Delphi代码
- 在delphi中调用excel有四种方式,我们选取其中的一种用OleObject来装载excel工作表的方式来谈delphi控制 excel的重要属性和方法。
- 首先给出通过OLE创建的一些主要代码步进行简单说明:
- 创建OLE对象:
- Var olecon: TOleContainer;
- Olecon:= TOleContainer.Create(self);
- Olecon.oleobject:= Olecon.CreateObject('excel.sheet',false);
- 或选择导入一个excel文件来创建OLE对象:
- Olecon.oleobject:= Olecon.CreateObjectFromFile(xlsname,false);
- 最好隐藏excel的几个工具条,这样就好象是嵌在你的程序中的一个表而已了:
- Olecon.OleObject.application.CommandBars['Standard'].Visible:=false;
- Olecon.OleObject.application.CommandBars['Formatting'].Visible:=false;
- Olecon.OleObject.application.CommandBars['Reviewing'].Visible:=false;
- 然后显示并激活excel表,对TOleContainer定义的对象:
- Olecon.show;
- Olecon.doverb(0);
- 这样基本可以了,但TOleContainer有个不好的地方,就是当你一点击其它控件是就它就失去焦点,然后就自动退出,其实并没有真的退出,只是需 要你再次激活它而已,关键是当它失去焦点的时候就excel对象就不见了,可以用Timage控件把TOleContainer所在的地方有EXCEL时 候的区域图片截下来骗骗用户,我们这里主要不是讲这个,就不详述了。
- 下面我们就开始讲Excel_TLB中的接口的常用属性和方法,主 要是针对导出和设定报表格式的一些接口元素。
- 单元格的读写属性:
- olecon.OleObject.application.cells.item[1,1];
- olecon.OleObject.application.cells(1,1);
- olecon.OleObject.application.cells[1,1].Value;
- 上面三种都可以对工作表的‘A1’单元进行读写。
- 在delphi中对单元格(集),区域,工作表等所有对象的操作都是要Variant来实现的。
- 自己的程序中选定区域赋给 Range:
- Var range,sheet:Variant;
- Range:= olecon.OleObject.application.Range['A1:C3'];
- 或者:
- Sheet:= olecon.OleObject.application.Activesheet;
- Range:= olecon.OleObject.application.Range[sheet.cells[1,1],sheet.cells[3,3]];
- 对上面的Range合并单元格:
- Range.merge;
- Range. FormulaR1C1:=’合并区’;//合并后写入文本
- 注意以后要读合并的单元格里面的文本就是读合并区域的左上角的那个单元格的文本
- 在excel表中选定区域赋给range:
- range:=excel_grid1.OleObject.application.selection;
- 拆分单元格:
- Range.unmerge;
- 合并后设定单元格(集)的格式:
- Range.HorizontalAlignment:= xlCenter;// 文本水平居中方式
- Range.VerticalAlignment:= xlCenter//文本垂直居中方式
- Range.WrapText:=true;//文本自动换行
- Range.Borders.LineStyle:=1//加边框
- Range.Interior.ColorIndex:=39;//填充颜色为淡紫色
- Range.Font.name:=’ 隶书’;//字体
- Range.Font.Color:=clBlue;//字体颜色
- 常用格式也就这些,以上这些对于单个单元格也适用。
- 在excel表中寻找前后上下的单元格:
- Var u1,u2,u3,u4,u5:Variant;
- U1:=olecon.oleobject.application.activecell;//获取当前格;
- U2:=u1.previous;//非特殊情况就是u1左边的一格;
- U3:=ui.next;//非特殊情况就是u2右边的一格;
- U4:=olecon.oleobject.application.cells[u1.cells.row-1,u1.cells.column]; //非特殊情况为上面一格
- U5:=olecon.oleobject.application.cells[u1.cells.row+1,u1.cells.column]; //非特殊情况为下面一格
- 删除和插入一行和一列:
- Olecon.oleobject.application.rows[2].delete;
- Olecon.oleobject.application.columns[2].delete;
- Olecon.oleobject.application.rows[2].insert;
- Olecon.oleobject.application.columns[2].insert;
- 复制指定区域:
- Olecon.oleobject.application.range[‘A1:C3’].copy;
- 从指定单元格开始粘贴:
- Olecon.oleobject.application.range[‘A4’].PasteSpecial;
- 常用的就这些了,对delphi中server面板下的EXEL控件和创建EXCEL.Application COM对象的方式都适用
利用SQL语句实现对ACCESS和EXCEL数据导入导出
作者:admin 日期:2010-03-14
SQL代码
- SQL SERVER 和EXCEL的数据导入导出
- 1、在SQL SERVER里查询Excel数据:
- -- ======================================================
- Select *
- FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
- 下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
- Select *
- FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
- -------------------------------------------------------------------------------------------------
- 2、将Excel的数据导入SQL server :
- -- ======================================================
- Select * into newtable
- FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
- 实例:
- Select * into newtable
- FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
- -------------------------------------------------------------------------------------------------
- 3、将SQL SERVER中查询到的数据导成一个Excel文件
- -- ======================================================
- T-SQL代码:
- EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
- 参数:S 是SQL服务器名;U是用户;P是密码
- 说明:还可以导出文本文件等多种格式
- 实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
- EXEC master..xp_cmdshell 'bcp "Select au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
- 在VB6中应用ADO导出EXCEL文件代码:
- Dim cn As New ADODB.Connection
- cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
- cn.execute "master..xp_cmdshell 'bcp "Select col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
- ------------------------------------------------------------------------------------------------
- 4、在SQL SERVER里往Excel插入数据:
- -- ======================================================
- insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)
- T-SQL代码:
- Insert INTO
- OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
- 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]
- (bestand, produkt) VALUES (20, 'Test')
- --开启xp_cmdshell
- --SQL Server blocked access to procedure 'xp_cmdshell'
- sp_configure 'show advanced options', 1
- go
- reconfigure
- go
- sp_configure 'xp_cmdshell', 1
- go
- reconfigure
- go
- --开启sp_OACreate
- --SQL Server blocked access to procedure 'sys.sp_OACreate'
- sp_configure 'show advanced options', 1;
- go
- reconfigure;
- go
- sp_configure 'ole automation procedures', 1;
- go
- reconfigure;
- go
- .在SQL SERVER里查询access数据:
- -- ======================================================
- Select *
- FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名
- -------------------------------------------------------------------------------------------------
- 2.将access导入SQL server
- -- ======================================================
- 在SQL SERVER 里运行:
- Select *
- INTO newtable
- FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
- 'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名
- -------------------------------------------------------------------------------------------------
- 3.将SQL SERVER表里的数据插入到Access表中
- -- ======================================================
- 在SQL SERVER 里运行:
- insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
- 'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名
- (列名1,列名2)
- select 列名1,列名2 from sql表
- 实例:
- insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
- 'C:\db.mdb';'admin';'', Test)
- select id,name from Test
- Insert INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)
- Select *
- FROM sqltablename







