К сожалению, нет понятия «столбец» в таблице обработки текста (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;
}