残念ながら、ワード プロセッシング テーブル ( DocumentFormat.OpenXml.WordProcessing.Table
) には「列」の概念はなく、行とセルのみです。最初の行に列名が含まれ、すべての行に同じ数のセルが含まれていると想定できる場合、タスクを達成できます。注意しなければならないことの 1 つ (および上記の疑似コードの問題の 1 つ) は、現在繰り返し処理している列挙から何かを削除できないことです。これを達成する方法は次のとおりです。
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;
}