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

news/2025/3/5 22:43:48/文章来源:https://www.cnblogs.com/jianyus/p/18747112

  前言

  最近,处理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();elsedataRow[j] = cell.ToString();}
}

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

  结束语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894213.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTB Sherlock Easy Noted wp

靶场介绍:Simon, a developer working at Forela, notified the CERT team about a note that appeared on his desktop. The note claimed that his system had been compromised and that sensitive data from Simons workstation had been collected. The perpetrators per…

从Postman到Apipost:我的动态参数测试实战踩坑记

从Postman到Apipost:我的动态参数测试实战踩坑记作为全栈开发工程师,我最近在开发用户中心模块时遇到了一个棘手问题:如何高效测试包含复杂参数的API接口?我和团队小伙伴都习惯用Postman,直到这次让我们差点加班的"动态参数事件"... 第1次翻车:Postman的陷阱 记…

Claude 3.7登顶webdev榜首,国内怎么使用Claude 3.7

Claude 3.7 Sonnet 以 1363.7分 的竞技场评分位列榜首,较第二名(同为Anthropic的Claude 3.5 Sonnet)甩开116.5分,远超榜单前十其他模型的分差水平(通常仅相差几分至几十分)。Claude3.7登顶webdev榜首 Claude 3.7 Sonnet 以 1363.7分 的竞技场评分位列榜首,较第二名(同为…

JavaWeb学习(七)

JavaWeb学习(七):Web后端开发 —— Maven 目录JavaWeb学习(七):Web后端开发 —— Maven概念安装IDEA 集成 Maven依赖管理 本文为个人学习记录,内容学习自 黑马程序员概念Maven 是 apache 的一个开源项目,是一款用于管理和构建 Java 项目的工具作用:依赖管理:方便快捷…

浙江大学|第二弹来啦,65页《DeepSeek模型解读》,DeepSeek起源、应用、部署到未来展望全解读 | PDF免费下载

《DeepSeek模型解读》是由浙江大学MBA领学团队撰写的一份技术解析文档,系统介绍了国产大模型DeepSeek的核心特性与应用前景。**该文档以行业变革为背景,结合技术细节与场景案例,为读者展现了DeepSeek在人工智能领域的突破性进展。**《DeepSeek模型解读》是由浙江大学MBA领学…

浙江大学|153页《DeepSeek行业应用案例集》也来啦,DeepSeek居然已渗透到千行百业如此之深 | PDF免费下载

《DeepSeek行业应用案例集:解锁智能变革密码》由浙江大学信息技术中心发布,全面展示了DeepSeek人工智能技术在农业、制造业、金融、医疗、教育等领域的创新实践。本案例集通过40多个行业应用实例,揭示了DeepSeek如何以数据驱动和智能化解决方案推动行业转型升级,为从业者提…

2020-PTA总决赛-L2-3 完全二叉树的层序遍历(深搜+一维数组模拟二叉树)

DFS建树,一位数组模拟二叉树一维数组模拟二叉树:leftNode = root * 2 rightNode = root * 2 + 1 leftNode表示左孩子在一维数组中的下标(一维数组下标从1开始) rightNode表示右孩子在一维数组中的下标 root表示根节点下标 比如完全二叉树层序遍历为10 2 5 6 8 7 3 那么用一…

Puppeter 如何链接控制 Electron 创建的窗口

大家好,我是一名,跨境行业 saas 软件开发的前端程序员,阿毛 这个我的个人网站 最近想用 Electron 做一个爬虫,想到用 Puppeter 来控制 Electron 创建的窗口执行爬取任务。 网上找了很多方法都不好用, 最后发现一个库可以链接 Electron 和 Puppeter , 这里分享一下puppetee…

软件工程日报03

今天练习了springboot技术,写了一个用户注册的功能(只写了后端代码) 首先创建了boot项目,pom文件继承了spring-boot-starter-parent依赖管理,大部分不需要自己配置 之后再yml文件中写数据库的配置然后创建项目结构,和之前类似,实现注册功能。 主要步骤就是定义实现类Use…

Ubuntu 平台上火焰图的生成和分析

火焰图的生成和分析 Ubuntu 平台的火焰图生成 在 Ubuntu 平台上,安装 FlameGraph 到 FlameGraph 目录下。运行想要生成火焰图的进程 top 获取需要生成火焰图的进程号 按照下面的脚本输入命令#!/bin/bash echo "please input pid" read processid echo "your pr…

【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章:《基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(完整代码运行后…