using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
namespace JiepeiWMS.Common.Helper
{
public class ExcelHelper
{
#region 导出Excel文件
///
/// 导出Excel文件
///
///
/// 数据
/// 表头
///
public static string CreateExcelFromList(List dataList, List headers)
{
string sWebRootFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tempExcel");
if (!Directory.Exists(sWebRootFolder))
{
Directory.CreateDirectory(sWebRootFolder);
}
string sFileName = $@"tempExcel_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx";
var path = Path.Combine(sWebRootFolder, sFileName);
FileInfo file = new FileInfo(path);
if (file.Exists)
{
file.Delete();
file = new FileInfo(path);
}
using (ExcelPackage package = new ExcelPackage(file))
{
//创建sheet
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("sheet1");
worksheet.Cells.LoadFromCollection(dataList, true);
//表头字段
for (int i = 0; i < headers.Count; i++)
{
worksheet.Cells[1, i + 1].Value = headers[i];
}
package.Save();
}
return path;
}
///
/// 生成Excle 内存流
///
///
///
///
///
public static Stream CreateExcelStreamFromList(List dataList, List headers)
{
string sWebRootFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tempExcel");
if (!Directory.Exists(sWebRootFolder))
{
Directory.CreateDirectory(sWebRootFolder);
}
string sFileName = $@"tempExcel_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx";
var path = Path.Combine(sWebRootFolder, sFileName);
FileInfo file = new FileInfo(path);
if (file.Exists)
{
file.Delete();
file = new FileInfo(path);
}
MemoryStream ms = new MemoryStream();
using (ExcelPackage package = new ExcelPackage(file))
{
//创建sheet
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("sheet1");
worksheet.Cells.LoadFromCollection(dataList, true);
//表头字段
for (int i = 0; i < headers.Count; i++)
{
worksheet.Cells[1, i + 1].Value = headers[i];
}
package.SaveAs(ms);
ms.Flush();
ms.Position = 0;//指定当前流的位置从0开始
return ms;
}
}
#endregion
#region 导入Excel文件
///
/// Aspose.Cells 读取Excel文件 只读第一个sheet
///
///
public static DataTable ImportExcel(string FileName)
{
Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(FileName);
Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(FileName);
Aspose.Cells.Cells cells = workbook.Worksheets[0].Cells;
System.Data.DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxColumn + 1,true);
return dt;
}
///
/// NPOI读取Excel文件
///
///
///
public static List Read(string fileName)
{
try
{
List tables = new List();
if (!File.Exists(fileName))
return tables;
var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
IWorkbook workbook = null;
if (fileName.IndexOf(".xlsx") > 0)
{
// 2007版本
workbook = new XSSFWorkbook(fs);
}
else if (fileName.IndexOf(".xls") > 0)
{
// 2003版本
workbook = new HSSFWorkbook(fs);
}
var workbooks = workbook.GetEnumerator();
while (workbooks.MoveNext())
{
ISheet sheet = workbooks.Current as ISheet;
DataTable dt = new DataTable(sheet.SheetName);
var rows = sheet.GetRowEnumerator();
while (rows.MoveNext())
{
IRow row = rows.Current as IRow;
if (row.RowNum == 0)
{
row.Cells.ForEach(cell =>
{
dt.Columns.Add(cell.StringCellValue);
});
}
else
{
var dr = dt.NewRow();
for (int i = 0; i < row.Cells.Count; i++)
{
dr[i] = row.Cells[i].ToString();
}
dt.Rows.Add(dr);
}
}
tables.Add(dt);
}
return tables;
}
catch (Exception ex)
{
throw;
}
}
public static int GradeForSort(string classGrade)
{
var Level = classGrade switch
{
"一级" => 1,
"二级" => 2,
"三级" => 3,
"四级" => 4,
"五级" => 5,
"六级" => 6,
"七级" => 7,
"八级" => 8,
"九级" => 9,
"十级" => 10,
_ => 0,
};
return Level;
}
#endregion
}
}