所以我使用EPPlus来读写excel文档。
工作流程
read
我使用EPPlus创建文档时生成的日期在我读回值时显示正确,但是用户更改日期或添加的行显示为int值,而不是我可以用作实际日期的值。
当我输入date 1/01/2014并写入它时,打开文件时的输出显示41640
我按如下方式阅读它
sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value != null
? sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value.ToString().Trim()
: string.Empty
更新
在导出文件时,我添加了以下内容
DateTime testDate;
if (DateTime.TryParse(split[i], out testDate))
{
sheet.Cells[row, i + 1].Style.Numberformat.Format = "MM/dd/yyyy";
sheet.Cells[row, i + 1].Value = testDate.ToString("MM/dd/yyyy");
}
此外,在读取值时,我也尝试过
sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Style.Numberformat.Format = "MM/dd/yyy";
我仍然会得到一个整型值
发布于 2014-07-24 21:59:35
...when我需要读取excel文件,唯一不正确的日期是用户更改的日期
因此,当您阅读修改后的excel表格时,修改后的日期是数字,而未更改的值是日期格式中的字符串?
您可以通过DateTime.FromOADate
获取DateTime
long dateNum = long.Parse(worksheet.Cells[row, column].Value.ToString());
DateTime result = DateTime.FromOADate(dateNum);
使用您的样本号:
Console.Write(DateTime.FromOADate(41640)); // -> 01/01/2014
发布于 2019-04-01 16:08:21
今天,当我试图从一些ASP.NET DataTables生成一些Excel文档时,我偶然发现了这个问题:我在字符串方面没有问题,但在数字类型(整型、双精度型、小数型)和DataTables方面遇到了一些问题,它们被格式化为字符串或数字表示(OADate)。
以下是我最终设法实现的解决方案:
if (dc.DataType == typeof(DateTime))
{
if (!r.IsNull(dc))
{
ws.SetValue(row, col, (DateTime)r[dc]);
// Change the following line if you need a different DateTime format
var dtFormat = "dd/MM/yyyy";
ws.Cells[row, col].Style.Numberformat.Format = dtFormat;
}
else ws.SetValue(row, col, null);
}
显然,诀窍在于将值设置为DateTime
,然后相应地配置适当的Style.Numberformat.Format
。
我发布了完整的代码示例(使用EPPlus将DataTable转换为Excel文件) in this post on my blog。
发布于 2020-11-26 01:11:58
您可以检查单元格格式是否为日期格式,然后将其解析为日期
var cell = worksheet.Cells[row, col];
value = cell.Value.ToString();
if (cell.Style.Numberformat.Format == "[$-409]d\\-mmm\\-yy;@")
{
string inputString = DateTime.FromOADate(long.Parse(value.ToString())).ToString("dd-MMM-yyyy");
}
https://stackoverflow.com/questions/24933947
复制相似问题