gpt4 book ai didi

c# - 按列名删除列

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:44 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com