私は(一見)基本的なことをStackOverflowに頼るのは嫌いですが、ここ数時間Microsoftと戦ってきて、行き止まりになっているようです。私は(大きな)Excel 2007+スプレッドシートを読み込もうとしていますが、GoogleはOpenXmlSDKの使用が非常に人気のある選択肢であることを親切に知らせてくれました。それで、私はそれを試してみて、いくつかのチュートリアルを読み、Microsoft自身のライブラリページをチェックし、それらすべてからほとんど得られませんでした。
数字の列と文字列の列が1つしかない小さなテストスプレッドシートを使用しています。大規模なテストは後で行われます。投稿しようとしているものと同様の実装をいくつか試しましたが、いずれもデータを読み取りません。以下のコードは、ほとんどが別のStackOverflowスレッドから取得されたもので、機能しているように見えましたが、私にとってはそうではありませんでした。このバージョンは、今日書いたものよりも壊れにくいので、チェック/デバッグ/ヘルプしてもらうと思いました。
static void ReadExcelFileSAX(string fileName)
{
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, true))
{
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
OpenXmlPartReader reader = new OpenXmlPartReader(worksheetPart);
string text;
string rowNum;
while (reader.Read())
{
if (reader.ElementType == typeof(Row))
{
do
{
if (reader.HasAttributes)
{
rowNum = reader.Attributes.First(a => a.LocalName == "r").Value;
Console.Write("rowNum: " + rowNum); //we never even get here, I tested it with a breakpoint
}
} while (reader.ReadNextSibling()); // Skip to the next row
Console.ReadKey();
break; // We just looped through all the rows so no need to continue reading the worksheet
}
if (reader.ElementType == typeof(Cell))
{
}
if (reader.ElementType != typeof(Worksheet)) // Dont' want to skip the contents of the worksheet
reader.Skip(); // Skip contents of any node before finding the first row.
}
reader.Close();
Console.WriteLine();
Console.ReadKey();
}
}
ちなみに、OpenXml SDKを使用する代わりに、どういうわけか見逃してしまった良い方法はありますか?