请问如何使用D5中的ExcelWorksheet(50分)

  • 主题发起人 主题发起人 aqi
  • 开始时间 开始时间
A

aqi

Unregistered / Unconfirmed
GUEST, unregistred user!
先进行如下操作后
ExcelApplication1.Connect; ExcelApplication1.Visible[0]:=True;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(null,0));
ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveCell.Worksheet);
使用ExcelWorksheet1无论进行
如何操作都出错,请高手指点
 
我自己回答拉
-------------------------------------------------------
利用Delphi 5中调用Excel 97
广东北电
董柏林
---- 在Delphi 5中简单地封装了一组Microsoft Office自动化对象(Automation servers)。它使得我们很容易地把Office中的应用程序(Word, Excel, PowerPoint, Outlook and Access等)当作一个com应用服务器进行控制。在Delphi 5中已经带了Word与PowerPoint的例子,因为Excel的调用与这两个应用服务器的调用略有不同,所以本人根据这两个例子写了个Excel 97的简单例子以供参考。

---- 步聚

创建一个普通Application。

在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。

连接Excel 97,具体方法如下:
打开Excel97。

Try
ExcelApplication1.Connect;
Except

End;
ExcelApplication1.Visible[0]:=True;

增加一个Workbook。

ExcelWorkbook1.ConnectTo(ExcelApplication1.
Workbooks.Add(EmptyParam,0));

添加一个Worksheet。
var
Temp_Worksheet: _WorkSheet;
begin
Try
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;//(注意)
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
Except
ShowMessage('Failure');
End;
end;
关闭Excel.

Try
ExcelApplication1.Quit;
ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;
Except

End;

---- 4. 对Excel的一些操作:
选择当前Workbook的某一Worksheet.

procedure TForm1.ComboBox1DropDown(Sender: TObject);
var
i: Integer;
begin
ComboBox1.Clear;
For i:=1 to ExcelWorkbook1.Worksheets.Count do
ComboBox1.Items.Add((ExcelWorkbook1.Worksheets.Item as _WorkSheet).Name);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets.Item[ComboBox1.ItemIndex+1] as _WorkSheet);
ExcelWorkSheet1.Activate;
end;

选择某一Workbook:
procedure TForm1.ComboBox2DropDown(Sender: TObject);
var
i: Integer;
begin
ComboBox2.Clear;
if ExcelApplication1.Workbooks.Count >0 then
For i:=1 to ExcelApplication1.Workbooks.Count do
Combobox2.Items.Add(ExcelApplication1.Workbooks.Item.Name);
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
ExcelWorkSheet1.Disconnect;
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[Combobox2.ItemIndex+1]);
ExcelWorkBook1.Activate;
ExcelWorksheet1.ConnectTo(ExcelWorkBook1.
ActiveSheet as _WorkSheet);
ExcelWorkSheet1.Activate;
end;

对某一单元格进行赋值及取值。
procedure TForm1.Button5Click(Sender: TObject);
begin
ExcelWorksheet1.Cells.Item[SpinEdit2.Value,
SpinEdit1.Value]:=Edit1.Text;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
Edit1.Text:=ExcelWorksheet1.Cells.Item[SpinEdit2.Value,SpinEdit1.Value];
end;

选择某一区域

ExcelWorkSheet1.Range['A1','C1'].Select;

打开一个Excel文件。

if OpenDialog1.Execute then
Begin
Try
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Open (OpenDialog1.FileName,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0));
ExcelWorkSheet1.ConnectTo
(ExcelWorkBook1.Activesheet
as _Worksheet);
Except;
End;
End;


---- 说明
---- 本程序在Win98+Delphi 5+Excel 97下运行通过。本例子还可以作适当的扩充,如DDE、执行宏调用、保存文件、打印文件及对Excel的设置等,此设置方法请参阅Microsoft Excel Visual Basic参考中的Microsoft Excel对象。
 
谁再跟个例子分数就给谁!!!!!!!!!
 
这是我以前写的一段代码,功能只是做个转换:
try
Result := true;
Template := EmptyParam;
TempTrue := true;
TempFalse := false;
ItemIndex := 1;
FileName := sFilepath + sFilename;
try
ExcelApplication.Connect;
except
ShowMessage('无法启动Excel。请检查是否已安装。');
end;
ExcelApplication.Visible[ItemIndex] := false;
ExcelApplication.Caption := Application.Title;
ExcelApplication.Workbooks.Open(Filename,Template,Template,Template,Template,
Template,Template,Template,Template,Template,Template,Template,Template,ItemIndex);
ExcelWorkbook.ConnectTo(ExcelApplication.Workbooks.Item[ItemIndex]);
try
ExcelWorkbook.SaveAs(Filename2, FileFormat,
Template,Template,Template,Template,
xlNoChange,xlLocalSessionChanges,Template,Template,Template,ItemIndex);
except
Raise;
end;
try
ExcelApplication.Quit;
ExcelApplication.Disconnect;
except
ShowMessage('....');
end;
except
on E: Exception do
ExcelApplication.Disconnect;
end;
 
与用COMOBJ VARIANT 相比 这套控件有什么好处吗?
操纵一个表 要那么多控件,有个variant变量 不是就
可以了吗?
 
to tuti:一点有没有,很不灵活!!!我上老当的!唯一的好处是:让人家觉得
“哦,有空件了,开用!”我一般这样用的:
var
Templete: Variant;
MsExcel:Variant;
MsExcelWorkBook:Variant;
i:integer;
begin
//Create OLE link
Showmessage('可能需要等待一些时间,按确定开始执行报表!');
Templete := ReadRpt + RPT_COMPACT1;
try
MsExcel:=CreateOleObject('Excel.Application.8');
MsExcelWorkBook:=MsExcel.WorkBooks.Add(Templete);
except
Showmessage('请先安装 Microsoft Excel 97 或更高版本。');
exit;
end;
Screen.Cursor := crHourGlass;
//ID
MsExcelWorkbook.ActiveSheet.Range['H3'].Value := AQCompactMain.Fields[0].AsString;
//Date
MsExcelWorkbook.ActiveSheet.Range['H4'].Value := AQCompactMain.Fields[2].AsString;
...
 
哈哈 还是CJ实惠
不过 当反复调用 EXCEL时
不用控件好象就要反复运行EXCEL,第二次稍微快点.
控件好象做过点处理,不过没用过... HEHE
但愿做过处理.:)
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
847
import
I
S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
后退
顶部