Excel に書き込んでいる日時は、常に次の日に切り上げられます。
workSheet.Cells[0, 0] = new Cell(DateTime.Now, new CellFormat(CellFormatType.DateTime, @"HH:mm:ss"));
出力 Excel ファイルでは、セルは次の値を取得します: 29/09/2013 00:00:00
この例の DateTime.Now は 28/09/2013 19:42:23 です。
Excel に書き込んでいる日時は、常に次の日に切り上げられます。
workSheet.Cells[0, 0] = new Cell(DateTime.Now, new CellFormat(CellFormatType.DateTime, @"HH:mm:ss"));
出力 Excel ファイルでは、セルは次の値を取得します: 29/09/2013 00:00:00
この例の DateTime.Now は 28/09/2013 19:42:23 です。
ExcelLibrary プロジェクトのソース コードを使用している場合は、次の方法でこれを修正できます。
次の場所にある SharedResource クラスに移動します: [プロジェクト ソース コード フォルダー]\Office\BinaryFileFormat フォルダー
EncodeDateTime 関数を次のように変更します。
public double EncodeDateTime(DateTime value)
{
double days = (value - BaseDate).Days;
//if (days > 365) days++;
return days;
}
DataTime オブジェクトを適切な形式で Cell に渡します。
worksheet.Cells[iIndex, j] = new Cell(((DateTime)cellValue), new CellFormat(CellFormatType.DateTime, @"dd/MM/yyyy"));
DateTime.FromOADate を使用して、日付形式を OLE オートメーションから .net 形式に変換する必要があります。
If oCell.Format.FormatType = CellFormatType.Date OrElse oCell.Format.FormatType = CellFormatType.DateTime Then
Dim d As Double = Double.Parse(oCell.Value)
Debug.print(DateTime.FromOADate(d))
End If
最終的に、セルの値を DateTime ではなく文字列として渡しました。
workSheet.Cells[0, 0] = new Cell(DateTime.Now.ToString(@"HH:mm:ss:ff"),
new CellFormat(CellFormatType.DateTime, @"HH:mm:ss"));