用TOleContainer控件直接读,或者用流。
解决方案 »
- ADO操作ORACLE的BLOB字段的问题?急啊,请高手帮忙
- 密码验证的问题,帮忙看一下啊,。。。谢谢了
- 在Insert数据之后,有时可以insert,有时不可以Insert,出现ClientDateSet:Must Apply Updates Before Refreshing Date.
- 如何向窗体传递wm_EraseBkgnd消息!
- 打印时如何调整字间距
- 帮忙UP也送分!CORBA三层开发中,如何将smart agent (osagent)绑定呢?
- wise怎么打包ado?
- 在DELPHI中镶嵌汇编返回数组?
- Delphi能把已有的EXE文件包含到自己写的文件中吗??
- 各位,有做过“学校排课系统”的吗?
- 怎样令一个WEBBROWSER控件读一个MEMO或RICHEDIT中的文本HTML代码?
- 送分:怎样实现将SQL中的表导出到文本文件和如何恢复过来呢?加送100分!
var MSExcel:Variant;
begin
MSExcel:=CreateOLEObject('Excel.Application');
MSExcel.WorkBooks.Add;
MSExcel.Visible:=True; for i:=5 to Query1.RecordCount+4 do
begin
MsExcel.Cells[i,1].value:=Query1.FieldByName('cpxhno').Asstring;
MsExcel.Cells[i,2].value:=Query1.FieldByName('cpname').Asstring;
MsExcel.Cells[i,3].value:=Query1.FieldByName('cpunit').Asstring;
MsExcel.Cells[i,4].value:=Query1.FieldByName('htnumber').Asstring;
MsExcel.Cells[i,5].value:=Query1.FieldByName('number').Asstring;
MsExcel.Cells[i,6].value:=Query1.FieldByName('ljno').Asstring;
end;
end;退出Excel:
MSExcel.Quit;
MSExcel:=Unassigned; //释放VARIANT变
***************
先加入ExcelApplication1;ExcelWorkbook1;ExcelWorksheet1;
procedure TForm1.n1Click(Sender: TObject);
var
row,brea:integer;
a,b,c,d,e:shortstring;
begin
if table1.active = True then begin
try
ExcelApplication1.Connect;
Except
ExcelApplication1.free;
Abort;
end;
brea := strtoint(inputbox('输入需导入行数!','行数','10'));
if brea<1 then brea := 10;
ProgressBar1.Visible := True;
ProgressBar1.Max := brea;
ExcelApplication1.Visible[0] := true;
for row := 2 to brea do
begin
a := ExcelWorksheet1.Cells.Item[row,2];
b := ExcelWorksheet1.Cells.Item[row,1];
c := ExcelWorksheet1.Cells.Item[row,3];
d := ExcelWorksheet1.Cells.Item[row,4];
e := ExcelWorksheet1.Cells.Item[row,5];
form1.show;
table1.AppendRecord([a,b,c,d,e]);
ProgressBar1.Position := row-1;
end;
ProgressBar1.Hide;
end;
end;
*****************
var
MSExcel: Variant;
i: Integer;
begin
OpenDialog1.Filter:='*.XLS|*.XLS';
OpenDialog1.DefaultExt:='XLS';
if OpenDialog1.Execute then
begin
MSExcel:=CreateOLEObject('Excel.Application');
MSExcel.WorkBooks.Open(OpenDialog1.FileName);
MSExcel.Visible:=False;
//从有数据的行逐行读入数据
for i:=1 to MSExcel.ActiveSheet.UsedRange.Rows.Count do
begin
Edit2.Text:=Edit2.Text+MSExcel.Cells[i,1].Value;
end;
MSExcel.ActiveWorkBook.Close;
MSExcel.Quit;
end;
end;
不过用OLE的方法是不是EXCEL97和EXCEL2000汇不兼容
ADO通过什么来连接EXCEL,不会是ODBC吧!
你可否提供CONNECTIONSTRING?
里面有些函数和过程我都不贴了,相信你看得懂!procedure TPPms010.LoadExcelFile(FileName:string);
var
i,j: integer;
rows,cols:integer;
ExcelApp, WorkBook, WorkSheet : Variant;
strLst:Tstringlist;
begin
inherited;
cols:=41;
strLst:= TstringList.Create ;
try
ExcelApp := CreateOleObject('Excel.Application');
except
on E:EolesysError do
begin
DispErr(E.Message);
abort;
end
else
begin
DispErr('PPMS010-04 Could not Create Excel Application!');
abort;
end;
end;
try
try
ExcelApp.WorkBooks.Open(edtDir.text,,True);
WorkBook:=ExcelApp.ActiveWorkbook;
WorkSheet:=WorkBook.ActiveSheet;
except
DispInf('PPMS010-05 Can''t open file!', MB_OK + MB_ICONINFORMATION);
abort;
end;
dmppms010.QryAm_Allocation_head.Append ;
SetHeadValues;
rows:=GetSheetRows(WorkSheet);
PrgrsBar.Max:=rows;
PrgrsBar.step:=1;
PrgrsBar.Show;
for i:=1 to rows do
begin
strLst.Clear ;
for j:=1 to cols do
strLst.Add(string(WorkSheet.Cells[i,j]));
dmppms010.QryAm_Allocation_Line.Append;
SetLineValues(strLst,FileType);
PrgrsBar.StepIt ;
end;
finally
strLst.free;
WorkBook.Close;
ExcelApp.Quit;
ExcelApp:= unassigned;
PrgrsBar.Hide ;
end;
end;
connectstring:
Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=F:\Leewei\Books\Delphi5\Book3\ADODemos\Excel\forcast.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
用adotable,直接设置adotable.tabledirect:=true,就可以了。
或者在excel中选择所需数据设置一个名称作为一个表名。
有点疑问,我用你的方法
测试连接没有问题,但adotable.active:=true时,提示"sql的from子句出错"
我想可能是excel每一个表即为一个sheet,但sheet的名为sheet1$,sheet2$
这样会造成sql的语法出错:select * from sheet1$
我将excel的sheet1改为a,但还是有一个后缀a$
还是select * from a$,还是from子句出错
jianping0(ljp)的方法是正确的,你是用tadoquery还是tadotable.如果用tadotable的话看清jianping0(ljp)所请的adotable.tabledirect:=true了吗?还有的是在connectstring中的data source=path 路径写相对路径比较好这样就不怕路径出错了。 你试试吧,如有需要我邮你一份啦!:)
感谢say(),我的确没有注意到这点,
不过我用adoquery好像不可以
用adoquery也是没问题的.
我也试过用adoquery真的不行,提示from子句出错,请指教,多谢