介绍:NPOI是一个基于.NET的API,用于读写微软的OLE 2 Compound Document formats,如Microsoft Office Excel和Word。它是Apache POI项目的.NET移植版本,允许开发者在没有安装Office的情况下处理这些格式的文件。
处理word:通过XWPFDocument类来创建、读取和修改Word(.doc)文件。
还有一个 在没有安装Office的情况下可以处理表格的库,叫closedxm库,可参考单元格样式 — ClosedXML 0.102.0 文档
添加库
第一个,选中后 点击右边的安装。
进入代码
表格
引用
using System.IO;//处理文件
using NPOI.SS.UserModel;//excel的接口和类
using NPOI.XSSF.UserModel;//处理xlsx表格
using NPOI.HSSF.UserModel;//处理xls表格
创建表格
//创建新excel
XSSFWorkbook workBook = new XSSFWorkbook();
//创建新excel其中的工作表
ISheet sheet = workBook.CreateSheet("sheet1");
//创建新的一行
IRow row = sheet.CreateRow(0);
//创建这一行上的一个单元格
ICell cell=row.CreateCell(0);
ICell cell1 = row.CreateCell(1);
ICell cell2 = row.CreateCell(2);
ICell cell3 = row.CreateCell(3);
//设置第一个单元格的样式:颜色,字体,对齐方式等
ICellStyle style = workBook.CreateCellStyle();
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Right;
IFont font = workBook.CreateFont();
font.Boldweight = (short)FontBoldWeight.Bold;
style.SetFont(font);
cell.CellStyle = style;
//单元格中添加值
cell.SetCellValue("时间");
cell1.SetCellValue("time");
cell2.SetCellValue((short)10);
//合并第一行的2列3列单元格
var region = new CellRangeAddress(0, 0, 2, 3);
sheet.AddMergedRegion(region);
//保存表格并关闭释放
FileStream fs = new FileStream(excelPath, FileMode.Create);
workBook.Write(fs);
fs.Close();
fs.Dispose();
workBook.Close();
workBook.Dispose();
效果如下:
读取表格
//先用datatable装这个表格。再把datatable放到datagridview控件中
DataTable dt = new DataTable();
//打开该表格
FileStream fs = new FileStream(excelPath, FileMode.Open, FileAccess.Read);
//XSSFWorkbook workBook = new XSSFWorkbook(fs);
//XSSFWorkbook workBook2 = new HSSFWorkbook(fs);//如果打开xls表格用这行代码
//也可以判断文件扩展名选择合适的Workbook实现
IWorkbook workBook;
if (Path.GetExtension(excelPath).ToLower() == ".xlsx")
{
workBook = new XSSFWorkbook(excelPath);//xlsx表格
}
else
{
workBook = new HSSFWorkbook(fs); // xls表格
}
//获取其中的工作表
ISheet sheet = workBook.GetSheetAt(0);//根据sheet序号获取
//ISheet sheet = workBook.GetSheet(sheet1);//根据sheet名字获取
for(int rowIndex = 0;rowIndex <= sheet.LastRowNum; rowIndex++)
{
DataRow dataRow = dt.NewRow();
IRow row = sheet.GetRow(rowIndex);
if(rowIndex == 0)
{
for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)//设置第一行为表头
{
ICell cell = row.Cells[cellIndex];
dt.Columns.Add(Convert.ToString(cell));//对于合并单元格的处理会异常
}
}
else
{
for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)
{
ICell cell = row.Cells[cellIndex];
dataRow[cellIndex + 1] = cell;
}
dt.Rows.Add(dataRow);
}
}
fs.Close();
fs.Dispose();
workBook.Close();
workBook.Dispose();
this.dataGridView1.DataSource = dt;
效果如下
删除表格
string excelPath = Path.Combine(System.Windows.Forms.Application.StartupPath, "示例表格.xlsx");
if (File.Exists(excelPath))
{
File.Delete(excelPath);
}
删除表格中的一格或者一行,可以采用使其中的一格为null或者“”,下一行上移的方式。后续再补充。