OpenXMLを使用してスプレッドシートを開き、スプレッドシートの行をループしています。行内のすべてのセルを返すlinqクエリがあります。linqクエリは、MSDNのデモから直接リッピングされました。
IEnumerable<String> textValues =
from cell in row.Descendants<Cell>()
where cell.CellValue != null
select (cell.DataType != null
&& cell.DataType.HasValue
&& cell.DataType == CellValues.SharedString
? sharedString.ChildElements[int.Parse(cell.CellValue.InnerText)].InnerText
: cell.CellValue.InnerText);
linqクエリは、値を持つすべてのセルを返すのに優れていますが、値を持たないセルは返しません。これにより、どのセルがどのセルであるかを判断できなくなります。もう少し説明させてください。たとえば、スプレッドシートに名前、社会保障番号、住所の3つの列があるとします。このlinqクエリが機能する方法は、特定の行の値を持つセルのみを返すことです。したがって、「John」、「」、「173 Sycamore」を含むデータの行がある場合、linqクエリは列挙に「John」と「173Sycamore」のみを返します。これにより、次のかどうかを知ることができなくなります。 「173Sycamore」はSSNまたはアドレスフィールドです。
ここで繰り返しますが、必要なのは、値を含むセルだけでなく、すべてのセルが返されることです。
私は考えられるあらゆる方法でlinqクエリをサルしようとしましたが、運がまったくありませんでした(つまり、where句を削除するのはトリックではありません)。どんな助けでもいただければ幸いです。ありがとう!