zoukankan      html  css  js  c++  java
  • NPOI

    NPOI使用

    NPOI excel文件读取创建操作

    在C#中对Excel进行读写操作时,先引用两个个类库NPOI.dll和Ionic.Zip.dll。

    对EXcel文件读取操作:

    a)   首先,对文件的操作都需要使用FileStream

    FileStream file=new FileStream(“1.xls”,FileMode.Open,FileAccess.Read);

    b)   对Excel工作薄操作时使用引用的NPOI类库中的一个类HSSFWorkbook

    Workbook wkb=new HSSFWorkbook(filestream)

    //HSSFWorkbook类实现了Workbook接口

    对excel工作薄获取时需要HSSFWorkbook带参数的构造方法,参数为FileSteam的对象

    c)   拿到工作薄厚获取其中的表:

    Sheet sheet=wkb.GetSheet(“Sheet1”);//参数为工作薄中的表明

    d)   获取表中的每一行,需要进行遍历

    For(int i=0;i<sheet.LastRowNum+1;i++)//以最后一个为空的行为终点

    {

        Row row=sheet.GetRow(i);//获取第i行的数据

        For(int j=0;j<row.LastCellNum;j++)//以最后一个有数据的cell为终点

        {

           Cell cell=row.GetCell(j);//获取第j个表格数据

           If(cell!=null)

           {

               String str=cell.StringCellValue;//获取表格数据

    }

    }

    }

    完整的获取工作薄中数据

    // 读取Excel文件,使用流操作

                using (FileStream file = new FileStream("1.xls", FileMode.Open, FileAccess.Read))

                {

                   

                    // 工作薄使用Workbook表示

                    using (Workbook wkb = new HSSFWorkbook(file))

                    {

                        // 拿到工作簿以后

                        using (Sheet sheet = wkb.GetSheet("Sheet2"))

                        {

                            // 遍历行

                            // 这个以最后一个为空的行

                            for (int i = 0; i < sheet.LastRowNum + 1; i++)

                            {

                                Row row = sheet.GetRow(i);

                                // 单元格是以最后一个有数据的cell为最后一个

                                for (int j = 0; j < row.LastCellNum; j++)

                                {

                                    Cell cell = row.GetCell(j);

                                    if (cell != null)

                                    {

                                        string str = cell.StringCellValue;

                                        Console.Write(str + " ");

                                    }

                                    else

                                    {

                                        Console.Write(" ");

                                    }

                                }

                                Console.WriteLine();

                            }

                        }

                    }

                }

    创建工作薄

    由于依旧是对于文件的操作,所以用FileStream类先创建一个文件

    FileStream file=File.Create(“excel.xls”);

    创建一个新的工作薄

    Workbook wkb=new HSSFWorkbook()

    创建一个表

    Sheet sheet=wkb.CreateSheet(“sheetName”);

    创建行

    Row row=sheet.CreateRow(3);//创建行,参数为第几行

    Cell cell=row.CreateCell(3,CellType.STRING)//创建表格,参数为表格在第几列,类型

    cell.SetCellValue(“cellValue”);//表格中的数据

    wkb.Write(file);把工作薄写入到文件中去

      完整代码:

    using(FileStream file = File.Create("excel.xls"))

                {

                    using (Workbook wkb = new HSSFWorkbook())

                    {

                        // 创建Sheet等

                        using (Sheet sheet = wkb.CreateSheet("一个默认的名字"))

                        {

                            // 创建行

                            Row row = sheet.CreateRow(3);

                            Cell cell = row.CreateCell(3, CellType.STRING);

                            cell.SetCellValue("我是一个字符串");

                            wkb.Write(file);

                        }

                    }

             }

    数据导入

    先用文件流创创建一个Excel表

    FileStream file=new FileStream(“ExcelName.xls”,FileMode.Create,FileAccess.Write);

    Workbook wkb=new HSSFWorkbook()//创建工作薄

        Sheet sheet=wkb.CreateSheet(“sheetName”);//创建表

        StreamReader reader=new StreamReader(“name.txt”);获取文件读取流

        完整代码:

    FileStream file = new FileStream("name.xls", FileMode.Create, FileAccess.Write);

                using (Workbook wkb = new HSSFWorkbook())

                {

                    using (Sheet sheet = wkb.CreateSheet("名字"))

                    {

                        using (StreamReader reader = new StreamReader("name.txt"))

                        {

                            string temp;

                            int index = 0;

                            while ((temp = reader.ReadLine()) != null)

                            {

                                // 导入每一行

                                string[] arr = temp.Split(new char[] { ' ', ' ' }, StringSplitOptions.RemoveEmptyEntries);

                                // 姓名 性别 年龄

                                Row row = sheet.CreateRow(index);

                                // 姓名的单元格

                                Cell cellName = row.CreateCell(0, CellType.STRING);

                                cellName.SetCellValue(arr[0]);

                                row.CreateCell(1, CellType.STRING).SetCellValue(arr[1]);

                                row.CreateCell(2, CellType.NUMERIC).SetCellValue(Convert.ToInt32(arr[2]));

                                index++;

                            }

                            wkb.Write(file);

                        }

                    }

                }

                file.Close();

                file.Dispose();

    数据导出

    从数据库里把读出来的数据导出到excel表中。首先要先创建一个excel文件、工作薄、表。然后从数据库中逐条读取出数据再把数据放入到新创建的表中。

    FileStream file=File.OpenWrite(“Student.xls”);//创建一个excel文件

    Workbook wkb=new HSSFWorkbook()//创建工作薄

    Sheet sheet=wkb.CreateSheet(“sheetName”);创建表

    SqlDataReader reader=SQLHelper.ExevuteReader(sql);//从数据库中读取数据

    Row rowHead=sheet.CreateRow(0);//创建行,用于存放表头

    //创建表头

    for(int i=0;i<reader.FieldCount;i++)//遍历表

    {

        Cell cell=rowHead.CreateCell(I,CellType.STRING);//创建表格存放表头数据

        Cell.SetCellValue(reader.GetName(i));//获取数据库中每一列的列名作为表头存放在表中

    }

    把表中的数据存放到表中

    While(reader.Read())

    {

        Row rowBody=sheet.CreateRow(index);//创建行

        //为每一行创建表格存放数据库中读取出来的数据

        for(int i=0;i<reader.FieldCount;i++)//

        {

            Cell c=rowBody.CreateCell(i);

            c.SetCellValue(reader[i].ToString());

    }

    }

      完整代码:

    using (FileStream file = File.OpenWrite("Student.xls"))

                {

                    using (Workbook wkb = new HSSFWorkbook())

                    {

                        using (Sheet sheet = wkb.CreateSheet("入学学员:20120101-20121231"))

                        {

                            // 创建多少行

                            // 创建多少列

                            // 表头如何实现

                            using (SqlDataReader reader =

                                SQLHelper.ExecuteReader(sql))

                            {

                                int index = 1;

                                // 表头

                                // reader有一个GetName方法

                                // FieldCount属性

                                Row rowHead = sheet.CreateRow(0);

                                for (int i = 0; i < reader.FieldCount; i++)

                                {

                                    Cell cell = rowHead.CreateCell(i, CellType.STRING);

                                    cell.SetCellValue(reader.GetName(i));

                                }

                                while (reader.Read())

                                {

                                    // 写数据

                                    Row rowBody = sheet.CreateRow(index);

                                    for (int i = 0; i < reader.FieldCount; i++)

                                    {

                                        // 循环每一列

                                        Cell c = rowBody.CreateCell(i);

                                        c.SetCellValue(reader[i].ToString());

                                    }

                                    index++;

                                }

                                // 写到流中

                                wkb.Write(file);

                            }

                        }

                    }

             }

    案例

     

  • 相关阅读:
    Java Swing 空布局
    Java Swing 盒布局管理器
    遇到的JDBC的一些简单错误
    JVM内存调整
    jeesite中重启项目时用户头像丢失的疑惑
    Java服务突然失败:A fatal error has been detected by the Java Runtime Environment的总结
    从官网下载历史版本的java
    容器未来会怎么发展?容器安全怎么样?容器使用效果如何?
    What's The Next|Kube-OVN 社区线上 Meetup 预告!
    灵雀云发布云原生制品仓库Harbor企业版(Alauda Registry Service for Harbor)
  • 原文地址:https://www.cnblogs.com/reganLi/p/3412138.html
Copyright © 2011-2022 走看看