倾家荡产谢恩公!!!求教!!!如何可以将两个word文档合为一个文档?望不吝赐教。 (100分)

  • 主题发起人 主题发起人 ytwin
  • 开始时间 开始时间
Y

ytwin

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
小虾我现在用delphi做一个题库,现在该做数据输出。我对delphi还不是很了解
我用olecontainer嵌入word,将其中的内容输入table中的blob字段。我现在需要将table中几个记录的blob字段
合成一个流再输出到olecontainer中(或者是别的什么中)打印出来。请各位大虾告之如何
将几个blob字段的内容合成一个打印出来,小虾不胜感激。愿倾家荡产以报大德!!!
 
var
mystm,tmpstm:Tmemoystream;
...
TBlobField(table1.FieldByName('worddata')).SaveToStream(tmpstm);
把tmpstm加到mystm后
table1.next;
 
这样可以合并,但合出的是一个没法用的东西,可以试用worddocument控件通过
word的VBA方法复制文档,再粘贴到另一个文档中
 
//以下调用word,希望有所帮助
//...
Uses ComObj;
//...
var
WordApp:Variant;
begin
try
WordApp:= CreateOleObject('Word.Application');//创建Word对象
except
ShowMessage('程序无法打开Word,请安装Word97或Word97以上的版本!');
Exit;
end;
WordApp.Visible:=True;//可见
WordApp.WindowState:=1;//窗体最大化
WordApp.Documents.Open(ExtractFilePath(Application.ExeName)+'/Temp.doc');//打开模板文档
WordApp.WordBasic.EditBookMark('BM',0,0,0,1);//定位到word里的BM书签
WordApp.WordBasic.Insert('标题');//插入文本
WordApp.Free;
end;
 
这个问题我知道,我也做个题库,刚刚成功,还是开两个word文档,一个放问题,一个放答案的,
你把blob字段用相应的db控件显示出来,把db的visible设置文false,然后copytoclipbord,
在word种,worddocument.paragraph.getlastpaste;
这样就ok,你看看delphi关于word的帮助,这个问题我可是华了200分的,不给我$$不行哦,
哈哈,有问题找我啦,我今天刚把抽题做成功的!
 
zrj:
你好,非常感谢你的帮忙,我发现我和你做的题库很类似。我只是delphi新手,你又写的比较
简略,我调试了两天,都没成功,希望你能将抽题那一块的源代码给我,麻烦你了,多谢多谢。
(我还会加分的)!
 
hzbl:
你好,首先表示感谢。不知你是否有空,把两个流相加的源代码写下来,麻烦你了,我急用,
多谢。
 
wantlong:
你好,我是用olecontainer调用word的,不知是否有影响,你可否写的详细一些,麻烦你
了。
 
建议看看以前的帖子,有不少类似问题,不过似乎没有比较完美的答案:)
 
yth:
关于ole的我差不多全看过了,没有。我希望大虾你能拉小虾我一把。我真的急用。多谢!
 
//ytwin你好,现把我的源代码给你,希望有用
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtnrs, ExtCtrls, DBTables, Db, DBCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Doc_Ole: TOleContainer;
Button1: TButton;
Table1: TTable;
Button2: TButton;
OpenDialog1: TOpenDialog;
Button3: TButton;
StaticText1: TStaticText;
StaticText2: TStaticText;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button2Click(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
filename:string;
begin
OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC';
if OpenDialog1.Execute then
begin
filename:=OpenDialog1.FileName;
MyFile:=TFileStream.Create(fileName,fmOpenRead);
with table1 do
begin
Open;
edit;
Stream := TBlobStream.Create(FieldByName('Doc') as TBlobField, bmWrite);{‘Doc’为BLOB字段名}
MemSize := MyFile.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Seek(0, soFromBeginning);
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
FieldByName('Name').Asstring:=ExtractFileName(fileName);
FieldByName('Size').Asstring:=inttostr(MemSize-1);
statictext1.caption:='文件名:'+ExtractFileName(fileName);
statictext2.caption:='文件大小:'+inttostr(Memsize-1)+'字节';
finally
MyFile.Free;
Stream.Free;
end;
try
table1.Post;
except
showmessage('保存失败!');
halt;
end;
showmessage('保存成功,正在加载文档!');
Doc_ole.CreateObjectFromFile(fileName,False);
Doc_ole.Run;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
begin
MyFile:=TFileStream.Create('c:/temp.tmp',fmCreate);
with table1 do
begin
Open;
Stream:=TBlobStream.Create(FieldByName('Doc') as TBlobField, bmRead);
MemSize := Stream.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Read(Buffer^,MemSize);
MyFile.Write(Buffer^,MemSize);
statictext1.caption:='文件名:'+FieldByName('Name').Asstring;
statictext2.caption:='文件大小:'+FieldByName('Size').Asstring+'字节';
finally
MyFile.Free;
Stream.Free;
end;
end;
if FileExists('c:/temp.DOC') then
DeleteFile('c:/temp.DOC');
if FileExists('c:/temp.tmp') then
begin
RenameFile('c:/temp.tmp', 'c:/temp.DOC');
Doc_ole.CreateObjectFromFile('c:/temp.DOC',False);
Doc_ole.Run;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
doc_ole.CleanupInstance;
doc_Ole.Refresh;
statictext1.caption:='';
statictext2.caption:='';
end;
end.
 
我怎么没有看到合并文档的程序段呢?
 
把1.doc,2.doc,3.doc合并为4.doc

var WordApp: Variant;
begin
WordApp := CreateOleObject('Word.Application');
//wordapp.visible:=True;
WordApp.Documents.open('c:/1.doc');
WordApp.Selection.InsertFile('c:/2.doc','',False,false,false);
WordApp.Selection.InsertFile('c:/3.doc','',False,false,false);
WordApp.ActiveDocument.SaveAs('C:/4.doc');//,'wdFormatDocument',False,'',True,'',False,False,False,False,False);
WordApp.Quit;
end;
 
那如果我想用WORDAPPLICATION、WORDDOCUMENT等控件如何控制!
要设置插入到WORD中的文档的内容的字体、大小和缩进等该如何控制!
请赐教!
 
我做了合并Word文档的软件,需要和我联系。
Delphihelp@163.com
 
后退
顶部