使用 Net 处理 Excel 文件的时间列

  前言

  最近,处理Excel的情况比较多,然后,就碰到了时间列,读取出来时中文,保存到数据库中着实麻烦,就找了下如何解决这个问题。

  正文

  1.这是读取Excel时候,调试的时候,时间列的格式,如下图:

  2.分享下原始读取Excel的公共方法,其实,也只能说这个方法写的有问题,所有列都按照字符串处理的,如下图:

 1 public static DataTable LoadExcelFile(IWorkbook workbook, string sheetName, bool isFirstRowColumn)
 2 {
 3     ISheet sheet = null;
 4     DataTable data = new DataTable();
 5     int startRow = 0;
 6     int cellCount = 0;
 7     int rowCount = 0;
 8 
 9     try
10     {
11 
12         if (sheetName != null)
13         {
14             sheet = workbook.GetSheet(sheetName);
15         }
16         else
17         {
18             sheet = workbook.GetSheetAt(0);
19         }
20 
21         if (sheet != null)
22         {
23             IRow firstRow = sheet.GetRow(0);
24             cellCount = firstRow.LastCellNum;
25             if (isFirstRowColumn)
26             {
27                 for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
28                 {
29                     DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);
30                     data.Columns.Add(column);
31                 }
32                 startRow = sheet.FirstRowNum + 1;
33             }
34             else
35             {
36                 startRow = sheet.FirstRowNum;
37             }
38 
39             rowCount = sheet.LastRowNum;
40 
41             for (int i = startRow; i <= rowCount; ++i)
42             {
43                 IRow row = sheet.GetRow(i);
44                 if (row == null)
45                 {
46                     continue;
47                 }
48 
49                 DataRow dataRow = data.NewRow();
50                 for (int j = row.FirstCellNum; j < cellCount; ++j)
51                 {
52                     ICell cell = row.GetCell(j);
53                     if (cell != null)
54                     {
55                         dataRow[j] = cell.ToString();
56                     }
57                 }
58                 data.Rows.Add(dataRow);
59             }
60         }
61         return data;
62     }
63     catch (Exception ex)
64     {
65         Console.WriteLine("Exception: " + ex.Message);
66         return null;
67     }
68 }

  3.我们看一下上面代码里黄色背景的部分,就是写入DataTable的部分,其实简单的判断一下,如果是数字类型又能格式化成时间的情况,就按照时间格式读取就行了,如下图:

for (int j = row.FirstCellNum; j < cellCount; ++j)
{
    ICell cell = row.GetCell(j);
    if (cell != null)
    {
        if (cell.CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(cell))
            dataRow[j] = cell.DateCellValue.ToString();
        else
            dataRow[j] = cell.ToString();
    }
}

  4.我们再调试一下代码,时间格式就是正经的时间格式了,如果还不符合要求,就可以用net的转换时间函数再加工一下就行了,如下图:

  结束语

  其实,我们读取Excel的时候,不仅仅时间格式,其他格式也需要特别的处理,大家可以参考这个例子,举一反三一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霖雨 - LinyuLoveTJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值