word是一个杂乱无章的东西,其中有很多解释性的文字,然后掺杂了一些表格,表格上面有一行稳致,说明下面的表格是什么规范,什么标准!
现在客户要求输入一个规范号,就可以提取出对应表格的内容来。读取word的所有表格的功能,我已经实现,不过不知道如何去获取表格上面一行的文字。(因为同时有很多种表格,有的表格是不需要的,它上面没有所谓的规范号。)   好像表格,也就是table对象,没有提供什么获得行号的方法,而且GetParagraphs返回的,也不象是行号,因为一旦插入表格的话,好像每一列,也成为了一行。搞不清楚! 不知道word提供的find方法,能不能获得对应文字所在的行号,以及是否能根据这个行号,来获得它下面一行的table对象。   恳请做过相关工作的高手给点指导和帮助!

解决方案 »

  1.   

    获取第3个表上面一行文字的宏:Sub xxx()
    ActiveDocument.Tables(3).Cell(1, 1).Select
    Selection.MoveUp
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    MsgBox Selection.Text
    End Sub
      

  2.   

    光标所在的行号:
    Selection.Information(wdFirstCharacterLineNumber)
      

  3.   

    第2个表格起始行:Sub xxx()
    ActiveDocument.Tables(2).Cell(1, 1).Select
    MsgBox Selection.Information(wdFirstCharacterLineNumber)
    End Sub
      

  4.   

    c1=table.Cell(1,1);
    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());
    只是会显示那一行的第一个字!
      

  5.   

    VBA 下上面运行没问题。
    没有VC环境,无法调试
      

  6.   

    用vc如何选择某一单独行!
     我用endkey和movedown都不好办,都没办法满足要求!
     看到vba上的选定某行文本,都没正确的转换成vc代码,因为vc中没有提供相应的函数或方法!
      

  7.   

    see http://support.microsoft.com/search/default.aspx?catalog=LCID%3D2052&spid=3251&query=word+mfc&adv=&mode=r&cat=False
      

  8.   

    我现在发现了,这不是vc的问题,就是vba也同样有这个问题,只要有多个表格,比如你要选中第三个表格上面的一行,你会发现,你输入27行,它很可能会选中到30行去,不知道为什么会有这种偏差!Const wdGoToLine = 3
    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行了,只有第一个表格上面的行,可以正确跳转——也就是说,多个表格,会干扰行的正确选中!