首页 > 其他 > 详细

使用ClosedXml查询Excel文件数据,匹配时间并显示

时间:2021-09-24 18:18:49      阅读:56      评论:0      收藏:0      [点我收藏+]

使用Nuget包管理器安装ClosedXml包,VS没网在https://www.nuget.org/ 下载后,包源本地安装至项目
函数:
private void SelectGrab(CancellationToken token, object state)
{
Data someItem;
while (!datas.IsEmpty)
{
datas.TryTake(out someItem);//清空原先的结果
}
if (File.Exists(filepath))
{
try
{
using (XLWorkbook wb = new XLWorkbook(filepath))
{
System.Threading.Tasks.Parallel.ForEach(wb.Worksheets,item=> //使用并行循环,提高效率
{
var rows = item.RowsUsed().Skip(1);//跳过标题行
System.Threading.Tasks.Parallel.ForEach(rows,ite=>
{
if (ite.Cell(2).GetString()!="")
{
DateTime nowTime = DateTime.FromOADate(double.Parse(ite.Cell(2).GetString()));//第二列为时间戳
if (state.ToString() == "0")//采取的筛选策略
{
if (nowTime >= StartTime && nowTime <= EndTime)
{
Data data = new Data(ite.Cell(1).GetString(), DateTime.FromOADate(double.Parse(ite.Cell(2).GetString())).ToString("yyyy/MM/dd"), ite.Cell(3).GetString(), ite.Cell(4).GetString(), ite.Cell(5).GetString(), ite.Cell(6).GetString(), ite.Cell(7).GetString());//自定义结构:包含excel表格中的列名项
datas.Add(data);//自定义集合保存结果
}
}
else//采取的筛选策略
{
System.Threading.Tasks.Parallel.ForEach(dateTimes, it =>//dateTimes为一个list,自定义添加
{
if (it == nowTime)
{
Data data = new Data(ite.Cell(1).GetString(), DateTime.FromOADate(double.Parse(ite.Cell(2).GetString())).ToString("yyyy/MM/dd"), ite.Cell(3).GetString(), ite.Cell(4).GetString(), ite.Cell(5).GetString(), ite.Cell(6).GetString(), ite.Cell(7).GetString());//自定义结构:包含excel表格中的列名项
datas.Add(data);
}
});
}
}
});
});
wb.Dispose();
}
setDT();//刷UI,也可以通过POST发送至UI
GC.Collect();
}
catch (Exception ex)
{
MessageBox.Show("不存在表单"+ StartTime.Year.ToString()+ex.Message);
setDT();//刷UI,也可以通过POST发送至UI
}
}
else
{
MessageBox.Show("源文件路径不存在");
setDT();//刷UI,也可以通过POST发送至UI
}
}

使用ClosedXml查询Excel文件数据,匹配时间并显示

原文:https://www.cnblogs.com/RainbowSea/p/15308577.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!