转电子表格怎么加标题?(50分)

  • 主题发起人 主题发起人 shandong2
  • 开始时间 开始时间
S

shandong2

Unregistered / Unconfirmed
GUEST, unregistred user!
找了个例子,只能把数据转到电子表格,哪位老大能把 DbGrid 中的汉字字段名也加入电子表格啊?谢谢了
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Excel2000, OleServer, Grids, DBGrids, DB, ADODB;

type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
Button1: TButton;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Procedure WriteData;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var empty:OleVariant;
begin
try
Excelapplication1.Connect;
except
MessageDlg('Excel可能没有安装', mtError, [mbOk], 0);
Abort;
end;

ExcelApplication1.Visible[0] := True;
try
empty := EmptyParam;
//添加一个新工作簿
ExcelApplication1.Workbooks.Add(empty,0);
//组件和工作簿连接
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[
ExcelApplication1.Workbooks.Count]);
//激活工作簿
ExcelWorkBook1.Activate ;
//组件和工作表连接
ExcelWorksheet1.ConnectTo((ExcelWorkbook1.Worksheets[1] as _WorkSheet));
//调用自定义函数将数据库中的数据保存到工作表中
WriteData;
except
ExcelWorkBook1.Close(xlDoNotSaveChanges);
ExcelApplication1.Disconnect;
end;
end;


//自定义函数用于从数据库中逐行的读取数据
//并写入当前工作表中
procedure TForm1.WriteData;
var Col:Char;
Row,j:integer;
R:String;
begin
with ADOTable1 do
begin
//从第一条记录开始
first;
Col := 'A'; //第一列为A
Row := 1; //从第一行开始
while not eof do
begin
//从数据库中每一行中逐个读取各个字段数值
for j :=0 to Fields.Count-1 do
begin
//指定范围
R := String(Col) + IntToStr(Row);
//将数据库中的数据写入Excel中
ExcelWorksheet1.Range[R,R].Value2 := Fields.Fields[j].Value ;
//得到下一列,依次为A、B、C……
Col := Chr(Ord(Col)+1);
end;
Inc(Row); //下一行
Col := 'A'; //重新指向第1列
Next; //下一条记录
end;
end;
end;
end.
 
直接写字段名呗:
for i:= 0 to dbgrid.datasource.dataset.fields.count -1 do
begin
ExcelWorkSheet1.Cells[2,i]:= dbgrid.datasource.dataset.fields.fieldname;
end;
 
我是菜鸟,试了几次,在 ExcelWorkSheet1.Cells[2,i]:= dbgrid.datasource.dataset.fields.fieldname;
有错误提示,
class does not have a default property
楼上的老大能帮我把你的代码加到上边的程序中吗?谢谢了
 
不好意思,应该是:
ExcelWorkSheet1.Cells.item[2,i]:= dbgrid.datasource.dataset.fields.fieldname;


//
with ADOTable1 do
begin
//加在这里试试:
ExcelWorkSheet1.Cells.item[1,i]:= dbgrid.datasource.dataset.fields.fieldname;
//从第一条记录开始
first;

Col := 'A'; //第一列为A
Row := 2; //从第一行开始,第一行为字段名
while not eof do
begin
//从数据库中每一行中逐个读取各个字段数值
for j :=0 to Fields.Count-1 do
begin
//指定范围
R := String(Col) + IntToStr(Row);
//将数据库中的数据写入Excel中
ExcelWorksheet1.Range[R,R].Value2 := Fields.Fields[j].Value ;
//得到下一列,依次为A、B、C……
Col := Chr(Ord(Col)+1);
end;
Inc(Row); //下一行
Col := 'A'; //重新指向第1列
Next; //下一条记录
end;
end;
 
谢谢老大,我再试试,送分了
 
后退
顶部