2

我正在使用 openxml sdk 并有一个表格可以写入 word doc。一旦我写了我的表,是否有选择该表的所有列并根据该列的文本删除其中一个?例如:

foreach (var column in table.columns)
{
    if (column.Text == "Hello")
    {
       table[column].delete();
    }
}

上述伪代码是否有现实世界的实现?

4

1 回答 1

3

不幸的是,文字处理表 ( ) 中没有“列”的概念DocumentFormat.OpenXml.WordProcessing.Table,只有行和单元格。如果您可以假设第一行包含列名,并且所有行包含相同数量的单元格,您就可以完成您的任务。您必须注意的一件事(以及上述伪代码中的一个问题)是您无法从当前迭代的枚举中删除内容。以下是我将如何做到这一点:

var rows = table.Elements<TableRow>();
var firstRowCells = rows.ElementAt(0).Elements<TableCell>();
var cellNumbersToDelete = new List<int>();
for( int i=0; i<firstRowCells.Count(); i++ )
  if( GetCellText( firstRowCells.ElementAt( i ) ) == "Hello" )
    cellNumbersToDelete.Add( i );
foreach( var cellNumberToDelete in cellNumbersToDelete ) {
  foreach( var row in rows ) {
    cellToDelete = row.ElementAt( cellNumberToDelete );
    row.RemoveChild( cellToDelete );
  }
}

我现在没有时间测试这个解决方案,所以它可能需要一些调整,但它应该让你大致了解如何完成你的任务。上面引用的方法GetCellText看起来像这样:

string GetCellText( TableCell cell ) {
  var p = cell.Elements<Paragraph>().First();
  var r = p.Elements<Run>().First();
  var t = r.Elements<Text>().First();
  return t.Text;
}
于 2012-03-19T20:10:28.070 回答