• 使用NPOI读取Excel文件


    1.添加NPOI组件,利用VS自带的NuGet管理,右键项目选择管理NuGet程序包,搜索NPOI选择合适版本安装即可,安装完成会自动添加引用。

    2.在使用该组建的页面引入命名空间:

    using NPOI.SS.UserModel;
    using NPOI.HSSF.UserModel;
    using NPOI.XSSF.UserModel;
    

    3.项目中新建了一个操作Excel文件的类HandleExcel

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.IO;
    using NPOI.SS.UserModel;
    using NPOI.HSSF.UserModel;
    using NPOI.XSSF.UserModel;
    
    namespace AddressList.lib
    {
        public class HandleExcel
        {
            #region 读取Excel文件,返回数据集合
            /// <summary>
            /// 读取Excel文件,返回数据集合
            /// </summary>
            /// <param name="fname">要读取的Excel文件地址</param>
            public List<excels> ReadExcel(string fname)
            {
                //首先根据需要读取的文件创建一个文件流对象
                using (FileStream fs = File.OpenRead(fname))
                {
                    IWorkbook workbook = null;
                    //这里需要根据文件名格式判断一下
                    //HSSF只能读取xls的
                    //XSSF只能读取xlsx格式的
                    if (Path.GetExtension(fs.Name) == ".xls")
                    {
                        workbook = new HSSFWorkbook(fs);
                    }
                    else if (Path.GetExtension(fs.Name) == ".xlsx")
                    {
                        workbook = new XSSFWorkbook(fs);
                    }
    
                    //用来存储读取出数据的集合
                    List<excels> list = new List<excels>();
    
                    //因为Excel表中可能不止一个工作表,这里为了演示,我们遍历所有工作表
                    for (int i = 0; i < workbook.NumberOfSheets; i++)
                    {
                        //得到当前sheet
                        ISheet sheet = workbook.GetSheetAt(i);
                        //也可以通过GetSheet(name)得到
                        //遍历表中所有的行
                        //注意这里加1,这里得到的最后一个单元格的索引默认是从0开始的
    
                        for (int j = 0; j < sheet.LastRowNum + 1; j++)
                        {
                            //得到当前的行
                            IRow row = sheet.GetRow(j);
    
                            if (row.Cells.Count() > 0)
                            {
                                excels ex = new excels();
                                ICell cell = row.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.gsname = cell.StringCellValue;
    
                                cell = row.GetCell(1, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.lxname = cell.StringCellValue;
    
                                cell = row.GetCell(2, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.prof = cell.StringCellValue;
    
                                cell = row.GetCell(3, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.phone = cell.StringCellValue;
    
                                cell = row.GetCell(4, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.address = cell.StringCellValue;
    
                                cell = row.GetCell(5, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.xingzhi = cell.StringCellValue;
    
                                cell = row.GetCell(6, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                ex.product = cell.StringCellValue;
    
                                list.Add(ex);
                            }
                            //遍历每行所有的单元格
                            //注意这里不用加1,这里得到的最后一个单元格的索引默认是从1开始的
                            /*for (int k = 0; k < row.LastCellNum; k++)
                            {
                                //得到当前单元格
                                ICell cell = row.GetCell(k, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                                cell.SetCellType(CellType.String);
                                s += cell.StringCellValue;
                            }*/
                        }
                    }
                    return list;
                }
            }
            #endregion
        }
    }
    

    4.使用该类进行读取即可。

    注:其中excels是自己建的一个实体类,可以替换成其它的。

  • 相关阅读:
    Java单例模式
    Java中子类覆盖父类方法所必须满足的条件
    Java中break、continue及标签等跳转语句的使用[下]
    CSS控制图片显示区域
    rabbitmq 用户管理
    rabbitmq web管理页面无法访问
    centos6.5 以 zero-dependency Erlang from RabbitMQ 搭建环境
    docker 解决:Get http:///var/run/docker.sock/v1.19/version: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
    解决:java.lang.ArrayIndexOutOfBoundsException: 160 at com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(SerializeWriter.java:868)
    centos 解决:Another app is currently holding the yum lock; waiting for it to exit
  • 原文地址:https://www.cnblogs.com/lingxin/p/9233431.html
Copyright © 2020-2023  润新知