2017-01-09 9 views
-1

10個のテーブルを含むWord文書があります。これらのテーブルの値を読み取るときは、5ページの表4をチェックするようにオペレーターに警告したいと考えています。 テーブル番号は取得できますが、そのページがどのページにあるかを示す方法はありますか?私のコードの断片は以下の通りです:MS Wordオートメーション - テーブルがあるページ番号を見つける

nPage = PageNumberForTable(nTable); 

:あなたはあなたのような機能が必要と言うとき

table.Range.Information[Word.WdInformation.wdActiveEndAdjustedPageNumber]; 

int nTable = 0; 
int nPage = 0; 
foreach (Word.Table tb in doc.Tables) 
{ 
    nTable++; 
    nPage = PageNumberForTable(nTable); // I need a function like this 
    numRows = tb.Rows.Count; 
    numColumns = tb.Columns.Count; 

    for (int row = 1; row <= numRows; row++) 
    { 
    for(int col = 1; col <= numColumns; col++) 
    { 
     var cell = tb.Cell(row, col); 
     cellValue = CleanRASpace(cell.Range.Text); 
     if(cellValue == 2) 
     { 
      MessageBox.Show("Check table " + nTable + " on page " + nPage); 
     } 
    } 
    } 
} 

答えて

2

あなたは表がでオンになっているページ番号を取得することができます奇妙に思えます...私はあなたがおそらく2つのメソッド、名前からテーブルを取得する(タイトル)特定のページ上のすべてのテーブルを取得する必要があると思います。与えられたページのテーブルを取得するために、リストを使用してそれらを保持することができました。可能であれば、そのページには複数のテーブルがあります。単語の文書では、テーブルTitlesをtable1、table2、table3 ...などに設定しました。また、テーブルがページを分割すると、テーブルが終了するページが返されます。お役に立てれば。

private static int GetTablePageNumberFromTitle(string inTitle, Word.Document doc) { 
    foreach (Word.Table tb in doc.Tables) { 
    if (tb.Title == inTitle) { 
     return tb.Range.Information[Word.WdInformation.wdActiveEndAdjustedPageNumber]; 
    } 
    } 
    return -1; 
} 

private static List<Word.Table> GetTablesOnPage(int targetPage, Word.Document doc) { 
    List<Word.Table> tablesOnPage = new List<Word.Table>(); 
    int curPage = -1; 
    foreach (Word.Table tb in doc.Tables) { 
    curPage = tb.Range.Information[Word.WdInformation.wdActiveEndAdjustedPageNumber]; 
    if (curPage == targetPage) { 
     tablesOnPage.Add(tb); 
    } 
    } 
    return tablesOnPage; 
} 

一部のテスト

Console.WriteLine("--------------"); 
    Console.WriteLine("Get page table named 'table3' is on..."); 
    int pageNum = GetTablePageNumberFromTitle("table3", doc); 
    Console.WriteLine("'table3 is on page: " + pageNum); 
    Console.WriteLine("--------------"); 
    Console.WriteLine("Get page table named 'table2' is on... It starts on page 2 and ends on page 3"); 
    pageNum = GetTablePageNumberFromTitle("table2", doc); 
    Console.WriteLine("'table2 is on page: " + pageNum); 
    Console.WriteLine("--------------"); 
    Console.WriteLine("Get tables on page 4"); 
    List<Word.Table> allTables = GetTablesOnPage(4, doc); 
    foreach (Word.Table tb in allTables) { 
    Console.WriteLine(tb.Title + " is on page " + 4); 
    } 
    Console.WriteLine("--------------"); 
    Console.WriteLine("Get tables on page 5"); 
    allTables = GetTablesOnPage(5, doc); 
    foreach (Word.Table tb in allTables) { 
    Console.WriteLine(tb.Title + " is on page " + 5); 
    } 
+0

ジョンは、どうもありがとうございました。あなたが提供したコードは正常に動作します。私は関数を作成する必要はありません(私は可能な限り明確に説明しようとしていましたが、もっと混乱を招いていました:))。 –

関連する問題