delphi7 报错 File not found 'dm.dcu'

月梦 2012-07-18 10:07:43
要导出DBGRID中数据为EXCEL。用下面方法操作,执行时报错:File not found 'dm.dcu'
在delphi中引入Excel:
“Project”——“Import Tpye Library”,在弹出的对话框中点击“Add”。找到你安装Excel的盘,,默认的安装路径:“C:\Program Files\Microsoft Office\OFFICE11”.安装的版本如果不同的话“OFFICE11”文件名会不一样。然后你可以找到“XL5CHS32.OLB”和“XL5EN32.OLB”文件。这两个文件你可以任选一个。XL5CHS32.OLB是中文版Excel,XL5EN32.OLB是英文版的Excel。选中后回到了Import Tpye Library对话框,在此对话框中选择“create unit”.这个新创建的单元会放在你当前文件存放的同一个目录下。记住不能删。
2、在你放按钮的窗体中添加一个ExcelApplication1控件,它放在Servers栏中。
3、继续上一步,在窗体的代码implementation部分添加如下代码:
uses dm,tools,Excel_TLB,comobj;
{$R *.dfm}

Function DetailToExcel(xl_file:string;grid:Tdbgrid;T1:string='';T2:string='';T3:string=''):integer;
var xlApp:Variant;
i,j:integer;
irow,icol:integer;
TitleLines:integer;
Titles:array [1..3] of string;
begin
if (not grid.DataSource.DataSet.Active) or (grid.DataSource.DataSet.RecordCount=0) then exit;

Try
xlapp:=createoleobject('Excel.application');
xlapp.workbooks.Add(-4167);
xlapp.visible:=true;
Except
showmessage('未安装Microsoft Excel 2000!请安装!');
exit
end;


//计算标题:
TitleLines:=0;
Titles[1]:=T1;
Titles[2]:=T2;
Titles[3]:=T3;

if T1<>'' then TitleLines:=1;
if T2<>'' then TitleLines:=2;
if T3<>'' then TitleLines:=3;

//填充列标题;
irow:=grid.DataSource.DataSet.RecordCount;
icol:=0;
for i:=0 to grid.Columns.Count-1 do
begin
if grid.Columns[i].Visible then
begin
inc(icol);
xlapp.cells[TitleLines+1,Icol]:=grid.Columns[i].Title.Caption;
end;
end;


//填充标题;
For i:=1 to TitleLines do
begin
xlapp.activesheet.cells[i,1]:=Titles[i];
xlapp.activesheet.range['A'+IntToStr(i)+':'+chr(64+icol)+IntToStr(i)].select;
xlapp.selection.HorizontalAlignment := xlCenter;
xlapp.selection.VerticalAlignment := xlCenter;
xlapp.selection.MergeCells := True;

if i=1 then
begin
xlapp.selection.RowHeight:=26;
xlapp.selection.Font.size:=18;
end
else
begin
xlapp.selection.RowHeight:=20;
xlapp.selection.Font.size:=12;
end;
end;

//设置表格线;
xlapp.activesheet.range['A'+IntTostr(TitleLines+1)+':'+chr(64+icol)+Inttostr(irow+TitleLines+1)].select;
xlapp.selection.Borders[xlEdgeBottom].linestyle:=xlContinuous;
xlapp.selection.Borders[xlEdgetop].linestyle:=xlContinuous;
xlapp.selection.Borders[xlEdgeright].linestyle:=xlContinuous;
xlapp.selection.Borders[xlEdgeLeft].linestyle:=xlContinuous;
xlapp.selection.Borders[xlInsideVertical].linestyle:=xlContinuous;
xlapp.selection.Borders[xlInsideHorizontal].linestyle:=xlContinuous;


//填充内容;
grid.DataSource.DataSet.First;
i:=TitleLines+2;
while not grid.DataSource.DataSet.Eof do
begin
icol:=0;
for j:=1 to grid.Columns.Count do
begin
if grid.Columns[j-1].Visible then
begin
inc(icol);
xlapp.cells[i,icol]:=grid.Columns[j-1].Field.DisplayText;
end;
end;
grid.DataSource.DataSet.Next;
inc(i);
end;


For i:=1 to icol do
begin
xlapp.activesheet.Columns[i].select;
xlapp.activesheet.Columns[i].EntireColumn.AutoFit;
end;

xlapp.activesheet.cells[1,1].select;

if xl_File<>'' then
xlapp.workbooks[1].SaveAs(xl_file);

result:=0;
end;
4、最后,按钮单击事件如下代码:
procedure TDayDutyForm.Button3Click(Sender: TObject);
begin
if DBGrid1.DataSource.DataSet.RecordCount=0 then
ShowMessage('没有内容!')
else
DetailToExcel(ExtractFilePath(application.ExeName)+'DayDuty.xls',DBgrid1,'日统计');
end;
...全文
466 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
看那山瞧那水 2012-07-18
  • 打赏
  • 举报
回复
d7不是本身就有Office组件吗?还要引入干嘛?
月梦 2012-07-18
  • 打赏
  • 举报
回复
我在DELPHI7 汉化包里找到个dm.dcu。。。在就没找到了。。这个能行么?把这个加到路径里,就又出现 File not found ‘tools.dcu’是不是我的DELPHI 安装的有问题?还是这些都是需要设的?tools.dcu没查到相关文件。。
haijiange1 2012-07-18
  • 打赏
  • 举报
回复
在Library path中Add dm.dcu文件的路径,或者你把文件拷贝到你之前有的路径中
xxfly 2012-07-18
  • 打赏
  • 举报
回复
先搜索dm.dcu所在位置,然后再在Library点添加dm.dcu所在的路径
月梦 2012-07-18
  • 打赏
  • 举报
回复
找不到dm.dcu这个文件呗,看一下路径是否对
====================================
初学DELPHI,这个真不会。。不知道从哪找,设路径从 TOOLS->ENVIRONMENT OPTIONS->Library 然后就不知道要怎么做了。
haijiange1 2012-07-18
  • 打赏
  • 举报
回复
找不到dm.dcu这个文件呗,看一下路径是否对
helloDX2012 2012-07-18
  • 打赏
  • 举报
回复
dm.pas不见了
月梦 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
d7不是本身就有Office组件吗?还要引入干嘛?
[/Quote]
将第一步引用去掉后可执行了,学习了。谢谢
月梦 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
d7不是本身就有Office组件吗?还要引入干嘛?
[/Quote]
上面的方法我也是按别人的做法学的,没弄明白就试用了。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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