愿出200大洋求解ole及word问题 (我要哭出来了) (100分)

  • 主题发起人 主题发起人 wazym
  • 开始时间 开始时间
W

wazym

Unregistered / Unconfirmed
GUEST, unregistred user!
wordapp.Documents.Item(1).Saveas以后,调用另存为的文件,系统提示无法打开。
将我的一段代码帖出,并请高手帮忙:
procedure TWD_SC.FormCreate(Sender: TObject);
begin
if FileExists(form1.sydzwd.AsString) then
begin
OleContainer1.CreateObjectFromFile(form1.sydzwd.AsString,false);
rztoolbutton1.Caption:='重新生成文档';
end
else rztoolbutton1.Caption:='生成文档';

end;


procedure TWD_SC.RzToolButton1Click(Sender: TObject);
var wordapp:Variant;
begin
if RzSaveDialog1.Execute=true then
begin
if FileExists(RzSaveDialog1.FileName)=true then if application.MessageBox(pchar('文件'+RzSaveDialog1.FileName+'已经存在,是否覆盖?'),'',33)=2 then exit;
end;
RzStatusPane1.Caption:='正在打开模板文件......';
RzStatusPane1.Refresh;
wordapp:=CreateOLEObject('Word.Application');
wordapp.visible:=true;
wordapp.documents.add('wdmb/xssy.doc',False);
RzStatusPane1.Caption:='正在生成铭牌文挡......';
RzStatusPane1.Refresh;
wordapp.Documents.Item(1).Bookmarks.Item('mp_xh').Range.InsertAfter(form1.syxh.AsString);
wordapp.Documents.Item(1).Bookmarks.Item('mp_xh1').Range.InsertAfter(form1.syxh.AsString);
RzStatusPane1.Caption:='正在写入文档'+RzSaveDialog1.FileName+' 生成铭牌文挡......';
RzStatusPane1.Refresh;
wordapp.Documents.Item(1).Saveas(RzSaveDialog1.FileName);
WORDAPP.quit;
RzStatusPane1.Caption:='正在调入文挡......';
RzStatusPane1.Refresh;
OleContainer1.LoadFromFile(RzSaveDialog1.FileName);

//此处提示 cann't open file 文件名(RzSaveDialog1.FileName),请求解答。

RzStatusPane1.Caption:='文挡生成结束.';
end;

 
我这里有一段代码,你要吗?是写入到excel的。word应该差不多的
 
谢谢请你帖出来
 
这是excel的 ,word 类似的 。

uses comobj...
.....
.....
var
eclapp,workbook:variant;
xlsfilename:string;
inti,intj:integer;
begin
if StringGrid.RowCount <=1 then
exit;

if not SaveDialog.Execute then
exit;
xlsfilename:=SaveDialog.FileName;

try
eclapp:=createoleobject('excel.application');
workbook:=createoleobject('excel.sheet');
except
messagebox(handle,'你的计算机没装有Excel !','提示',MB_OK+MB_ICONINFORMAT
ION);
exit;
end;

try
workbook:=eclapp.workbooks.add;

for inti:=0 to StringGrid.RowCount -1 do
begin
//当然你可以用循环,你自己看着办。也可以不用stringgrid.主要是给你参考的
eclapp.cells(inti+1,1):=StringGrid.Cells[0,inti];
eclapp.cells(inti+1,2):=StringGrid.Cells[1,inti];
eclapp.cells(inti+1,3):=StringGrid.Cells[2,inti];
eclapp.cells(inti+1,4):=StringGrid.Cells[3,inti];
eclapp.cells(inti+1,5):=StringGrid.Cells[4,inti];
eclapp.cells(inti+1,6):=StringGrid.Cells[5,inti];
eclapp.cells(inti+1,7):=StringGrid.Cells[6,inti];
eclapp.cells(inti+1,8):=StringGrid.Cells[7,inti];
eclapp.cells(inti+1,9):=StringGrid.Cells[8,inti];
eclapp.cells(inti+1,10):=StringGrid.Cells[9,inti];
eclapp.cells(inti+1,11):=StringGrid.Cells[10,inti];
eclapp.cells(inti+1,12):=StringGrid.Cells[11,inti];
eclapp.cells(inti+1,13):=StringGrid.Cells[12,inti];
eclapp.cells(inti+1,14):=StringGrid.Cells[13,inti];
eclapp.cells(inti+1,15):=StringGrid.Cells[14,inti];
eclapp.cells(inti+1,16):=StringGrid.Cells[15,inti];
end;
workbook.saveas(xlsfilename);
workbook.close;
except
eclapp.quit;
exit;
end;
 
你的代码对我没有帮助,提示不能打开文件依然存在,但是文件确实已经生成了。
 
1 你确认保存的文件已经生成?是否可以用Word正确打开?我想应该可以.

2 你的代码在我看来很完美,不存在问题,你的OleContainer不能打开正确的Word文件
可能是因为你的Word安装有问题,OleContainer无法检索到正确的CSLID

3 或者你尝试在OleContainer LoadFromFile 之前调用 CoInitialize(nil); ,之后调
用 CoUnitialize 试试 (这些其实不必要,除非在线程里面调用)

4 最后试试写一段最简单的测试代码实现你的功能看看
 

OleContainer1.LoadFromFile(RzSaveDialog1.FileName);
改为
OleContainer1.CreateObjectFromFile(RzSaveDialog1.FileName, false);

就行了
 
http://jjb.swaysoft.com/DocContent.asp?id=4
 
文件格式不一致导致错误。
LoadFromFile 须与 SaveToFile 相对应,亦即二者的文件格式必须一致。你保存时采用Word格式,但装入时 OleContainer 无法识别,必须采用 CreateObjectFromFile。
 
是不是你的程序执行速度太快,文件生成后,windows没有刷新过来,所以找不到文件,
你不妨加一个sleep之类的延时试一下,或许可以解决。
 
后退
顶部