c# - 按列名称删除列

标签 c# ms-word openxml word-automation

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

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

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

最佳答案

不幸的是,文字处理表 (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;
}

关于c# - 按列名称删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9776822/

相关文章:

c# - 从pdf和word文件中提取文本

c# - 泛型问题

c# - HttpWebRequest 响应生成 HTTP 422。为什么?

c# - 模拟 DbProviderFactory

html - Word 文档中特定部分/页面的 URL

iphone - IOS 从 MS Word 中读取文本

c# - 从模板创建 PowerPoint 2007 演示文稿

c# - OpenXML 从工作表中获取工作表名称

c# - 如何使用 MS Open XML SDK 检索一些图像数据和格式?

c# - 查询问题 - 在 sql navigator 中运行查询时返回行,但不在我的 c# 程序中