c# 增删改查office文件_引用NPOI库

介绍: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或者“”,下一行上移的方式。后续再补充。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值