zoukankan      html  css  js  c++  java
  • 使用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是自己建的一个实体类,可以替换成其它的。

  • 相关阅读:
    Eclipse MarketPlace 打不开,对话框闪退
    docker 创建容器的时候的坑
    win7 设置docker加速器
    postgres常用命令
    docker加速器配置
    docker 安装 postgresql
    Spring Cloud-服务的注册与发现之服务注册中心(Eureka Server)
    redis incr自增指定的无限期 key 删除问题
    redis读取自增时候指定的key问题
    docker 安装 redis
  • 原文地址:https://www.cnblogs.com/lingxin/p/9233431.html
Copyright © 2011-2022 走看看