C#使用NPOI与EXCEL交互-初识

最近学习C#要用到读写.xlsx文件,查了一些资料。

NPOI是由Java项目改编而来,背景和优势在此略过,类库也很容易找到。

使用前,需要在引用中添加NPOI的类库。我找到的类库有很多个dll文件,不知道哪些是必需的,就全部导入到项目中了。

使用NPOI写入EXCEL文件主要有一下几个步骤:

    1,新建一个工作表对象,代表一个Excel文件

    2,在工作表对象中新建sheet

    3,在sheet中新建行

    4,在行中新建单元格

    5,往单元格中添加数据

    6,创建文件流,把工作表对象的内容写入文件保存。

        //把内容写入excel文件
        static void Write(string fileName)
        {
            //0.引用NOPI等类库
            //1.新建工作簿-新建xls文件用HSSFWorkbook,新建xlsx文件用XSSFWorkbook
            //写入文件的workbook构造函数不需要参数
            IWorkbook workbook = new XSSFWorkbook();
            //2.新建sheet
            ISheet sheet = workbook.CreateSheet("表1");
            for (int i = 0; i < 10; i++)
            {
                //3.新建一行
                IRow row = sheet.CreateRow(i);
                
                //4.新建单元格,并在每个单元格写入内容
                for (int j = 0; j < 5; j++)
                    row.CreateCell(j).SetCellValue(string.Format("第{0}行第{1}列",i+1,j+1));
            }
            //5.创建文件流,将表格内容写入文件
            using (FileStream writer = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))
            {
                workbook.Write(writer);
            }
            //5'.文件流的另一种创建方法
            using (FileStream writer = File.OpenWrite(fileName))
            {
                workbook.Write(writer);
            }
        }

调用此函数,得到结果如图:


读取文件也类似:

    1,以文件名作为参数,新建一个工作表对象,把文件映射为一个工作表

    2,遍历工作表的sheet

    3,遍历sheet中的行

    4,遍历行中的单元格

    5,从单元格中以适当的格式读取数据,保存到其它的对象中。

       //从excel读取文件
        static List<string> Read(string filePath)
        {
            List<string> list = new List<string>();
            string strTemp = "";
            //1.新建工作簿,并把表格文件映射到工作簿
            IWorkbook workbook = new XSSFWorkbook(filePath);
            //2.从文件遍历读入sheet
            for(int i=0;i<workbook.NumberOfSheets;i++)
            {
                ISheet sheet = workbook.GetSheetAt(i);
                //3.从sheet中遍历读入行
                for (int j = 0; j <= sheet.LastRowNum; j++)
                {
                    IRow row = sheet.GetRow(j);
                    //4.读取每个单元格的内容
                    strTemp = "";
                    foreach (var item in row.Cells)
                    {
                        strTemp += "\t";
                        strTemp += item.StringCellValue;
                    }
                    //5.将内容以合适的格式保存到内存
                    list.Add(strTemp);
                }
            }
            return list;
        }

调用此函数读取上一步写入生成的文件,并遍历输出返回的list:



猜你喜欢

转载自blog.csdn.net/liusiweix/article/details/80190301