word是一个杂乱无章的东西,其中有很多解释性的文字,然后掺杂了一些表格,表格上面有一行稳致,说明下面的表格是什么规范,什么标准!
现在客户要求输入一个规范号,就可以提取出对应表格的内容来。读取word的所有表格的功能,我已经实现,不过不知道如何去获取表格上面一行的文字。(因为同时有很多种表格,有的表格是不需要的,它上面没有所谓的规范号。) 好像表格,也就是table对象,没有提供什么获得行号的方法,而且GetParagraphs返回的,也不象是行号,因为一旦插入表格的话,好像每一列,也成为了一行。搞不清楚! 不知道word提供的find方法,能不能获得对应文字所在的行号,以及是否能根据这个行号,来获得它下面一行的table对象。 恳请做过相关工作的高手给点指导和帮助!
现在客户要求输入一个规范号,就可以提取出对应表格的内容来。读取word的所有表格的功能,我已经实现,不过不知道如何去获取表格上面一行的文字。(因为同时有很多种表格,有的表格是不需要的,它上面没有所谓的规范号。) 好像表格,也就是table对象,没有提供什么获得行号的方法,而且GetParagraphs返回的,也不象是行号,因为一旦插入表格的话,好像每一列,也成为了一行。搞不清楚! 不知道word提供的find方法,能不能获得对应文字所在的行号,以及是否能根据这个行号,来获得它下面一行的table对象。 恳请做过相关工作的高手给点指导和帮助!
ActiveDocument.Tables(3).Cell(1, 1).Select
Selection.MoveUp
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
MsgBox Selection.Text
End Sub
Selection.Information(wdFirstCharacterLineNumber)
ActiveDocument.Tables(2).Cell(1, 1).Select
MsgBox Selection.Information(wdFirstCharacterLineNumber)
End Sub
c1.Select();VARIANT vInfo=sel.GetInformation(10L);
c1.ReleaseDispatch();
myppar=mypar.Item(vInfo.intVal);
int curtext_num=vInfo.intVal-1;
myrange=myppar.GetRange();
const int wdGoToLine=3;
const int wdGoToFirst=1;
const int wdGoToNext = 2;
const int wdLine = 5;
const int wdExtend = 1;
Range start_range=sel.GoTo(COleVariant((short)wdGoToLine),COleVariant((short)wdGoToFirst),COleVariant((short)(curtext_num)),COleVariant(_T("")));
sel.MoveUp(COleVariant((short)wdLine),COleVariant(short(1)),COleVariant(short(0)));
sel.EndKey(COleVariant((short)wdLine),COleVariant((short)wdExtend));
MessageBox(sel.GetText());这是我转成的vc代码,里面有几个问题,当有两个表格的时候,moveup并不会是刚好选中到第二个表格上的上一行文字,如果是操作第一个表格,则不会出现这种问题! 关键的问题就是,表格把每一列,也当成一行了!
如果改成这样的:
Range start_range=sel.GoTo(COleVariant((short)wdGoToLine),COleVariant((short)wdGoToFirst),COleVariant((short)(curtext_num)),COleVariant(_T("")));sel.EndKey(COleVariant((short)wdLine),COleVariant((short)wdExtend)); 它则会从那表格上一行文字开始,到本页结束都会被选中。根本就不是选中一行。 如果加一句:sel.MoveUp(COleVariant((short)wdLine),COleVariant(short(1)),COleVariant(short(0)));则又会选择表格很远的上面的一行,根本不是第二个表格上面的第一行!
如果光是
Range start_range=sel.GoTo(COleVariant((short)wdGoToLine),COleVariant((short)wdGoToFirst),COleVariant((short)(curtext_num)),COleVariant(_T("")));
则弹出MessageBox(sel.GetText());
只是会显示那一行的第一个字!
没有VC环境,无法调试
我用endkey和movedown都不好办,都没办法满足要求!
看到vba上的选定某行文本,都没正确的转换成vc代码,因为vc中没有提供相应的函数或方法!
Const wdGoToAbsolute = 1
const wdStory = 6
const wdMove = 0
const wdWord = 2const wdGoToFirst=1
const wdGoToNext = 2
const wdLine = 5
const wdExtend = 1Set objWord = CreateObject("Word.Application")
objWord.Visible = TrueSet objDoc = objWord.Documents.Open("C:\Test.doc",,TRUE)Set objSelection = objWord.Selection
objSelection.GoTo wdGoToLine, wdGoToAbsolute, 27
'objWord.Documents(1).Tables(3).Cell(1, 1).Select
'objSelection.MoveUp
'objSelection.EndKey wdLine, wdExtend
MsgBox objSelection.Text上面的代码,我发现它就没正确跳转到27行,而是跳到第30行了,只有第一个表格上面的行,可以正确跳转——也就是说,多个表格,会干扰行的正确选中!