如何将word读到treeview中形成树形结构(100分)

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

zhtq

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将word读到treeview中形成树形结构:
word的格式是:
〈一〉.......................
1,.................
2,......................
〈二〉....................
1,......................
2,...................
有点像目录,要在treeview显示成树形结构。能给个例子最好,分不够再加!谢谢!
 
刚学delphi那位大仙给点思路啊
 
关注中。。。。,我也想知道
 
关注中。。。。,我也想知道
 
首先是要确定word的格式问题,是不是固定的,通过什么确认树的结点层级?
 
我想是不是可以加标记比如:[]表示父层, [[]]表示子层,[[[]]]表示子层中的下层
 
word的格式是固定的,就是我所表示的那样,我想如果插标记的话,只需要读入“[]”到treeview中就可以知道它的层次。
 
时间紧张哦。呵呵,可以给你一个大概的思路,希望对你有帮助:

1.创建一个word对象.并打开想要的文件.
WdApp := CreateOleObject('Word.application');
WdApp.Documents.open(fn1);

2. 对文档的内容进行循环.
while not WdApp.ActiveDocument.Content.End do
begin

inc(j); //记数
//取段落内容
WdApp.ActiveDocument.Paragraphs.item(j).Range.select;
//回退一格,不把回车符选中
WdApp.Selection.MoveLeft(wdCharacter, 1, wdExtend);
strSel := WdApp.Selection.Text;
//选取的内容,这时候就可以判断标记了.

//-----------------------------
增加树节点.
//-----------------


end;

3.一些常用的方法.
//段落的选取,这些方法都可以在word的VBA帮助里面有查到的.
WdApp.ActiveDocument.Range(WdApp.ActiveDocument.Paragraphs.item(j).Range.Start, WdApp.ActiveDocument.Paragraphs.item(j).Range.End).select;
 
补充一下: Offices 的VBA帮助 对你做类似的程序很重要.
 
Showxy,谢谢你的帮助,我已经可以实现word打开,插入,保存,定位,但就是对你给的地第2点还是不太清楚,你能详细点嘛,感谢你了。
 
Showxy,插入标记已经可以实现,现在的关键是怎么判断标记,增加树结点?谢谢
 
呵呵,在上班,吃饭时间来一下;

strSel := WdApp.Selection.Text;
即可取到你想要的字符串,你可以对strsel进行判断.

遇到你的标记直接对树节点进行增加.节点的标题应该是你从word中取到的标题吧
最好自己写个函数 比如 AddTreeItem(strsel :string,aType :integer) 什么的
把取到的信息传进去.atype可以来确定你要增加树节点的级数.
 
Showxy,你能给个例子吗?这个地方我有点过不去,谢了!
 
晚上看看,是否有时间.呵呵。下午应该是没空的了。
 
Showxy,我在线等你啊,请你帮忙了,分好说
 
如果你不是要求必须打开已有Word文件,变成树形结构,建议每个结点对应一个Word文件,那样应该比较好操作吧,如果实在需要生成一个文件,你可以按着树结点编号合并成一个文件。
 
萧峒,谢谢你个回复
这个word已经打开了,树形结构的结点对应的是word中的内容。你有这方面的例子吗?
 
那位高手帮帮忙改一下,就差这步了,编译可以通过,但不能实现功能:
procedure TForm1.Button4Click(Sender: TObject);
var
findtext, matchcase, matchwholeword, matchwildcards, matchsoundslike,
matchallwordforms, forward, wrap, format, replacewith, replace: OleVariant;
str:string;
p,root:Ttreenode;
begin
if str='[' then
root:=Treeview1.Items.Add(nil,str)
else if str='[[' then
p:=Treeview1.Items.AddChild(root,str)
else if str='[[['then
Treeview1.Items.AddChild(p,str);
findtext :=str;
matchcase := false;
matchwholeword := false;
matchwildcards := false;
matchsoundslike := false;
matchallwordforms := false;
forward := true;
wrap:=wdFindStop;
format := false;
replacewith :='';
replace :=wdReplaceone;
WordObject.Application.ActiveDocument.Content.Find.Execute(findtext, matchcase, matchwholeword,
matchwildcards, matchsoundslike, matchallwordforms, forward,
wrap, format, replacewith, replace );

end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
788
DelphiTeacher的专栏
D
D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
658
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部