倾家荡产,word文档合并的问题(100分)

  • 主题发起人 主题发起人 xiaoren2000
  • 开始时间 开始时间
X

xiaoren2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一个试题库,数据库里blob字段存的是一个word文档,一道题就是一个word文档,
最后生成试卷时,要把每个word文档合并起来,请问有什么方法。我是倾家荡产,就这么多了
 
不是合并,而是添加到一个word文件中。
 
to linsb:
就是添加,请问大虾能否给个例子!!!
多谢。分就这么多了,等以后在加!!!!
 
没有你要的现成例子,可给你作一个,
功能:打开一个word文件,添加到另一个wod文件的后部。
循环调用,是不是就可完成你的要求。
提点建议:>一道题就是一个word文档,是不是浪费。
 
你这个问题=如何生成word文档,好像有例子的
 
to linsb:
不是一个题一个word文档,那怎么办。用户可能插入图片和公式。能给各具体的例子????
 
to dthl:
不是等于,而是把多个word文档合并到一个word文档
大虾你有这样的例子?????
 
不同题型采取不同策略。
 
to linsb:
大虾,我真是走投无路了,能不能给个例子呀,就是同一题型也有的有图片,有的没有。
这里先谢了
!!
 
两类题型一类是文本的另一类是有格式文件(可含有图片),分别处理。
如果都是word文件,题库可能很大,计算一下,如果10000道题,库么多大,而且都是对word
操作速度要慢的。
我这是多嘴了,影响你的思路。要改可能要花很多精力,仅供参考。
 
to linsb:
你说的对,文本的比较简单,有格式的怎么合并,能否给个例子?????
 
linsb:
能否在回答一下这个问题http://www.delphibbs.com/delphibbs/dispq.asp?lid=1137619
谢谢
 
其实你可以分别把blob的字段分别生成.doc文件(当然通过olecontainer来实现了)
然后按照我的方法处理就可以了。

Procedure BlobFld2OleSaveasdoc(var dataQuery:TQuery;fldName:String; Ole: TOleContainer);
var
OleStream:Tstream;
NameId: String;
begin
NameId := dataQuery.FieldByName('element_Id').asstring;
OleStream := dataQuery.CreateBlobStream(dataQuery.fieldbyName(fldName),bmRead);
if OleStream.Size >0 then
begin
OLE.LoadFromStream(OleStream);
Ole.SaveAsDocument(TempPath+NameId+'.doc');//TempPath 为.doc文件的路径
Ole.Close ;
OleStream.free;
end else
begin
Ole.CreateObject('word.document',false);
end;
end;
//========end保存为doc文件========//

FileListBox1.Directory := TempPath;
FileLIstbox1.Mask :='*.doc';
//Filelistbox1 用于取“.doc”文件
//========begin合并doc文件========//
TempFileName := extractfilepath(Application.ExeName)+'TempdocFile/Tempdoc.dot';
//tempdoc.dot用于存放合并的主文件
wordapplication1.Connect;
wordapplication1.Documents.Open(TempFileName,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);WordDocument1.ConnectTo(wordapplication1.Documents.Item(TempFileName));
WordDocument1.Select ;
WordDocument1.Range.Cut ;//清空.dot文件
for FileNameOrder := 0 to FileListBox1.Items.Count -1 do
begin
FromFileName := TempPath + FileListBox1.Items.Strings[FileNameOrder];
wordapplication1.Documents.Open(FromFileName,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);
WordDocument2.ConnectTo(wordapplication1.Documents.Item(FromFileName));
WordDocument2.Select ;
WordDocument2.Range.Copy;
WordDocument2.Close ;
WordDocument1.Paragraphs.Last.Range.Paste;
end;{for for FileNameOrder := 0 to FileListBox1.Items.Count -1}
Wordapplication1.Visible:=true;//结果显示。
//========end合并doc文件========//

 
to xiaoren2000
留下地址
 
to linsb:
chinacui@163.com
多谢!!!!!!!!!
 
寄去,查收,收到回信确认。
 
to xiao_wen:
非常感谢你,第一段代码好用,但是第二段代码不好用
wordapplication1.Documents.Open(TempFileName,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);WordDocument1.ConnectTo(wordapplication1.Documents.Item(TempFileName));
出错,能否看一下!!!!1
 
多人接受答案了。
 
对不起,最近一段时间我没有上网。所以。。。

出错的原因是可能你需要申明一下一个变量 olevariant的变量把emptyparam替换掉。

如 var emptyp : olevariant;
wordapplication1.Documents.Open(TempFileName,emptyp,emptyp,emptyp,emptyp,emptyp,emptyp,emptyp,emptyp,emptyp);
WordDocument1.ConnectTo(wordapplication1.Documents.Item(TempFileName));

这样的话就不会有错了。
 
后退
顶部