急,如何实现Word表格的合并? 195分(倾吾所有)(195分)

  • 主题发起人 主题发起人 zeroes
  • 开始时间 开始时间
Z

zeroes

Unregistered / Unconfirmed
GUEST, unregistred user!
我有许多只含1个表格的Word文档,现在需要将这些表格合并为一个整表,这些表格
文档均事先指定了特殊的名称,如“表I-1”字样以便同其它表格区分开来,合并后的表
格中间不能有分隔。
急盼各位指点一二,采用Delphi的Servers组件或用Ole接口方式均可!
联系: zeroes@sina.com
 
下面是合并1.doc,2.doc,3.doc为4.doc的代码。

uses ComObj;

var WordApp: Variant;
begin
WordApp := CreateOleObject('Word.Application');
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;
OleContainer1.CreateObjectFromFile('c:/4.doc',true);
 
各分表的行、列数。及宽度都一样吗?
 
To linsb:
各分表的行、列数。及宽度假定都一样,我想事先通过判断表的名称,如“表I-1”字样
来同其它表格区分开来。
 
分别读入各分表到StringGrid,由它转成word表格。
 
To linsb:
能否进一步明示
 
你的各word文档的具体情况不明,无法明示。
 
To mlzhou:
假定各表均事先约定为5列5行
我运行了上述代码,但是和并后的2.doc表格,3.doc表格全部进入了1.doc表格的左上
方第1格中,如何控制其先后顺序及表格排列位置?
 
To linsb:
能否提供联系邮箱?
 
linsb3031@0451.com
 
以下是我的部分程序,还不能正常运行,请各位帮我改改!
。。。。。。
var
Form1: TForm1;
MyWord:Variant; //定义Variant类型的全局变量MyWord
I:Integer;
implementation

uses
ComObj; //声明将调用CreateOleObject函数

{$R *.dfm}
。。。。。。
//点击“合并表格”按钮
procedure TForm1.Button7Click(Sender: TObject);
var
S:String;
begin
MyWord:=CreateOleObject('Word.Basic'); //调用OLE的Word.Basic接口启动Word程序
S:=FileListBox1.FileName;
S:=UpperCase(S); //大写字母S
if S='' then //如果文件名为空
begin
MyWord.FileOpen(FileListBox1.FileName); //打开FileListBox1列表框中的某个文档
MyWord.EditFind('表I-1',,0,0,False,0,0); //查找文档中是否包含“表I-1”的名称
//如果查找操作不成功
if not MyWord.EditFindFound then
begin
ShowMessage('此文挡中没有需汇总的I-1表格,请另外选定文档!');
MyWord.AppClose; //关闭MSWord程序
exit; //退出
end;
//如果查找到在“我的文档”中存在文件new1.doc
if MyWord.EditFindFound And FileExists('C:/My Documents/new1.doc') then
begin
MyWord.LineDown; //把插入点往下移动1行
MyWord.TableDeleteRow; //删除表格中含插入点的行
MyWord.LineDown;
MyWord.TableDeleteRow;
MyWord.LineDown;
MyWord.TableSelectTable; //选定含插入点的整个表格
MyWord.EditCopy; //将选定内容复制到剪贴板上

MyWord.FileOpen('C:/My Documents/new1.doc'); //打开new1.doc文档
MyWord.EndOfDocument; //将插入点移动到文档结尾
MyWord.EditPaste; //将剪贴板内容粘贴到插入点
MyWord.FileSaveAs('new1.doc'); //保存活动文档名为new1.doc
I:=I+1;
Label1.Caption:='您已经输入合并'+IntToStr(i)+'张I-1表格!';
end;

MyWord.FileExit[2]; //退出MyWord程序,退出时不再保存修改过的文档
end;

end;

。。。。。。
To linsb;
我将发送源码给你,请多多指点!
 
修改后已寄给你,查收,以后一个为准。
 
我有一个想法:
让程序先自动新建1个空文档New1.doc,依次将1.doc,2.doc,3.doc表格用InsertFile
插入该文档后,再保存该合并表格,不知是否可行?
 
楼上:
有可能可以,但表格名字应该一样,这样word可能自动合并!!
我用标签时。两个标签名字一样,word文件合并时,标签就合并了!!!
 
To linsb:
已初步实现表格合并,但是合并后的各表格之间均有2行空格断开,要想办法去掉。
附部分源码如下:
。。。。。。
if S<>'' then //如果文件名不为空
begin
MyWord.FileOpen(FileListBox1.FileName); //打开FileListBox1列表框中的某个文档
MyWord.AppShow; //使用OLE接口的AppShow方法显示Word程序

fname:=ExtractFiledir(Application.ExeName)+'/';
//showmessage(fname);
//如果查找到在“我的文档”中存在文件new1.doc
if FileExists(fname+'new1.doc') then // MyWord.EditFindFound And
begin
MyWord.TableSelectTable; //选定含插入点的整个表格
MyWord.EditCopy; //将选定内容复制到剪贴板上
MyWord.FileOpen(fname+'New1.doc'); //打开new1.doc文档

MyWord.EndOfDocument; //将插入点移动到文档结尾
MyWord.TableInsertTable; //插入空表格
MyWord.EditPaste; //将剪贴板内容粘贴到插入点
MyWord.FileSaveAs(fname+'New1.doc'); //保存活动文档名为new1.doc
I:=I+1;
Label1.Caption:='您已经合并了'+IntToStr(i)
+'张表格,请查看New1.doc文档!';
end;
MyWord.FileExit[2]; //退出MyWord程序,退出时不再保存修改过的文档
end;
end;
。。。。。。
回复等待中!
 
在我这没问题!,看我给你寄去的new2.doc文件,那是在我这合并的文件。
 
To linsb:
在合并后的new2.doc文档中,原“表I-1”的内容由5行变成了3行,也就是说合并后的
表格内容有变动,其原因正是由于下列语句引起:
MyWord.LineDown; //把插入点往下移动1行
MyWord.TableDeleteRow; //删除表格中含插入点的行
MyWord.LineDown;
MyWord.TableDeleteRow;
MyWord.LineDown;
我想只删除new2.doc末尾的两行空格行!这一点在多合并几个表格后尤为明显。
 
>>原“表I-1”的内容由5行变成了3行,也就是说合并后的表格内容有变动
我发现了这一问题,但不了解你的用意,故没做改动。
删除:
MyWord.LineDown; //把插入点往下移动1行
MyWord.TableDeleteRow; //删除表格中含插入点的行
MyWord.LineDown;
MyWord.TableDeleteRow;
MyWord.LineDown;
结果为:
GF HG HG HGG GH
GFHGF HJKHJ HJKHJK HJKHJK KGHJKF
SDFDG TUU TYUTYU TYUTYU TYUT
SGDFHFG YUTTU YUTYU TYUTYU YUTU
HFDGHJDH YTUT TYUTYU YTUTYU YTUTY
1 2 3 4 5
123 123 123 123 123
ertret erterte dgfhgfh gfhfdh gfhfgh
retert erteryt fghfdh dhgdgfh fghfgh
ertet rhgdh hgfhgfh gfhfgh hgfdh
123 123 123 123 123
注:表格线无法显示。

 
合并后的表New2.doc结果为:
GF HG HG HGG GH
GFHGF HJKHJ HJKHJK HJKHJK KGHJKF
SDFDG TUU TYUTYU TYUTYU TYUT
SGDFHFG YUTTU YUTYU TYUTYU YUTU
HFDGHJDH YTUT TYUTYU YTUTYU YTUTY
1 2 3 4 5
123 123 123 123 123 * 3个星号表示原“表I-1”的内容由5行变成了3行
retert erteryt fghfdh dhgdgfh fghfgh *
123 123 123 123 123 *
- - - - - - - - - - - - - - - - - - - - - - - - - - 2条虚线表示new2.doc末尾的两行空格行
- - - - - - - - - - - - - - - - - - - - - - - - - -
另外:我的程序中已去掉了上述5条删除代码行。
 

Similar threads

回复
0
查看
861
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部