.Net工具类(一).epplus读取Excel工具类
.Net工具类(一).epplus读取Excel工具类
日常开发中经常需要读取一些报表的Excel文件,故将常用的方法封装为工具类。
该工具类默认读取第一个工作簿,并将第一行设置为datatable的标题,自动识别行列的数据边界
/// <summary>
/// 使用EPPlus 第三方的组件读取Excel
/// </summary>
public class EPPlusHelper
{
private static string GetString(object obj)
{
try
{
return obj?.ToString()?.Trim() ?? "";
}
catch
{
return "";
}
}
/// <summary>
/// 将指定的Excel的文件转换成DataTable,默认将第一行设置为datatable的标题
/// </summary>
/// <param name="fullFielPath"></param>
/// <param name="sheetIndex"></param>
/// <returns></returns>
public static DataTable WorksheetToTable(string fullFilePath, int sheetIndex)
{
try
{
FileInfo existingFile = new FileInfo(fullFilePath);
//指定EPPlus使用非商业证书
ExcelPackage package = new ExcelPackage(existingFile);
ExcelWorksheet worksheet = package.Workbook.Worksheets[sheetIndex];//选定 指定页
return WorksheetToTable(worksheet);
}
catch (Exception ex)
{
throw new Exception($"读取Excel文件出现异常,异常信息:{ex.Message}");
}
}
/// <summary>
/// 将worksheet转成datatable
/// </summary>
/// <param name="worksheet"></param>
/// <returns></returns>
public static DataTable WorksheetToTable(ExcelWorksheet worksheet)
{
//获取worksheet的行数
int rows = worksheet.Dimension.End.Row;
//获取worksheet的列数
int cols = worksheet.Dimension.End.Column;
DataTable dt = new DataTable(worksheet.Name);
DataRow dr = null;
for (int i = 1; i <= rows; i++)
{
if (i > 1)
dr = dt.NewRow();
for (int j = 1; j <= cols; j++)
{
//默认将第一行设置为datatable的标题
if (i == 1)
dt.Columns.Add(GetString(worksheet.Cells[i, j].Value));
//剩下的写入datatable
else
dr[j - 1] = GetString(worksheet.Cells[i, j].Value);
}
if (i > 1)
{
var drValue = string.Join("", dr.ItemArray).Trim();
if (!string.IsNullOrWhiteSpace(drValue))
dt.Rows.Add(dr);
}
}
return dt;
}
}

浙公网安备 33010602011771号