请求各位帮忙!

AaronChengBJ 2001-02-25 07:03:00
我想请教一个问题.我在写一个自由报表程序.我想使用TOlecontainer控件,来调用我已经生成的excel文档.但我用Tolecontainer.savetofile(filename)方法后再打开该文件就变成乱码了,大家能帮我解释一下吗?(我用delphi中的Olectnrs demo程序也同样出想这个问题)
还有,如果我在程序中预先创建好一个olevariant对象,那么我可不可以把它关联到olecontainer上呢?
...全文
134 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AaronChengBJ 2001-03-05
  • 打赏
  • 举报
回复
好了,这个问题我已经解决了
AaronChengBJ 2001-02-28
  • 打赏
  • 举报
回复
谢谢各位了,因为这个程序中涉及到好多的用户自定义公式,而且最终用户需要的报表是 excel的,而且领导要求用户在预览数据时直接给出Excel格式最好潜在窗口了,因此小弟也是被夹在中间了,没有办法的办法才享乐这样一个结构
lazas 2001-02-27
  • 打赏
  • 举报
回复
为什么非要用OLE?给你一个事例:
procedure TForm1.Button1Click(Sender: TObject);
var
DBFPath: string;
I, J, K: Integer;
Temp: Excel97.Range;
begin
Button1.Enabled := False;
Button2.Enabled := False;
DBFPath := DirectoryListBox1.Directory;
ADOConnection1.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Connect Timeout=15;Extended Properties="Driver={Microsoft dBase VFP Driver (*.dbf)};UID=;' +
'SourceDB=' + DBFPath + ';SourceType=DBF;Exclusive=No;' +
'BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;";' +
'Locale Identifier=2052';
Cursor := crHourGlass;
try
ADOConnection1.Connected := True;

for I := 0 to FileListBox1.Items.Count - 1 do
begin
if ADOTable1.Active then ADOTable1.Close;
ADOTable1.TableName := FileListBox1.Items[I];
RxLabel1.Caption := '正在转换文件' + FileListBox1.Items[I] + '的数据...';
Application.ProcessMessages;
try
ADOTable1.Open;
ProgressBar1.Max := ADOTable1.RecordCount;
ProgressBar1.Position := 0;

Excelapplication1.Workbooks.Add(EmptyParam, 0);
K := 2;
Temp := Excelapplication1.ActiveCell;
for J := 0 to ADOTable1.FieldCount - 1 do
begin
Temp.Value := ADOTable1.Fields[J].Displaylabel;
Temp := Temp.Next;
end;

while not ADOTable1.Eof do
begin
ProgressBar1.Position := ProgressBar1.Position + 1;
Application.ProcessMessages;
Temp := Excelapplication1.Range['A'+IntToStr(K),'A'+IntToStr(K)];
for J := 0 to ADOTable1.FieldCount - 1 do
begin
Temp.Value := ADOTable1.Fields[J].AsString;
Temp := Temp.Next;
end;
ADOTable1.next;
Inc(K);
end;
ADOTable1.Close;
ExcelApplication1.ActiveWorkbook.SaveAs(ExtractFilePath(ParamStr(0)) + 'dbf\' + ADOTable1.TableName + '.xls', EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, xlExclusive , EmptyParam,
EmptyParam, EmptyParam, EmptyParam, 0);
Excelapplication1.Quit;
Excelapplication1.Disconnect;
except
Application.MessageBox(PChar('数据表' + ADOTable1.TableName + '转化出错!'), '华有德康', MB_OK);
end;
end;
Application.MessageBox('所有数据转化成功!', '华有德康', MB_OK);
finally
Cursor := crDefault;
Button1.Enabled := True;
Button2.Enabled := True;
ProgressBar1.Position := 0;
RxLabel1.Caption := '';
end;
J.Duke 2001-02-26
  • 打赏
  • 举报
回复
是把库文件的内容传到Excel吗?
可以用循环的方法把每条记录写入Excel中。
AaronChengBJ 2001-02-26
  • 打赏
  • 举报
回复
Tolecontainer有一个oleobject:variant属性,据说通过oleobject可以将ole容器中的ole对象作为变量来访问.当我使用如下语句:
olecontainer1.CreateObjectFromFile('E:\test.xls',false);
olecontainer1.oleobject.workbooks.add(...);
时触发EintfCasterror异常,错误信息为:Interface not supported,
请问,oleobject属性该怎样使用?
AaronChengBJ 2001-02-26
  • 打赏
  • 举报
回复
难道我非死不成了?
AaronChengBJ 2001-02-25
  • 打赏
  • 举报
回复
我可以再加100分!
AaronChengBJ 2001-02-25
  • 打赏
  • 举报
回复
我可以在加分的,言必行!

5,391

社区成员

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

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