(.Net Core EPPlus使用)Aspose.Cells替代方案
由于之前使用的Aspose.Cells会有数量限制
所以转换一个excel解析包
首先引入NuGet包
点击查看代码
/// 根据文件路径获取datatable
/// <param name="filePath">文件路径</param>
private DataTable GetDataTableByFilePath(string filePath)
{
//最终的datatable
var resultData = new DataTable();
try
{
using (var stream = new FileStream(filePath, FileMode.Open))
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//不加会报错 : Epplus: Please set the ExcelPackage.LicenseContext property
using (ExcelPackage package = new ExcelPackage(stream))
{
ExcelWorksheet sheet = package.Workbook.Worksheets[0];
var fileName = Path.GetFileName(filePath).ToLower();
int beginRowIndex = 0;//数据开始行下标
int columnCount = sheet.Dimension.End.Column;//最大列号
int rowCount = sheet.Dimension.End.Row;//最大行号
//数据总表
var data = (object[,])sheet.Cells.Value;
//时间类型的列
List<string> datetimeColumnNameList = new List<string>()
{
"TimeCalendarDay"
};
for (int i = 0; i < columnCount; i++)
{
var colname = (data[beginRowIndex, i] ?? "").ToString();
if (!string.IsNullOrEmpty(colname))
{
resultData.Columns.Add(colname);
}
}
for (int i = beginRowIndex + 1; i < rowCount; i++)
{
DataRow dataRow = resultData.NewRow();
for (int j = 0; j < columnCount; j++)
{
var value = data[i, j];
//判断为日期的字段将特殊处理
if (datetimeColumnNameList.Contains(resultData.Columns[j].ColumnName))
{
value = DateTime.FromOADate(double.Parse(value.ToString())).ToString("yyyy/MM/dd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
}
dataRow[j] = value;
}
resultData.Rows.Add(dataRow);
}
}
}
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
throw new Exception(ex.Message);
}
return resultData;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?