XMLを解析してxlsxファイルからデータを読み取るコードを使用しています。日付セルを除いて、すべて非常に簡単です。
日付は整数として格納され、スタイルシートへのインデックスである "s" 属性を持ち、日付の書式設定文字列を取得するために使用できます。以下にリンクされている以前のスタックオーバーフローの質問の例をいくつか示します。
19 = 'h:mm:ss AM/PM';
20 = 'h:mm';
21 = 'h:mm:ss';
22 = 'm/d/yy h:mm';
これらは ooxml 標準の組み込みの日付書式設定文字列ですが、Excel は組み込みの代わりにカスタム書式設定文字列を使用する傾向があるようです。Excel 2007 スプレッドシートの形式の例を次に示します。164 より大きい numFmtId はカスタム形式です。
<numFmt formatCode="MM/DD/YY" numFmtId="165"/>
セルを日付としてフォーマットする必要があるかどうかを判断するのは困難です。これは、見つけることができる唯一の指標が formatCode であるためです。これは明らかに日付ですが、セルはさまざまな方法でフォーマットできます。私の最初の試みは、formatCode で M、D、および Y を探すことですが、これには問題があるようです。
この問題で運が良かった人はいますか?現時点では、標準の Excel 読み取りライブラリでは xlsx がサポートされていないようです。私は標準を読み、多くの xlsx ファイルを掘り下げましたが、あまり運がありませんでした。
最良の情報は、このスタックオーバーフローの質問から得られるようです:
Office Open xml セルに日時値が含まれていることを示すもの
ありがとう!