如何使用 ExcelQueryTable 控件?(100分)

  • 主题发起人 主题发起人 JIBIN
  • 开始时间 开始时间
J

JIBIN

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现使用直接赋值得方法传递数据到Excel 时速度很慢, 古希望使用ExcelQueryTable
直接从数据库读取数据,不知有那位高手能指点迷经一二?
 
请结束或继续
 
那还不如用TTable呢
 
请结束或继续
 
ExcelQueryTable控件给我一份

 
我有要的话 给我写信
xianghonglin@wx88.net
 
尽量不要用excel
 
向红林你的邮件发不过去,只好通过大富翁给您发过去
 
我也想要,能给我一份吗?
anchive@263.net
 
用ExcelQueryTable必须在odbc 中设dsn

这是例子:
DSn为budget:
function Tauditdata.ToExcelFile(var Filename:OleVariant;SheetName:OleVariant;WIndowCaption:OleVariant;SqlStr:String):Boolean;
var
NewTemplate,ItemIndex:olevariant;
CurSheet:_WorkSheet;
connectStr:olevariant;
begin
NewTemplate:=emptyParam;
try
try
ExcelApp.Connect;
except
MessageDlg('您可能没有安装EXCEL', mtError, [mbOk], 0);
Abort;
end;
ExcelApp.visible[0]:=TRUE;
ExcelApp.Caption:=WindowCaption;
ExcelApp.Workbooks.Add(Newtemplate,0);
ExcelBook.ConnectTo(ExcelApp.workBooks.Item[1]);
ExcelBook.Title[0]:=WIndowCaption;
ExcelBook.Activate;
CurSheet:=ExcelBook.Sheets[1] as _worksheet;
CurSheet.Name:=SheetName;
connectstr := 'ODBC;DSN=budget;';
CurSheet.QueryTables.Add(connectstr,CurSheet.range['a3','e3'],SqlStr);
ExcelQueryTable.ConnectTo(CurSheet.QueryTables.Item(1));
ExcelQueryTable.Refresh;
except
on E: Exception do
begin
ItemIndex:=FALSE;
ExcelBook.Close(ItemIndex);
ExcelApp.Disconnect;
ExcelApp.Quit;
Application.MessageBox('数据输出到EXCEL过程出错,请检查EXCEL版本是否一致','警告',mb_ok);
exit;
end;
end;
ExcelQueryTable.Disconnect;
ExcelBook.Disconnect;
ExcelApp.Disconnect;
Result:=TRUE;
end;
 
使用Ehlib的DbGridEh+TXLSWrite,速度、效果都能让人看的过的。
var xlsW:TXLSWrite;
r,c:integer
begin
...create...
r:=0;
With DBGridEh,xlsW do
While not DataSource.Dataset do begin
for i:=0 to VisibleColumns.Count-1 do begin
Case VisibleColumns.Field.DataType of
ftInteger,ftLargeInt,ftWord:
WriteNumber(i,r,-1,VisibleColumns.Field.AsInteger);
ftCurrency, ftFloat:
WriteNumber(i,CurRow,4,VisibleColumns.Field.AsFloat);
ftString,ftMemo:
WriteString(i,r,-1,VisibleColumns.Field.AsString);
end;
DataSource.Dataset.next;
inc(r)
end
end;
写了个大概,具体还有每个单元格的格式,边框都可以设置,我觉得挺不错的。
 
为什么不用table
 
ADO直接操作Excel
 
后退
顶部