简单点,能实现就行了!
解决方案 »
- 两个问题求解
- 用明华读卡器读写sl4442卡的问题!
- 在2000下开发的程序,在xp下运行时,form出现滚动条,如何使form象在2000下完全显示?
- 为什么DBGRID内容不能刷新?
- 菜鸟问题,正常的编译步骤是什么?
- sql问题
- DELPHI打包问题:BDE打包,进行安装,程序启动找不到BDE,手工设置BDE ,程序能够正常运行,不知何因?在线等待!.
- 关于windows消息, 在线等待!!!
- 请问哪里有Tgif控件下载??
- 在DELPHI5中利用ADO打开SQL SERVER 数据库中某一个TABLE出现"interface not supported' 错误信息, 是何原因?
- 难道是Delphi的问题,为什么无法更改DBGrid的列宽?
- 求“Delphi 5 开发人员指南” 一书
EXEC master..xp_cmdshell 'bcp DB.dbo.table 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
var
ExcelApp,WorkBook:Variant;
i,j,k:integer;
s:string;
SavePlace:TBook;
Range:Variant;
begin
with dblink.out_sp do
begin
filtered := false;
if recordcount>0 then
begin
ExcelApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleObject('Excel.Sheet'); workbook:=excelapp.workbooks.open(filename);
SavePlace:=nil;
try
SavePlace:=GetBook;
DisableControls;
First;
try ExcelApp.Worksheets.Add;
ExcelApp.ActiveSheet.name:='aaaaaaa';
//以下是重点
j:=2;
while not Eof do
begin
k:=0;
for i:=0 to Fields.Count-1 do
begin
s:=Fields.Fields[i].AsString;
ExcelApp.Cells(j,k+1) := s;
k:=k+1;
end;
j:=j+1;
Next;
end;
except
Application.MessageBox(PChar('写入Excel文件【'+FileName+'】出错!'),'提示',MB_OK+MB_ICONINFORMATION); end;
result:=True;
finally
EnableControls;
GotoBook(SavePlace);
FreeBook(SavePlace);
WorkBook.Close(true);
ExcelApp.Quit;
end;
end;
end;
能不能给点详细的代码?
这个编译时通不过,请问什么原因呢?
uses ...Comobj;
.
.
.
Implementation Procedure ExportToExcel;//从数据集导出到excel
var
excelapp1,sheet1:variant;
i:integer;
begin
try
excelapp1:=CreateOleObject('excel.application');
excelapp1.workbooks.add;
sheet1:=excelapp1.workbooks[1].worksheets[1];
query1.first;//query1为数据集
i:=1;
while not query1.eof do
begin
sheet1.cells[i,1]:=query1.fields[0].asstring;
sheet1.cells[i,2]:=query1.fields[1].asstring;
sheet1.cells[i,3]:=query1.fields[2].asstring;
query1.next;
inc(i);
end;
if SaveDialog1.execute then
excelapp1.workbooks[1].close(savedialog1.filename,true);//保存excel
excelapp1.quit;
except
excelapp1.quit;
end;
end; Procedure ExportToDb;//从excel导入到资料库
var
excelapp1,sheet1:variant;
i:integer;
sqlstr,col1,col2,col3:string;
begin
try
excelapp1:=CreateOleObject('excel.application');
if opendialog1.execute then
excelapp1.workbooks.open(opendialog1.filename);
sheet1:=excelapp1.workbooks[1].worksheets[1];
i:=1;
while i<=10 do
begin
col1:=sheet1.cells[i,1];
col2:=sheet1.cells[i,2];
col3:=sheet1.cells[i,3];
sqlstr:='insert into table1 values('''+col1+''','''+col2+''','''+col3+''')';
with query1 do
begin
close;
sql.clear;
sql.add(sqlstr);
execsql;
end;
inc(i);
end;
excelapp1.quit;
except
excelapp1.quit;
end;
end;
end.
以上绝对可行!
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。 1) 打开Excel
ExcelApplication1.Connect;2) 显示当前窗口:
ExcelApplication1.Visible[0]:=True;3) 更改 Excel 标题栏:
ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';4) 添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
5) 添加新工作表:
var Temp_Worksheet: _WorkSheet;
begin
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;
6) 打开已存在的工作簿:
ExcelApplication1.Workbooks.Open (c:\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)7) 设置第2个工作表为活动工作表:
ExcelApplication1.WorkSheets[2].Activate; 或
ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;8) 给单元格赋值:
ExcelApplication1.Cells[1,4].Value := '第一行第四列';9) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米11) 在第8行之前插入分页符:
ExcelApplication1.WorkSheets[1].Rows[8].PageBreak := 1;12) 在第8列之前删除分页符:
ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;13) 指定边框线宽度:
ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )14) 清除第一行第四列单元格公式:
ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;15) 设置第一行字体属性:
ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApplication1.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApplication1.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;16) 进行页面设置:
a.页眉:
ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;17) 拷贝操作:a.拷贝整个工作表:
ExcelApplication1.ActiveSheet.Used.Range.Copy;b.拷贝指定区域:
ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;c.从A1位置开始粘贴:
ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;d.从文件尾部开始粘贴:
ExcelApplication1.ActiveSheet.Range.PasteSpecial;18) 插入一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
b. ExcelApplication1.ActiveSheet.Columns[1].Insert;19) 删除一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
b. ExcelApplication1.ActiveSheet.Columns[1].Delete;20) 打印预览工作表:
ExcelApplication1.ActiveSheet.PrintPreview;21) 打印输出工作表:
ExcelApplication1.ActiveSheet.PrintOut;22) 工作表保存:
if not ExcelApplication1.ActiveWorkBook.Saved then
ExcelApplication1.ActiveSheet.PrintPreview;23) 工作表另存为:
ExcelApplication1.SaveAs( 'C:\Excel\Demo1.xls' );24) 放弃存盘:
ExcelApplication1.ActiveWorkBook.Saved := True;25) 关闭工作簿:
ExcelApplication1.WorkBooks.Close;26) 退出 Excel:
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );1) 显示当前窗口:
ExcelApp.Visible := True;2) 更改 Excel 标题栏:
ExcelApp.Caption := '应用程序调用 Microsoft Excel';3) 添加新工作簿:
ExcelApp.WorkBooks.Add;4) 打开已存在的工作簿:
ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );5) 设置第2个工作表为活动工作表:
ExcelApp.WorkSheets[2].Activate;
或
ExcelApp.WorksSheets[ 'Sheet2' ].Activate;6) 给单元格赋值:
ExcelApp.Cells[1,4].Value := '第一行第四列';7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米9) 在第8行之前插入分页符:
ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;10) 在第8列之前删除分页符:
ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;11) 指定边框线宽度:
ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )12) 清除第一行第四列单元格公式:
ExcelApp.ActiveSheet.Cells[1,4].ClearContents;13) 设置第一行字体属性:
ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;14) 进行页面设置:a.页眉:
ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;15) 拷贝操作:a.拷贝整个工作表:
ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApp.ActiveSheet.Range.PasteSpecial;16) 插入一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;17) 删除一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;18) 打印预览工作表:
ExcelApp.ActiveSheet.PrintPreview;19) 打印输出工作表:
ExcelApp.ActiveSheet.PrintOut;20) 工作表保存:
if not ExcelApp.ActiveWorkBook.Saved then
ExcelApp.ActiveSheet.PrintPreview;21) 工作表另存为:
ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );22) 放弃存盘:
ExcelApp.ActiveWorkBook.Saved := True;23) 关闭工作簿:
ExcelApp.WorkBooks.Close;24) 退出 Excel:
ExcelApp.Quit;
用你的方法在执行导入是出现这样的错误信息
"ADOQuery1:CommandText dose not return a returt set"
在导出时的问题就是执行完后,内存中的Excel没有释放!
请问怎么解决啊?
这个你检查检查ADOQuery1,应该是ADOQuery1的问题,没有返回数据集吧,绝对跟excel没关系
2.
在正常结束或捕作到异常退出时用
excelapp.quit;//退出exel
excelapp:=unassigned;//释放variant
excelapp1.workbooks[1].close(savedialog1.filename,true)是什么意思啊!?跟我解释一下好吗?
把导入导出打成SQL语句,传给sql server让他去执行就成
执行程序就知道了,就是保存excelapp1