在olecontainer中遇到的问题,无法取出文档中的数据(100分)

  • 主题发起人 主题发起人 li_tj
  • 开始时间 开始时间
L

li_tj

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在OleContainer中读入一个Excel文件,
然后将第二列的各列标题读出显示在
Checklistbox中,但是变量Title值始终
为空,不知是为什么?
源代码如下:

procedure Tfrm_openfile.showfile(filename:String);
var
i : Integer;
title : String;
begin
try
if not assigned(OleContainer) then
begin
olecontainer := Tolecontainer.Create(self);
OleCOntainer.Parent := ScrollBox1;
OleContainer.Align := alClient;
end;
olecontainer.CreateLinkToFile(filename,false);
olecontainer.DoVerb(ovShow);
Cur_WorkBook:=OleContainer.oleObject.Application.Workbooks.Item[1];
Cur_WorkSheet:=Cur_WorkBook.WorkSheets[1];
except
application.MessageBox('所需文档无法打开!请确定已安装合适软件!','提示'
,MB_ICONERROR);
fileisshow := false;
exit;
end;

if (Pos('xls',filename) <> 0) or (Pos('xlt',filename) <> 0) then
begin
for i := 0 to 20 do
begin
title := cur_worksheet.range[chr(ord('A')+i)+'2'].value;
if title <> '' then
list_excel.Items.Add(title)
else
break;
end;
end;
FileIsShow := True;
end;

不好意思,发在"非技术问题"了.现在重发一遍.
 
看不出毛病来,在 取 title 值前先用 showMessage 看一下值是多少
 
crab:

用showmessage看过了,确实是什么字符也没取出来。
 
li_tj:
用了一个上午,终于帮你搞点了。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Excel97, OleServer, OleCtnrs;

type
Tfrm = class(TForm)
s1: TExcelWorksheet;
b1: TExcelWorkbook;
e1: TExcelApplication;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
o1: TOleContainer;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frm: Tfrm;

implementation

{$R *.DFM}

procedure Tfrm.Button1Click(Sender: TObject);
var i:integer;
s:string;
begin
e1.connect;
e1.Visible[0]:=true;
e1.Workbooks.Open('c:/windows/desktop/asd.xls',
null,null,null,null,null,null,null,null,null,null,null,null,0);

b1.ConnectTo(e1.Workbooks[1]);
i:=b1.Worksheets.Count;
s1.ConnectTo(b1.Worksheets[1] as _worksheet);
for i:=1 to 5 do begin
s:=s1.Cells.Item[2,i+1];
listbox1.items.Add(s);
end;
// caption:=s;
// caption:=inttostr(i);
// ExcelWorksheet1.Cells.Item[recordno,idx+1]:=Table.Fields[idx].AsString;
end;

procedure Tfrm.Button2Click(Sender: TObject);
begin
b1.Disconnect;
e1.Disconnect;

end;

procedure Tfrm.Button3Click(Sender: TObject);
var s1:variant;i:integer;s:string;
begin
o1.CreateObjectFromFile('c:/windows/desktop/asd.xls',false);
o1.DoVerb(0);
s1 := o1.OleObject.Application.WorkBooks.Item[1].worksheets[1];
for i:=1 to 5 do begin
s:=s1.cells[2,i+1];
listbox1.items.add(s);
end;


end;

end.

先借用server的语法校验的出vba代码,然后使用ole就非常顺手了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部