那位大虾有把dbgrid数据转换为Excel文件的代码???

yqbwork 2002-05-18 12:07:49
那位大虾有把dbgrid数据转换为Excel文件的代码???
...全文
61 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
nne998 2002-05-21
  • 打赏
  • 举报
回复
需要:
uses Excel2000, OleServer;
Billy_Chen28 2002-05-21
  • 打赏
  • 举报
回复
{导出到Excel中}
function TDBGridExport.Export_To_Excel: Boolean;
begin
if FDB_Grid = nil then
raise exception.Create('请输入DBGrid名称');

Result := False;
if Connect_Excel = True then
if New_Workbook = True then
if InsertData_To_Excel = True then
Result := True;
end;

function TDBGridExport.Export_To_Excel(DB_Grid: TDBGrid): Boolean;
begin
FDB_Grid := DB_Grid;
Result := Export_To_Excel;
end;
s_x_d 2002-05-21
  • 打赏
  • 举报
回复
to nne998(上上下下左右左右BABA)
你的方法不错啊!
camel_luo 2002-05-21
  • 打赏
  • 举报
回复
to :nne998(上上下下左右左右BABA)

如何定义xlGeneral等?
dreamyyuan 2002-05-21
  • 打赏
  • 举报
回复
关注
nne998 2002-05-21
  • 打赏
  • 举报
回复
上面这个函数跟“猪猪”的相比,还设置了格边框属性。
nne998 2002-05-21
  • 打赏
  • 举报
回复
上面这个函数跟“猪猪”的相比,还设置了格边框属性。
nne998 2002-05-21
  • 打赏
  • 举报
回复
procedure TForm1.DBGridtoExcel(title:string;datetime:string;DBGrid:TDBGrid);
var
e:variant;
i,j:integer;
x1,x2,y1,y2:integer;
rowcount,colcount:integer;
columnwidth:array of integer;
first,second,last:string;
begin
try
e:=CreateOleObject('Excel.Application');
e.workbooks.add();
e.visible:=true;
except
showmessage('ÄúµÄ¼ÆËã»úÖÐδ°²×°MicroSoft Excel');
exit;
end;
e.ActiveWindow.DisplayGridlines:=false;
//µÃµ½ÁÐÊý
colcount:=DBGrid.Columns.Count ;
setlength(columnwidth,colcount);
for i:=low(columnwidth) to high(columnwidth) do
columnwidth[i]:=0;

//Ìîд±êÌâ
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].HorizontalAlignment := xlGeneral;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].VerticalAlignment := xlBottom;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].WrapText := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Orientation := 0;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].AddIndent := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].ShrinkToFit := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].MergeCells := True;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].HorizontalAlignment := xlCenter;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].VerticalAlignment := xlBottom;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Name := 'ºÚÌå';
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Size := 16;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Strikethrough := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Superscript := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Subscript := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.OutlineFont := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Shadow := False;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Underline := xlUnderlineStyleNone;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.ColorIndex := xlAutomatic;
e.Workbooks[1].Sheets[1].Cells[2,1] := Title;
//Ìîд±¨±íµ¥Î»,ʱ¼ä
e.Workbooks[1].Sheets[1].Cells[4,1]:='±¨±íµ¥Î»:';
e.Workbooks[1].Sheets[1].Cells[4,4] :='±¨±íʱ¼ä:'+ DateTime;
//Ìîд±íÍ·
e.Workbooks[1].Sheets[1].Cells[5,1] :=DBGrid.Fields[0].DisplayName;
columnwidth[0]:=length(DBGrid.Fields[0].DisplayName);
for i:=2 to ColCount do
begin
e.Workbooks[1].Sheets[1].Cells[5,i] :=DBGrid.Fields[i-1].DisplayName;
columnwidth[i-1]:=length(DBGrid.Fields[i-1].DisplayName);
end;
//ÌîдÊý¾Ý
i:=1;
DBGrid.DataSource.DataSet.First ;
while not DBGrid.DataSource.DataSet.Eof do
begin
for j:=1 to ColCount do
begin
e.Workbooks[1].Sheets[1].Cells[5+i,j] := DBGrid.Fields[j-1].AsString;
if columnwidth[j-1]<length(DBGrid.Fields[j-1].AsString) then
columnwidth[j-1]:=length(DBGrid.Fields[j-1].AsString);
end;
DBGrid.DataSource.DataSet.Next;
i:=i+1;
end;
//µ÷ÕûexcelÁпí¶È
for i:=1 to colcount do
e.Workbooks[1].Sheets[1].Columns[i].ColumnWidth:=columnwidth[i-1];

y1:=5;
x1:=1;
y2:=8+DBGrid.DataSource.DataSet.RecordCount-1;
x2:=ColCount;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeTop].LineStyle := xlContinuous;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeTop].Weight := xlThin;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeTop].ColorIndex := xlAutomatic;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeBottom].LineStyle := xlContinuous;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeBottom].Weight := xlThin;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeBottom].ColorIndex := xlAutomatic;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeRight].LineStyle := xlContinuous;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeRight].Weight := xlThin;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeRight].ColorIndex := xlAutomatic;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeLeft].LineStyle := xlContinuous;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeLeft].Weight := xlThin;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeLeft].ColorIndex := xlAutomatic;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideVertical].LineStyle := xlContinuous;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideVertical].Weight := xlThin;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideVertical].ColorIndex := xlAutomatic;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideHorizontal].LineStyle := xlContinuous;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideHorizontal].Weight := xlThin;
e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideHorizontal].ColorIndex := xlAutomatic;

// e.visible:=true;

// excel.DisplayAlerts:=true;//Í˳öʱ²»Ìáʾ

// e.quit;


end;
wjsoft1 2002-05-21
  • 打赏
  • 举报
回复
用\t分割用\n分行,保存名称后缀为xls,即可为excel打开!
vjun 2002-05-21
  • 打赏
  • 举报
回复
现在编程序我只用DevelopExpress这一家的第三方控件,极力推荐啊!
vjun 2002-05-21
  • 打赏
  • 举报
回复
如果你使用Develop Express的DBGrid,就可以直接使用:

procedure SaveToXLS(const AFileName: string; ASaveAll: Boolean);

直接将内容保存到Excel表格了。

简直太简单了!
vjun 2002-05-21
  • 打赏
  • 举报
回复
如果你使用Develop Express的DBGrid,就可以直接使用:

procedure SaveToXLS(const AFileName: string; ASaveAll: Boolean);

直接将内容保存到Excel表格了。

简直太简单了!
yqbwork 2002-05-21
  • 打赏
  • 举报
回复
vernal(☆语※蓝★)(猪猪) 我试验以下没问题立即给分
vernal 2002-05-18
  • 打赏
  • 举报
回复
经常看到有人问如何把delphi中的数据集导入excel中,这里提供了一个实现。


在做项目时,很多情况下,客户需要对程序中数据集再加工,再利用,如报表。
这时,就需要把dataset导入到一个客户比较熟悉的格式中去。excel是首选了。

该程序在delphi4,5下编译通过,已被用在多个项目中。还被集成在笔者所写的一个小组件tdbnavigatebutton中



{-------------------------------------------------------------------------------------------------
单元:uexceltools
作者: bear
功能:保存数据集,如ttable,tquery,tclientdataset等为excel文件,
包含标题,可以只将一部分字段导出
这一点通过设置dataset中要不导出字段的tag值大于某一个值来处理
原理:调用 microsoft excel ole对象
调用方式:
function datasettoexcel(
dataset:tdataset;fieldtagmax:integer;
visible:boolean;excelfilename:string=''): boolean;
--------------------------------------------------------------------------------------------------}

unit uexceltools;

interface

uses
classes, comctrls, stdctrls, windows, dialogs, controls, sysutils,
db,forms,dbclient,comobj;

//把数据集导入excelsheet的核心函数
function datasettoexcelsheet
(
dataset :tdataset;
fieldtagmax :integer; // 字段的tag值如果大于这个值,就不导出到excel
sheet :olevariant
): boolean;

//实际使用的函数,内部调用了datasettoexcelsheet,在外面加入ui接口和错误处理
function datasettoexcel
(
dataset :tdataset; // 要转换的数据集
fieldtagmax :integer; // 字段的tag值如果大于这个值,就不导出到excel
visible :boolean; // 是否让做转换工作的excel可见
excelfilename:string='' // excel文件名,*.xls
): boolean;

implementation

function datasettoexcelsheet(dataset:tdataset;fieldtagmax:integer;sheet:olevariant): boolean;
var
row,col,fieldindex :integer;
bk:tbookmark;
begin
result := false;
if not dataset.active then exit;
bk:=dataset.getbookmark;
dataset.disablecontrols;

sheet.activate;
try

// 列标题
row:=1;
col:=1;
for fieldindex:=0 to dataset.fieldcount-1 do
begin
if dataset.fields[fieldindex].tag <= fieldtagmax then
begin
sheet.cells(row,col) :=dataset.fields[fieldindex].displaylabel;
inc(col);
end;
end;
// 表内容
dataset.first;
while not dataset.eof do
begin
row:=row+1;
col:=1;
for fieldindex:=0 to dataset.fieldcount-1 do
begin
if dataset.fields[fieldindex].tag <= fieldtagmax then
begin
sheet.cells(row,col):=dataset.fields[fieldindex].asstring;
inc(col);
end;
end;
dataset.next;
end;

result := true;
finally
dataset.gotobookmark(bk);
dataset.enablecontrols;
end;


end;
function datasettoexcel(
dataset:tdataset;fieldtagmax:integer;
visible:boolean;excelfilename:string=''): boolean;
var
excelobj, excel, workbook, sheet: olevariant;
oldcursor:tcursor;
savedialog:tsavedialog;
begin
result := false;
if not dataset.active then exit;

oldcursor:=screen.cursor;
screen.cursor:=crhourglass;

try
excelobj := createoleobject('excel.sheet');
excel := excelobj.application;
excel.visible := visible ;
workbook := excel.workbooks.add ;
sheet:= workbook.sheets[1];
except
messagebox(getactivewindow,'无法调用mircorsoft excel! '+chr(13)+chr(10)+
'请检查是否安装了mircorsoft excel。','提示',mb_ok+mb_iconinformation);
screen.cursor:=oldcursor;
exit;
end;

result:=datasettoexcelsheet(dataset,fieldtagmax,sheet) ;
if result then
if not visible then
begin
if excelfilename<>''
then workbook.saveas(filename:=excelfilename)
else begin
savedialog:=tsavedialog.create(nil);
savedialog.filter := 'microsoft excel 文件|*.xls';
result:=savedialog.execute;
updatewindow(getactivewindow);
if result then
workbook.saveas(filename:=savedialog.filename);
savedialog.free;
end;
excel.quit;
end;
screen.cursor:=oldcursor;
end;



end.
windindance 2002-05-18
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/724/724036.xml?temp=.0116846
No.21
将多行文本保存到单行
var
sl:TStringList;
sl:=TStringList.Create;
sl.Add('abc');
sl.Add('123');
ShowMessage(sl.CommaText); // 显示: abc,123
作用:
写INI文件时,需要保存一个字符串列表;
可以直接写入.csv文件
///
csv文件格式:
第一行:字段名
后面各行是表的内容
字段之间就是以逗号分割的。
使用该方法可以自己将数据保存为.csv文件,不需要处理复杂的Excel格式。(Excel可以直接处理.csv格式。)
///
del_c_sharp 2002-05-18
  • 打赏
  • 举报
回复
第一种方法很简单,试试吧!没问题!
del_c_sharp 2002-05-18
  • 打赏
  • 举报
回复
代码暂时没有,我帮你找找,不过有两种思路:
1、ado 可以直接连接excel,你只要将数据用ado 存到excel文件就行了
2、利用com,直接将数据一条一条写进去
两者应该都可以实现
yqbwork 2002-05-18
  • 打赏
  • 举报
回复
见到给分
耙子 2002-05-18
  • 打赏
  • 举报
回复
我常用formula one 6,它可以导出excel格式,而且可以制成模板,程序中动态填充。报表格式比较美观,提供函数。不依赖excel就可以用。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧