使用NPOI操作Excel导入导出数据

本文介绍了使用NPOI进行Excel数据操作的优势,包括免安装Office、更人性化的API、省去维护成本等。详细阐述了如何将DataGridView中的数据导出到Excel表中及如何导入Excel数据的步骤。强调了NPOI的强大之处在于其能理解和导入OLE2文档结构,这是许多Excel读写库所不具备的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用NPOI的优势:
1、你不需要在服务器上安装微软的Office,可以避免版权问题。
2、使用起来比Office PIAAPI更加方便,更人性化。
3、你不用去花大力气维护NPOINPOI Team会不断更新、改善NPOI,绝对省成本。
NPOI之所以强大,并不是因为它支持导出Excel,而是因为它支持导入Excel,并能“理解”OLE2文档结构,这也是其他一些Excel读写库比较弱的方面。通常,读入并理解结构远比导出来得复杂,因为导入你必须假设一切情况都是可能的,而生成你只要保证满足你自己需求就可以了,如果把导入需求和生成需求比做两个集合,那么生成需求通常都是导入需求的子集,这一规律不仅体现在Excel读写库中,也体现在pdf读写库中,目前市面上大部分的pdf库仅支持生成,不支持导入。



操作步奏:
1.将NPOI.dll和Ionic.Zip.dll放到项目中

2.添加引用
    NPOI.dll和Ionic.Zip.dll

3.引用命名空间
    using NPOI.HSSF.UserModel;
    using NPOI.SS.UserModel;

4.编写代码操作Excel
/// <summary>
        /// 使用NPOI将dataGridView里的数据导出到Excel表中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExcel_Click(object sender, EventArgs e)
        {
            //打开一个对话框,选择或输入保存excel文件的地址
            SaveFileDialog sdfExport = new SaveFileDialog();
            sdfExport.Filter = "Excel文件|*.xls";
            if (sdfExport.ShowDialog()!=DialogResult.OK)
            {
                return;
            }
            //获取excel文件名
            string fileName = sdfExport.FileName;

            //创建一个workbook
            HSSFWorkbook workbook = new HSSFWorkbook();
            //设置工作表名
            ISheet sheet = workbook.CreateSheet("学生信息");

            //创建表头行
            IRow rowHeader = sheet.CreateRow(0);
            //给每个单元格设值
            rowHeader.CreateCell(0, CellType.STRING).SetCellValue("编号");
            rowHeader.CreateCell(1, CellType.STRING).SetCellValue("密码");
            rowHeader.CreateCell(2, CellType.STRING).SetCellValue("姓名");
            rowHeader.CreateCell(3, CellType.STRING).SetCellValue("地址");
            rowHeader.CreateCell(4, CellType.STRING).SetCellValue("出生日期");

            //循环dataGridView取出每一条数据(如果是集合或数组,操作一样)
            for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
            {
                //用Student接收每个对象
                Student stu = this.dataGridView1.Rows[i].DataBoundItem as Student;

                //循环列
                for (int j = 0; j < this.dataGridView1.ColumnCount; j++)
                {
                    //开始创建内容行并放入数据
                    IRow row = sheet.CreateRow(i + 1);
                    row.CreateCell(0, CellType.STRING).SetCellValue(stu.StudentNo);
                    row.CreateCell(1, CellType.STRING).SetCellValue(stu.LoginPwd);
                    row.CreateCell(2, CellType.STRING).SetCellValue(stu.StudentName);
                    row.CreateCell(3, CellType.STRING).SetCellValue(stu.Address);

                    //创建一个表格样式
                    ICellStyle styledate = workbook.CreateCellStyle();
                    //创建一个表格格式
                    IDataFormat format = workbook.CreateDataFormat();
                    //格式具体那些请看单元格右键中的格式,有说明(此处用于存日期类型)
                    styledate.DataFormat = format.GetFormat("yyyy\"年\"m\"月\"d\"日\"");

                    //创建一个存放日期的单元格
                    ICell cellIndate = row.CreateCell(4, CellType.NUMERIC);//日期
                    cellIndate.CellStyle = styledate;//指定此单元格样式
                    cellIndate.SetCellValue(stu.BornDate);//将日期赋给此单元格
                }
                
            }

            //保存数据
            using (Stream stream =File.OpenWrite(fileName))
            {
                workbook.Write(stream);
            }
        }

        /// <summary>
        /// 使用NPOI导入Excel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImport_Click(object sender, EventArgs e)
        {
            //打开一个对话框,选择要打开的excel文件
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel文件|*.xls";

            if (file.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            //获取excel文件名
            string fileName = file.FileName;

            //读取Excel文件中的数据
            using (Stream stream = File.OpenRead(fileName))
            {
                //创建一个workbook
                HSSFWorkbook workbook = new HSSFWorkbook(stream);
                //取出Excel表中的值
                string value = workbook.GetSheetAt(0).GetRow(0).GetCell(1).StringCellValue;
                MessageBox.Show(value);
            }
        } 


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值