用ADOQuery连接SQL Server得到的数据导出到Excel表中,用的是一行一行的导出,但是数据量很大,效率低CPU使用率很高。想请教怎样一次性的导出?是不是可以先复制到粘贴板,再粘贴到Excel表。
另外还有一个问题,Delphi怎样设置Excel整列都居中或左对齐?
另外还有一个问题,Delphi怎样设置Excel整列都居中或左对齐?
解决方案 »
- 甘特图控件
- 可移动磁盘只能拷贝出,不能把文件拷贝到移动介质中怎么做???
- 发现李维大师的<VCL架构剖析>的一个可笑的问题!!!
- 动态创建XmlDocument后读取根节点报内存错?
- 老问题 ScriptControl
- 请教高手!!!!!急!!!!!
- 如果知道GIF图片存放的URL,在程序中能否浏览该图片?如何实现?
- 再次请教。如保做在第一列显示当前行号的tdbgrid控件。
- 我的delphi应用程序(ADO访问oracle),其.exe文件为什么在有的机子上可以运行,有的机子不行?都是用的win2000平台。
- 怎么样在Delphi6中设置DLL的断点调试?
- 多线程中调用dll的问题。
- ■■■如可实现在 ComboBox 文本框中录入信息,能自动模糊检索出items条目中功能■■■
http://blog.csdn.net/Dreamnest/archive/2005/08/24/463490.aspx
大概这个写法,copyrecordset
range('a').align=.....
我一般都是在EXCEL里面建立宏,然后在看宏代码
ADOQuery3.Close;
ADOQuery3.Open;
if ADOQuery3.RecordCount > 0 then
begin
with TDS2Excel.Create(TDataSet(ADOQuery3)) do
try
Save2File('c:\产品.xls', True);
finally
Free;
end;
ShowMessage('产品已经导出到C盘');
end;
end;
var
Sheet, xlQuery: OleVariant;
begin
...
xlQuery := Sheet.QueryTables.Add(ADOQuery1.Recordset, Sheet.Range['A3']);
//xlQuery.FieldNames := false;
xlQuery.Refresh;
...
end;当然速度最快的应该是直接写文件,只是MS没有公开Excel文件格式,估计也不会公开的:)
但是能不能COPY到粘贴板呢?
用SQL查询分析器查询的时候,我们可以直接对查询结果进行复制的。
那是不是也可以直接从DBGrid复制,怎么用程序实现?还有第二个问题怎么都没人帮忙解答?
var
y:integer;
tslist:TstringList;
s:string;
aSheet:variant;
begin
result:=true; ExcelApplication1.Connect;
ExcelApplication1.Visible[0]:=true;
ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);
aSheet:=ExcelApplication1.Worksheets.Item[1]; tslist:=TStringlist.Create; with adoquery1 do
begin
open;
first;
while not Eof do
begin
s:='';
for y:=0 to fieldcount-1 do
begin
s:=s+fields[y].AsString+char(9);
application.ProcessMessages;
end;
tslist.Add(s);
next;
end;
close;
end; Clipboard.AsText:=tslist.Text; tslist.Free; ExcelApplication1.Disconnect;
aSheet.paste;
result:=true;end;为了实验就没用try finally结构呵呵。
导出来数据结果是:
==========================================================
30308 ???è ·?????ê??± 30308 public
31389 ?£á? ·?????ê??± 31389 public
31677 ??áá ·???1¤3ìê| 31677 public
31834 ?×ì??? ·????÷1ü 31834 master
31835 ?×?·oì 2ù×÷1¤ 31835 public
31908 ??è? 2ù×÷1¤ 31908 public
31914 ?ì′oà× ·???1¤3ìê| 31914 public
31948 óà??D? ·???1¤3ìê| 31948 public
31955 ?a?÷ó¢ 2ù×÷1¤ 31955 public
32016 í????? áì°à 32016 public
32080 3??? ??DT?÷1ü 32080 master
32103 ·??2?? ·?????ê??± 32103 public
======================================================================
SQL数据库中正常的数据是:
30308 倪娜 分析技术员 30308 public NULL
31389 郑峥 分析技术员 31389 public NULL
31677 付亮 分析工程师 31677 public NULL
31834 孔条香 分析主管 31834 master NULL
31835 孔梅红 操作工 31835 public NULL
31908 孙蓉 操作工 31908 public NULL
31914 朱春雷 分析工程师 31914 public NULL
31948 余乾新 分析工程师 31948 public NULL
31955 吴明英 操作工 31955 public NULL
32016 汪文女 领班 32016 public NULL
32080 陈强 维修主管 32080 master NULL
不知道如何处理?请高手指教啊!
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'/*********** 导入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions