残念ながら、ワード処理テーブル(DocumentFormat.OpenXml.WordProcessing.Table
)には「列」の概念はなく、行とセルのみがあります。最初の行に列名が含まれており、すべての行に同じ数のセルが含まれていると想定できる場合は、その作業を完了できます。あなたが気を付けなければならないこと(そしてあなたの擬似コードの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;
}