关于把数据库中的表导出为EXCEL文件,每次都是自动生成EXCEL文件,为什么不能写入指定的EXCEL文件? ( 积分: 100 )

  • 主题发起人 边城过客
  • 开始时间

边城过客

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用的是DELPHI+SQL2000,
把数据库中的表导出为EXCEL文件,每次都是自动生成EXCEL文件,为什么不能写入指定的EXCEL文件,我的源代码如下:
procedure TForm9.Printanjuan(dir:string);
var
nowhangi, jilushu, LCID: integer;
ExcelApp: TExcelApplication;
Excelbook: TExcelWorkbook;
ExcelSheet: TExcelWorksheet;
begin
LCID := LOCALE_USER_DEFAULT;
begin
try
ExcelApp := TExcelApplication.Create(Self);
Excelbook := TExcelWorkbook.Create(Self);
ExcelSheet := TExcelWorksheet.Create(Self);
except
showmessage('对不起,您没有安装Excel 2000!');
Exit;
end;
end;
ExcelApp.Connect;
ExcelApp.Workbooks.Add(null, 0);
Excelbook.ConnectTo(ExcelApp.Workbooks[1]);
ExcelSheet.ConnectTo(Excelbook.Sheets[3] as _WorkSheet);

with DM do
begin
if AQ_sbqktjb.RecordCount > 0 then
begin
nowhangi := 4;
for jilushu := 1 to (AQ_sbqktjb.RecordCount) do
begin
nowhangi := nowhangi + 1;
ExcelSheet.cells.Item[nowhangi, 1].RowHeight := 30;
ExcelSheet.cells.Item[nowhangi, 1].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 1] := AQ_sbqktjb.Fieldbyname('jgjb').AsString;

ExcelSheet.cells.Item[nowhangi, 2].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 2] := AQ_sbqktjb.Fieldbyname('yl').AsString;

ExcelSheet.cells.Item[nowhangi, 3].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 3] := AQ_sbqktjb.Fieldbyname('yl01').AsString;;

ExcelSheet.cells.Item[nowhangi, 4].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 4] := AQ_sbqktjb.Fieldbyname('sy').AsString;;

ExcelSheet.cells.Item[nowhangi, 5].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 5] := AQ_sbqktjb.Fieldbyname('gs').AsString;

ExcelSheet.cells.Item[nowhangi, 6].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 6] := AQ_sbqktjb.Fieldbyname('sy01').AsString;;

ExcelSheet.cells.Item[nowhangi, 7].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 7] := AQ_sbqktjb.Fieldbyname('gjj').AsString;;
AQ_sbqktjb.Next;
end;
end;
end;
with DM do
begin
AQ_sbqktjb.First;
end;
Excelbook.SaveCopyAs(dir);
ExcelApp.DisplayAlerts[LCID] := False;
ExcelApp.Quit;
ExcelSheet.Disconnect;
Excelbook.Disconnect;
ExcelApp.Disconnect;

FreeAndNil(Excelbook);
FreeAndNil(ExcelSheet);
FreeAndNil(ExcelApp);
end;

请高手们帮我看看, 怎么才能实现写入指定的EXCEL文件的SHEET中的具体行。
 
怎么不能写那,网上抄的巴,呵呵
uses comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
ExcelApp: Variant;
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
try
ExcelApp.Caption := '应用程序调用 Microsoft Excel';
ExcelApp.WorkBooks.Open( 'C:/Program Files/Borland/Delphi6/Projects/abc.xls' );
ExcelApp.WorkSheets[1].Activate;
ExcelApp.Cells[1,4].Value := '第一行第四列';
ShowMessage('over');
finally
ExcelApp.activeworkbook.save;
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
end;
end;

(一) 使用动态创建的方法

首先创建 Excel 对象,使用ComObj:
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;
 
那年黄梅花开:你的这资料对我的确很有用,但我按你的代码写入,也还是不行,我很菜的,要详细指点才行。
你最好能在我的源代码上帮我改改,行吗?
 
ExcelApp: TExcelApplication;
Excelbook: TExcelWorkbook;
ExcelSheet: TExcelWorksheet;
你用的都是delphi的servers下的office控件,
我上面说的都是ole方式访问excel的;
delphi方式的:
在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,EmptyP
 
7) 设置第2个工作表为活动工作表://OK
ExcelApplication1.WorkSheets[2].Activate; 或
ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;

8) 给单元格赋值://?????????
ExcelApplication1.Cells[1,4].Value := '第一行第四列';
改为:ExcelApplication1.Cells.ITEM[1,4].Value := '第一行第四列';


procedure TForm1.Button2Click(Sender: TObject);
begin
try
ExcelApplication1.Connect;
ExcelApplication1.Caption := '应用程序调用 Microsoft Excel'; //OK
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); //OK
ExcelApplication1.Workbooks.Open ('C:/Program Files/Borland/Delphi6/Projects/abc.xls',
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
ExcelApplication1.Cells.ITEM[3,4].Value := '第3行第四列';
ExcelApplication1.save;
showmessage('over');
finally
ExcelWorkbook1.Close;
ExcelApplication1.Quit;
end;
end;
 
我照你的这些相关资料,把我的源代码改了 一下,并没有写入我要的文件中,也还是生成了一个新的EXCEL文件,
procedure TForm9.Printanjuan(dir:string);
var
nowhangi, jilushu, LCID: integer;
ExcelApp: TExcelApplication;
Excelbook: TExcelWorkbook;
ExcelSheet: TExcelWorksheet;
begin
LCID := LOCALE_USER_DEFAULT;
begin
try
ExcelApp := TExcelApplication.Create(Self);
Excelbook := TExcelWorkbook.Create(Self);
ExcelSheet := TExcelWorksheet.Create(Self);
except
showmessage('对不起,您没有安装Excel 2000!');
Exit;
end;
end;
ExcelApp.Connect;
ExcelApp.Workbooks.Add(null, 0);
Excelbook.ConnectTo(ExcelApp.Workbooks[1]);
ExcelApp.Workbooks.Open ('D:/1.xls',
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
ExcelSheet.ConnectTo(Excelbook.Sheets[3] as _WorkSheet);

with DM do
begin
if AQ_sbqktjb.RecordCount > 0 then
begin
nowhangi := 4;
for jilushu := 1 to (AQ_sbqktjb.RecordCount) do
begin
nowhangi := nowhangi + 1;
ExcelSheet.cells.Item[nowhangi, 1].RowHeight := 20;
ExcelSheet.cells.Item[nowhangi, 1].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 1] := AQ_sbqktjb.Fieldbyname('jgjb').AsString;

ExcelSheet.cells.Item[nowhangi, 2].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 2] := AQ_sbqktjb.Fieldbyname('yl').AsString;

ExcelSheet.cells.Item[nowhangi, 3].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 3] := AQ_sbqktjb.Fieldbyname('yl01').AsString;;

ExcelSheet.cells.Item[nowhangi, 4].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 4] := AQ_sbqktjb.Fieldbyname('sy').AsString;;

ExcelSheet.cells.Item[nowhangi, 5].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 5] := AQ_sbqktjb.Fieldbyname('gs').AsString;

ExcelSheet.cells.Item[nowhangi, 6].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 6] := AQ_sbqktjb.Fieldbyname('sy01').AsString;;

ExcelSheet.cells.Item[nowhangi, 7].WrapText := True;
ExcelSheet.cells.Item[nowhangi, 7] := AQ_sbqktjb.Fieldbyname('gjj').AsString;;
AQ_sbqktjb.Next;
end;
end;
end;
with DM do
begin
AQ_sbqktjb.First;
end;
//Excelbook.SaveCopyAs(dir);
// ExcelApp.DisplayAlerts[LCID] := False;
ExcelApp.Quit;
ExcelSheet.Disconnect;
Excelbook.Disconnect;
ExcelApp.Disconnect;

FreeAndNil(Excelbook);
FreeAndNil(ExcelSheet);
FreeAndNil(ExcelApp);
end;
 
接受答案了.
 
顶部