MS Word Automation - 查找 table 所在的页码
MS Word Automation - find the page number where a table is located
我有一个包含 10 tables 的 Word 文档。当我读取这些 table 中的值时,我想警告操作员检查第 5 页上的 table 4。
我可以获得 table 号码,但是有没有办法在哪个页面上指示 table 是什么?我的代码片段如下:
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);
}
}
}
}
您可以获得 table 所在的页码:
table.Range.Information[Word.WdInformation.wdActiveEndAdjustedPageNumber];
当你说你需要这样的功能时:
nPage = PageNumberForTable(nTable);
看起来很奇怪……我认为您可能需要两种方法,一种是从名称(标题)中获取 table,另一种是获取给定页面上的所有 table。为了在给定页面上获得 table,我使用了一个列表来保存它们,因为该页面上可能有多个 table。在 word 文档中,我将 table Titles
设置为 table1,table2,table3……等等……如果 table 拆分页面将 return table 结束的页面。希望这有帮助。
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);
}
我有一个包含 10 tables 的 Word 文档。当我读取这些 table 中的值时,我想警告操作员检查第 5 页上的 table 4。 我可以获得 table 号码,但是有没有办法在哪个页面上指示 table 是什么?我的代码片段如下:
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);
}
}
}
}
您可以获得 table 所在的页码:
table.Range.Information[Word.WdInformation.wdActiveEndAdjustedPageNumber];
当你说你需要这样的功能时:
nPage = PageNumberForTable(nTable);
看起来很奇怪……我认为您可能需要两种方法,一种是从名称(标题)中获取 table,另一种是获取给定页面上的所有 table。为了在给定页面上获得 table,我使用了一个列表来保存它们,因为该页面上可能有多个 table。在 word 文档中,我将 table Titles
设置为 table1,table2,table3……等等……如果 table 拆分页面将 return table 结束的页面。希望这有帮助。
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);
}