插件介绍:使用是.net core里面的NPOI插件,这个插件专门是针对excel进行读写的一款插件,使用起来非常简单,安装过程就不详细说了,大家自己百度哈,我这里使用的是插件里面的XSSFWorkbook类。
POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。大家注意看下文件的扩展名,扩展名不对会导致文件无法读写。
HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。
XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的支持低内存占用的操作方式,扩展名为.xlsx。
1、读取Excel数据
#region 读取文件
public static void OpenExcel(string path)
{
try
{
using (fs = File.OpenRead(path)) //打开ecel文件
{
wk = new HSSFWorkbook(fs);//把xls文件中的数据写入wk中
for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是myxls.xls中总共的表数
{
ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
for (int j = 3; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
{
IRow row = sheet.GetRow(j); //读取当前行数据
if (row != null)
{
ICell cell = row.GetCell(4); //获取员工入职日期
ICell cell1 = row.GetCell(6); //获取员工年假余额
if (!string.IsNullOrEmpty(cell.ToString()))
{
var now_date = DateTime.Now;
double days = 0;
var reality_date = Convert.ToDateTime(cell.ToString());
int days_difference = (int)(now_date - reality_date).TotalDays;
var year = Math.Round(((decimal)days_difference / 365), 1);
if (year < 1)
{
days = 1.25;
}
else if (year >= 1 && year < 2)
{
days = 1.5;
}
else if (year >= 2 && year < 3)
{
days = 1.75;
}
else if (year >= 3 && year < 4)
{
days = 2;
}
else if (year >= 4 && year < 5)
{
days = 2.25;
}
else
{
days = 2.5;
}
var value =Math.Round( Convert.ToDecimal(cell1.ToString()) + Convert.ToDecimal(days),2).ToString();
Excel.SetCellValue(sheet, j, 6,value); //修改年假数据
}
}
}
}
}
}
catch (Exception ex)
{
}
}
#endregion
2、修改Excel数据
#region 修改excel
public static void SetCellValue(ISheet sheet, int row, int column, String value)
{
ICell tmpCell = sheet.GetRow(row).GetCell(column);
tmpCell.SetCellValue(value);
}
#endregion
3、保存Excel表格
#region 保存文件
public static void SaveExcel(String path)
{
FileStream fs2 = File.Create(path);
wk.Write(fs2);
fs2.Close();
Console.WriteLine("文件修改成功!!!");
}
#endregion