请教各位数据库和Excel相互转换的问题即导入导出数据............(50分)

  • 主题发起人 主题发起人 hj6
  • 开始时间 开始时间
H

hj6

Unregistered / Unconfirmed
GUEST, unregistred user!
我把数据库的选择方式设置成可以多选,请问怎样能让我选择的多个记录导入到Excel文件
中去?反过来,怎样能把一个Excel文件里的被选中的数据导入到数据库中去?如果没有选
择的话,就把整个数据库文件导入到Excel中或把整个Excel导入到数据库文件中去。
以下这段源代码是在本论坛里看到的关于把Excel文件导入到Delphi的数据库中的,能编译
运行,但一执行“导入”,系统就提示:'method'workbook'not supported by automation
object'。请教大家给怎样修改完善它才能正常运行?谢谢!!!
procedure TForm1.Button1Click(Sender: TObject);
Var
vExcel,WorkBook:OLEVariant;
i:Integer;
begin
Try
vExcel:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleObject('Excel.Sheet');
Except
Application.MessageBox('Can not open Excel','',mb_OK+mb_IconStop);
Exit;
end;
vExcel.Visible:=True;
//If opendialog1.Execute then
//WorkBook:=vExcel.workbook.open(opendialog1.Files)
WorkBook:=vExcel.workbook.open(ExtractFileDir(Application.ExeName)+'/'+
edit1.text+'.xls');
For i:=3 to 9 do Begin
Table1.Append ;
Table1.FieldByName('Name').AsString:=WorkBook.WorkSheets[1].Cells[i,1].Value;
Table1.FieldByName('Type').AsString:=WorkBook.WorkSheets[1].Cells[i,2].Value;
end;
showmessage(WorkBook.WorkSheets[1].Cells[i,1].numberformat);
vExcel:=Unassigned;
end;
end.
谢谢大家!谢谢!!!最好有OpenDialog控件,便于打开文件。谢谢!!!
 
将WorkBook:=vExcel.workbook.open(...
改成
WorkBook:=vExcel.workbookS.open(...
即可
 
HTTP://WWW.ZDNET.COM.CN
有一篇利用ADO(OLE DB JET PROVIDER)读写EXCEL文件的文章非常好。
 
谢谢ug您的回答,运行问题已经解决,但是怎样保存并退出Excel呢?因为保存Save方法
只有.workbook才有。还有,arm您推荐的文章非常好,但是小弟用的是Delphi4+Win95,
所以,还不能用ADO组件。
下面有一篇文章是关于Delphi3和WORD7的,它说的方法我感觉非常的好,但苦于没有
这个环境,所以想请几位高手指点怎样能在Delphi4和WORD97下实现文章里所说的方法。
谢谢!!!当然如果您觉得50分解决这个问题有点儿少的话,我可以给您多加一些。麻烦
各位了。再次表示感谢。

用Word做Delphi报表输出工具
笔者在实际应用中发现,报表的内容一般很少变动,但其字体格式及版式是经常变动的,
而且有时用户为了某种需要,不想修改数据库的真实内容而又要改变报表内容。如果用
ReportSmith可以解决前者问题,但对于后者则无能为力了,且其界面是英文的,不合用
户习惯。如果用3.0中的TQReport的报表部件,则两者都不能实时解决,必须修改原代码
后重新编译才能使用。而使用Word及Excel则完全可以克服以上不足。具体实现如下
(以Word实现为例):

首先用Word编辑报表格式,并排好版,把将要输出的数据项用表单域代替,并取名。
这里我们暂时假设有表单域Item1及Item2(均为文本型),将这个文档存为模板文
件Example.dot,然后按如下步骤进行:

1)运行Delphi3,在Form1里加入一个System部件集里的TDdeClientCov部件,取名
为DdeExample,将其ConnectMode设为ddeManual(手动方式);将DdeService设为‘(WinWord)
’;将ServiceApplication设为‘WinWord’。

2)编写一个自定义过程,以激活Word,如下:
  procedure Tform1.WordActive(Cmds: TStrings);
  var
   WordPath: String;
  begin
   if(not DdeExample.OpenLink) then {判断是否巳动态链接}
   begin
  if(FindWindow('OpusApp', nil)=0) then
  begin
  WordPath := 'C:/msoffice/winword';
   if(WordPath='') then
  ShowMessage('中文Word未安装或未设置路径,请安装设
置Word中文 版。')
   else begin
  DdeExample.ServiceApplication :=
WordPath+'/Winword.exe';
  if(DdeExample.OpenLink) then {如果巳动态链接执行宏
命令}   

DdeExample.ExecuteMacroLines(Cmds,False)
  else
ShowMessage('无法启动Word中文版!');
  DdeExample.ServiceApplication := 'WinWord.exe';
  end;
   end
   else begin{如果巳动态链接执行宏命令}
   DdeExample.ExecuteMacroLines(Cmds,False);
   end;
   end
   else
   DdeExample.ExecuteMacroLines(Cmds,false);
  end;

  在private声明区里加入如下:
  procedure ActiveWord(Cmds: TStrings);

  3)在Form1中加入一个按钮Button1,在其onclick事件里写如下代码:
  procedure TForm1.Button1Click(Sender: TObject);
  var
  Cmds:TStringList;{创建Cmds}
  TempItem1,TempItem2:String;
  begin
  cmds:=TStringList.Create;
  cmds.Clear;
  TempItem1:='数据项一';
  TempItem2:='数据项二';
  with Cmds do
  begin
  Clear;
  Add('[FileNew.Template ="Example.Dot″]');
{打开模板文件Example.Dot}
  Add('[AppMaximize]');{文档最大化}

  Add('[SetFormResult"Item1″,″'+TempItem1+'″]');
{将数据TempItem1传给表单域Item1}

  Add('[SetFormResult"Item2″,″'+TempItem2+'″]);
{将数据TempItem2传给表单域Item2}
  end;
  WordActive(DdeExample,Cmds);{调用自定义过程}
  Cmds.Free;{释放Cmds}
  end;

运行这个程序,单击Button1,大家可以发现Word被启动了,屏幕上出现了:数据项一;
数据项二两个数据项。最后,大家可以任意修改本报表的格式及数据,因为这时这个报
表与具体的应用程序巳没有关系了。

本例中用的是中文Word6或中文Word7。由于Word97的宏命令巳变为Visual
Basic语句,如大家想用Word97实现,请将其宏命令改变为相应的代码。

这是个简单的示例,大家可以利用Word的宏录制功能,录取更多的宏(如自动生成表格、
填充文字、变动字体等宏命令),并与数据库的各种表联系起来,依次加入Cmds中即可实
现您所要求的更复杂的功能。

谢谢!!!

 
多人接受答案了。
 

Similar threads

后退
顶部