0

次の形式の、DateTime 用と値用の 2 つの列のみを含む Excel (xlsx 2010) ドキュメントがあります。

DateTime                Value
01/09/2012 00:00:00     1.23456
02/09/2012 00:05:00     1.23457
03/09/2012 00:10:00     1.23458
04/09/2012 00:15:00     1.23459

日時列はカスタム形式 (dd/mm/yyyy hh:mm:ss) に設定され、すべての時間は正確に 5 分または 10 分マークにあり、秒は常に 00 です。

ただし、これを使用して読むと:

connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", filePath);
OleDbCommand sqlComm = new OleDbCommand("SELECT * FROM [Sheet1$]", new OleDbConnection(connectionString));
OleDbDataReader r = sqlComm.ExecuteReader();

最初の 2 つの DateTimes は正しく読み取られますが、すべての DateTimes は、ファイルに実際に含まれているものよりも 1 秒短くなります。

00:15:00    00:14:59
00:20:00    00:19:59

誰かが理由を知っていますか?または、手動でチェックして最も近い分に切り上げる以外に、それを修正するためにできること(この場合は実行可能なオプションだと思います)

PS。簡潔にするために関連するコード行を切り取って貼り付けたので、上記のコード サンプルは技術的には機能しない可能性がありますが、実際のアプリではファイルを読み取ります。

4

1 に答える 1

0

コメントを回答に変換する

大幅な改良と急な学習曲線の後、相互運用ライブラリを使用するとファイルが正しく読み取られることを確認できます。

ウェブ上の他の投稿に基づくサンプル コードについては、以下を参照してください。

object misValue = System.Reflection.Missing.Value;
// COMM creates a wrapper for each object and they don't get cleaned up.  Never use 2 dots with comm
Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
Excel.Workbooks xlWorkbooks = xlApp.Workbooks;
Excel.Workbook xlWorkbook  = xlWorkbooks.Open(fileInfo.getFileURL(), misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets[1];
Excel.Range xlRange, r;

try
{
    xlRange = (Excel.Range)xlWorksheet.UsedRange;

    int rowCount = xlRange.Rows.Count;
    int colCount = xlRange.Columns.Count;

    for (int col = 0; col < colCount; col++)
    {
        r = (Excel.Range)xlRange.Cells[fileInfo.columnHeaders, (col + 1)];
    }
}
于 2013-01-25T08:41:29.697 に答える