首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Excel日期列使用EPPlus返回INT

Excel日期列使用EPPlus返回INT
EN

Stack Overflow用户
提问于 2014-07-24 20:39:27
回答 5查看 28.7K关注 0票数 27

所以我使用EPPlus来读写excel文档。

工作流程

  • 用户生成填充的excel文档并打开文档,并添加一行
  • Uploaded

read

我使用EPPlus创建文档时生成的日期在我读回值时显示正确,但是用户更改日期或添加的行显示为int值,而不是我可以用作实际日期的值。

当我输入date 1/01/2014并写入它时,打开文件时的输出显示41640

我按如下方式阅读它

代码语言:javascript
复制
sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value != null
     ? sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value.ToString().Trim()
         : string.Empty

更新

在导出文件时,我添加了以下内容

代码语言:javascript
复制
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");
}

此外,在读取值时,我也尝试过

代码语言:javascript
复制
sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Style.Numberformat.Format = "MM/dd/yyy";

我仍然会得到一个整型值

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-24 21:59:35

...when我需要读取excel文件,唯一不正确的日期是用户更改的日期

因此,当您阅读修改后的excel表格时,修改后的日期是数字,而未更改的值是日期格式中的字符串?

您可以通过DateTime.FromOADate获取DateTime

代码语言:javascript
复制
long dateNum = long.Parse(worksheet.Cells[row, column].Value.ToString());
DateTime result = DateTime.FromOADate(dateNum);

使用您的样本号:

代码语言:javascript
复制
Console.Write(DateTime.FromOADate(41640)); // ->  01/01/2014 
票数 46
EN

Stack Overflow用户

发布于 2019-04-01 16:08:21

今天,当我试图从一些ASP.NET DataTables生成一些Excel文档时,我偶然发现了这个问题:我在字符串方面没有问题,但在数字类型(整型、双精度型、小数型)和DataTables方面遇到了一些问题,它们被格式化为字符串或数字表示(OADate)。

以下是我最终设法实现的解决方案:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2020-11-26 01:11:58

您可以检查单元格格式是否为日期格式,然后将其解析为日期

代码语言:javascript
复制
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");
 
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24933947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档