NPOI的使用

摘要:
NPOI:导入和导出Excel表格数据(当然,也有单词,但一般用途是Excel)准备:下载NPOI相关文件,http://npoi.codeplex.com解压并将项目引用添加到NPOI。dll,NPOI.OOXML。dll、NPOI.OpenXml4Net.dll。这涉及到对office版本的支持。office 2003版本或更早版本的excel文件为:。xls和2010年的版本为。xls格式

NPOI:  对Excel表数据的导入导出(当然也有word之类,不过一般用途为Excel)

准备:  下载NPOI相关文件,http://npoi.codeplex.com  解压,添加项目对:NPOI.dll、NPOI.OOXML.dll、NPOI.OpenXml4Net.dll 的引用,这个涉及到office版本的支持问题,

     office2003版本或更早的excel文件为: .xls  而2010的为  .xlsx ,支持2010版本的工作簿对象要为 XSSFWorkbook,这个同时也对前版本的支持,而HSSFWorkbook工作簿对象不支持2010版本或更新版本。

NPOI的用法:

 1、写入到excel工作表

IWorkbook wk = new XSSFWorkbook();  //创建一个工作簿的对象

ISheet sheet = wk.CreateSheet("sheetName");    //创建一个工作表

-->从数据库的一张表中导入数据到excel表举例

           //读取数据,给工作表添加行
           using (SqlDataReader reader = SqlHelper.ExcuteReader(sql))
            {
                if (reader.HasRows)
                {

                    //创建第一行,表示列名
                    IRow rowHead = sheet.CreateRow(0);   //第一行

                    for (int i = 0; i < reader.FieldCount; i++)                //获取列数
                    {
                        rowHead.CreateCell(i).SetCellValue(reader.GetName(i));  
                    }

                    int index = 1;
                    while (reader.Read())
                    {
                        //读取到一行,在excel中创建一行
                        IRow currentRow = sheet.CreateRow(index);
                        index++;
                     
                       //创建一个单元格
                        currentRow.CreateCell(0).SetCellValue(int.Parse(reader["UserId"].ToString()));
                        currentRow.CreateCell(1).SetCellValue(reader["UserName"].ToString());
                        currentRow.CreateCell(2).SetCellValue(reader["UserPwd"].ToString());//currentRow.CreateCell(3).SetCellValue(DateTime.Parse(reader["UserTime"].ToString()));

                         //创建一个单元格
                          ICell ic = currentRow.CreateCell(3);
                          //创建单元格样式
                          ICellStyle cellStyle = wk.CreateCellStyle();
                          cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("m/d/yyh:mm");

                          //设置当前单元格应用此样式
                          ic.CellStyle = cellStyle;
                          ic.SetCellValue(DateTime.Parse(reader["UserTime"].ToString()));
                        }
                    }
                }

-->写入到电脑磁盘中

            using (FileStream fsWrite = File.OpenWrite("new.xlsx"))
            {
                wk.Write(fsWrite);
            }
            //写入到电脑磁盘中,并命名为new.xlsx

2、从excel表中导出

-->导入到数据库:

         //创建一个读取execl表的流 ▲
            using (FileStream fsRead = File.OpenRead("workbookName.xlsx"))
            {
                //创建一个工作簿的对象▲
                IWorkbook wk = new XSSFWorkbook(fsRead);
                //遍历工作簿中的每一个工作表▲
                for (int i = 0; i < wk.NumberOfSheets; i++)
                {
                    //获取一个工作表的对象▲
                    ISheet sheet = wk.GetSheetAt(i);        //根据索引来获取
                                                          
                    //判断,如果该行存在才遍历

                    //写sql语句
                    string sql = "insert into Users (UserName,UserPwd,UserTime) values(@name,@pwd,@time)";

                    //遍历表中的行,这里要使用等于▲
                    for (int r = 1; r <=sheet.LastRowNum; r++)
                    {
                        //获取工作表中的每一行,如果该不为空才进行接下来的遍历

                        IRow row = sheet.GetRow(r);
                        SqlParameter[] parma = new SqlParameter[] {
                            new SqlParameter("@name", SqlDbType.NVarChar,16),
                            new SqlParameter("@pwd",SqlDbType.NVarChar,32),
                            new SqlParameter("@time",SqlDbType.DateTime)
                        };
                        if (row != null)
                        {
                            //遍历该行,获取每一个单元格▲
                            for (int c = 1; c < row.LastCellNum; c++)
                            {
                                //获取单元格▲
                                ICell cell = row.GetCell(c);
                                //判断,如果该单元格为空,则向数据库中插入DBNULL
                                if (cell == null || cell.CellType == CellType.Blank)
                                {
                                    parma[c - 1].Value = DBNull.Value;
                                }
                                else
                                {
                                    if (c == 3)
                                    {
                                        parma[c - 1].Value = DateTime.FromOADate(cell.NumericCellValue);

                                    }
                                    else
                                    {
                                        parma[c - 1].Value = cell.ToString();
                                     }
                                }
                            }
                        }
                      int n=  SqlHelper.ExcuteNonQuery(sql, parma); 
                    } 
                }
            }

总结:读取或者写入都需要一个流,然后都是创建工作簿对象,然后对应创建行,读取行,写入行,读取单元格,写入单元格,注意对excel行和单元格的遍历,根据逻辑对数据进行操作,

   有时候可以借助List集合,对数据进行循环遍历操作。

免责声明:文章转载自《NPOI的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASMCentOS6.5菜鸟之旅:中文编辑器忍痛放弃Sublime下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(5)C#工具箱-数据

1.DataSet 2.DataGridView dataGridView是一个显示网络数据的控件 (1)绑定dataSet DataSet ds = newDataSet(); //执行数据库查询,返回一个dataset ds =DB.Query(); //服务端,给dataset的table[0]表起名叫tab。绑定时一定要带上定义的表名 //光标默认...

常用快捷键大全

一、系统快捷键 F1 帮助F2 改名F3 搜索 F4 地址F5 刷新F6 切换F8 安全模式F10 菜单F11 全屏INS 插入模式PRTSCSYSRQ 截屏CAPSLOCK 大写字母锁定DELETE 删除ESC 退出HOME 到开始或主程序END 到结尾PAGEUP 向上翻页PAGEDOWN 向下翻页TAB 改变焦点 CTRL+C 复制CTRL+X...

C#中NPOI操作excel之读取和写入excel数据

一、下载引用 下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2007版需要此dll)。 二、excel转datatable类 [csharp]view plaincopy usingSystem; usingSy...

gridControl通过设置条件,改变单元格颜色

我现在用gridControl,需要改变单元格颜色。(标准值-偏差负)<=检测值<=(检测值+偏差正)之外,检测值就显示红色,或者背景设置成红色。用了RowCellStyle和CustomDrawCell都无法达到效果。而且出现程序卡死的情况。网上有人说gridcontrol有Apperance-----Format conditions 但是...

NPOI导出EXCEL数据量大,分多个sheet显示数据

//NPOIHelper  类关键代码 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.IO;using NPOI.HSSF.UserModel;using System.Coll...

tp5.1 使用PhpSpreadsheet 读写excel

PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式,例如Excel和LibreOffice Calc。 官方文档:https://phpspreadsheet.readthedocs.io/en/latest/ php 版本要求 使用PhpSpreadsheet开发的PHP 7.2或更高版本。 其他...