NPOI 创建Excel,数据读取与写入

<1>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Formula.Functions;
using System.IO;
using System.Text;

namespace 导入导出Excel
{
    /// <summary>
    /// Excel导入导出 的摘要说明
    /// </summary>
    public class Excel导入导出 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/x-excel";

            //------------------------------------------创建Excel,并将数据写入--------  

            HSSFWorkbook workbook = new HSSFWorkbook();//创建一个Excel文件    

            ISheet sheet = workbook.CreateSheet("Sheet1");//创建一个页   

            IRow row = sheet.CreateRow(0); //创建sheet页的第0行(索引从0開始)    

            row.CreateCell(0, CellType.String).SetCellValue("C罩杯");//创建第0行第0列string类型表格,并赋值"A罩杯"
            row.CreateCell(1, CellType.String).SetCellValue("D罩杯");//创建第0行第1列string类型表格,并赋值"B罩杯"
            row.CreateCell(2, CellType.String).SetCellValue("A罩杯");//创建第0行第2列string类型表格,并赋值"C罩杯"
            row.CreateCell(3, CellType.String).SetCellValue("F罩杯");//创建第0行第3列string类型表格,并赋值"D罩杯"
            row.CreateCell(18, CellType.Numeric).SetCellValue(5);  //创建第0行第17列Numeric类型表格,并赋值5

            //得到一个excel.xls文件的文件流 【开打指定路径下的文件,假设文件不存在则创建文件,并打开,以进行写入】
            using (Stream stream = File.OpenWrite("d:/excel.xls"))
            {

                workbook.Write(stream); //将这个workbook文件写入到stream流中
            }

            //------------------------------------------读取Excel的数据-------------  

            using (Stream stream1 = File.OpenRead("d:/excel.xls"))
            {

                //读取workbook这个工作薄的第0个Sheet(GetSheetAt(0)),第0行(GetRow(0)),第0格(GetCell(0))的值
                //string s = workbook.GetSheetAt(0).GetRow(0).GetCell(0).StringCellValue;  

                int cellRows = sheet.LastRowNum;

                //获取workbook中sheet页的最后一行的行号【行号从0開始】
                int sheetRowCount = sheet.LastRowNum;

                //这个循环是获取shee1页中"全部的行中"具有"最多列"的"列数"
                int maxCellCount = 0;
                for (int i = sheet.FirstRowNum; i <= cellRows; i++) //遍历sheet页的全部的行
                {
                    row = sheet.GetRow(i); //获取当前行
                    if (row == null) ////这一句非常关键,由于没有数据的行默认是null
                    {
                        continue; //既然当前行无数据那就结束本次循环,进行下次循环
                    }
                    else
                    {
                        int cellCount = row.LastCellNum;  //获取当前行的列数
                        if (cellCount > maxCellCount)    //假设当前行的列数大于"最大列数maxCellCount",那么我就将当前行的列数设置为最大的列数
                        {
                            maxCellCount = cellCount;  //for循环结束后,maxCellCount就得到了"全部的行中"具有"最多列"的"列数"
                        }
                    }
                }

                //-----------------创建一个新的Excel文件 workbook2工作薄,并将workbook的内容拷贝到workbook2中---------------------

                HSSFWorkbook workbook2 = new HSSFWorkbook();//创建一个workbook2工作薄,事实上就是我们常说的Excel文件    

                ISheet sheet2 = workbook2.CreateSheet("Sheet1");//为workbook2工作创建一个Sheet1页   

                //依据sheet页的总行数,来创建sheet2页的总行数
                for (int i = 0; i <= cellRows; i++)
                {
                    row = sheet.GetRow(i);
                    if (row == null)  //假设数据源的当前行为null ,就结束本次循环,開始下次循环
                    {
                        continue;
                    }
                    else
                    {
                        sheet2.CreateRow(i); //否则就 创建workbook2中sheet2页的第i行
                    }

                    //依据shee1页的总列数,创建shee2页的总列数
                    for (int j = 0; j < maxCellCount; j++)
                    {
                        ICell cell = row.GetCell(j);
                        if (cell != null)  //假设数据源的当前格不为null
                        {
                            if (cell.CellType == CellType.String) //cell.CellType是获取数据源当前格的数据类型,假设它的数据类型为String类型
                            {
                                string sourceCellValue = sheet.GetRow(i).GetCell(j).StringCellValue; //获取数据源当前格的值

                                //将这个值赋给workbook2中sheet2页的第i行,第j列
                                sheet2.GetRow(i).CreateCell(j, CellType.String).SetCellValue(sourceCellValue);
                            }

                            if (cell.CellType == CellType.Numeric) //假设数据源的当前格的类型为Numeric类型
                            {
                                double sourceCellValue = sheet.GetRow(i).GetCell(j).NumericCellValue;
                                sheet2.GetRow(i).CreateCell(j, CellType.Numeric).SetCellValue(sourceCellValue);
                            }

                        }

                    }

                }

                //开打指定路径下的文件,假设文件不存在则创建文件,并打开,以进行写入
                using (Stream stream = File.OpenWrite("d:/excel2.xls"))
                {
                    workbook2.Write(stream);  //将这个workbook2文件写入到stream流中
                }

                context.Response.Write("OK");  //提示OK
            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Formula.Functions;
using System.IO;
using System.Text;

namespace 导入导出Excel
{
    /// <summary>
    /// Excel导入导出 的摘要说明
    /// </summary>
    public class Excel导入导出 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            //context.Response.ContentType = "application/x-excel";
            string name = HttpUtility.UrlEncode("Excel文件.xls"); //给要下载的文件命名为Excel文件.xls

            context.Response.AddHeader("Content-disposition", "attachment; filename="+name);//加入?下面载文件的形式打开文件的报文头

            //------------------------------------------创建Excel,并将数据写入--------  

            HSSFWorkbook workbook = new HSSFWorkbook();//创建一个Excel文件    

            ISheet sheet = workbook.CreateSheet("Sheet1");//创建一个页   

            IRow row = sheet.CreateRow(0); //创建sheet页的第0行(索引从0開始)    

            row.CreateCell(0, CellType.String).SetCellValue("C罩杯");//创建第0格
            row.CreateCell(1, CellType.String).SetCellValue("D罩杯");//创建第二格并为赋值
            row.CreateCell(2, CellType.String).SetCellValue("A罩杯");//创建第三格并为赋值
            row.CreateCell(3, CellType.String).SetCellValue("F罩杯");//创建第四格并为赋值
            row.CreateCell(18, CellType.Numeric).SetCellValue(5);//创建第17格并为赋值

            //得到一个excel.xls文件的文件流 【开打指定路径下的文件,假设文件不存在则创建文件,并打开,以进行写入】
            using (Stream stream = File.OpenWrite("d:/excel.xls"))
            {

                workbook.Write(stream); //将这个workbook文件写入到stream流中
            }

            //------------------------------------------读取Excel的数据-------------  

            using (Stream stream1 = File.OpenRead("d:/excel.xls"))
            {

                //读取workbook这个工作薄的第0个Sheet(GetSheetAt(0)),第0行(GetRow(0)),第0格(GetCell(0))的值
                //string s = workbook.GetSheetAt(0).GetRow(0).GetCell(0).StringCellValue;  

                int cellRows = sheet.LastRowNum;

                //获取workbook中sheet页的最后一行的行号【行号从0開始】
                int sheetRowCount = sheet.LastRowNum;

                //这个循环是获取shee1页中"全部的行中"具有"最多列"的"列数"
                int maxCellCount = 0;
                for (int i = sheet.FirstRowNum; i <= cellRows; i++) //遍历sheet页的全部的行
                {
                    row = sheet.GetRow(i); //获取当前行
                    if (row == null) ////这一句非常关键,由于没有数据的行默认是null
                    {
                        continue; //既然当前行无数据那就结束本次循环,进行下次循环
                    }
                    else
                    {
                        int cellCount = row.LastCellNum;  //获取当前行的列数
                        if (cellCount > maxCellCount)    //假设当前行的列数大于"最大列数maxCellCount",那么我就将当前行的列数设置为最大的列数
                        {
                            maxCellCount = cellCount;  //for循环结束后,maxCellCount就得到了"全部的行中"具有"最多列"的"列数"
                        }
                    }
                }

                //-----------------创建一个新的Excel文件 workbook2工作薄,并将workbook的内容拷贝到workbook2中---------------------

                HSSFWorkbook workbook2 = new HSSFWorkbook();//创建一个workbook2工作薄,事实上就是我们常说的Excel文件    

                ISheet sheet2 = workbook2.CreateSheet("Sheet1");//为workbook2工作创建一个Sheet1页   

                //依据sheet页的总行数,来创建sheet2页的总行数
                for (int i = 0; i <= cellRows; i++)
                {
                    row = sheet.GetRow(i);
                    if (row == null)  //假设数据源的当前行为null ,就结束本次循环,開始下次循环
                    {
                        continue;
                    }
                    else
                    {
                        sheet2.CreateRow(i); //否则就 创建workbook2中sheet2页的第i行
                    }

                    //依据shee1页的总列数,创建shee2页的总列数
                    for (int j = 0; j < maxCellCount; j++)
                    {
                        ICell cell = row.GetCell(j);
                        if (cell != null)  //假设数据源的当前格不为null
                        {
                            if (cell.CellType == CellType.String) //cell.CellType是获取数据源当前格的数据类型,假设它的数据类型为String类型
                            {
                                string sourceCellValue = sheet.GetRow(i).GetCell(j).StringCellValue; //获取数据源当前格的值

                                //将这个值赋给workbook2中sheet2页的第i行,第j列
                                sheet2.GetRow(i).CreateCell(j, CellType.String).SetCellValue(sourceCellValue);
                            }

                            if (cell.CellType == CellType.Numeric) //假设数据源的当前格的类型为Numeric类型
                            {
                                double sourceCellValue = sheet.GetRow(i).GetCell(j).NumericCellValue;
                                sheet2.GetRow(i).CreateCell(j, CellType.Numeric).SetCellValue(sourceCellValue);
                            }

                        }

                    }

                }

                workbook2.Write(context.Response.OutputStream); //将文件写入到一个context的输出流中,在用户的浏览器中显示出来,注意,我在开头加入?了一个context.Response.AddHeader("Content-disposition", "attachment; filename="+name);报文头。意思是让它下面载文件的形式打开

                //开打指定路径下的文件,假设文件不存在则创建文件,并打开,以进行写入
                //using (Stream stream = File.OpenWrite("d:/excel2.xls"))
                //{
                //    workbook2.Write(stream);  //将这个workbook2文件写入到stream流中
                //}

                context.Response.Write("OK");  //提示OK
            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
时间: 2024-10-17 21:56:17

NPOI 创建Excel,数据读取与写入的相关文章

利用Python将excel数据读取到word表格

在工作中可能需要两者对excel和word进行转化,今天介绍例如Python 将excel转word表格 看图,我需要将这份excel文档转word表格: 思路: 1.创建需要的表格: 2.读取excel文档: 3.将excel文档数据写入word表格对应的位置: 4.循环 需要用到的模块 创建表格,由于我需要的表格需要进行合并处理,所以使用merge合并单元格 接下来,读取excel文档数据 然后,将excel数据写入到已创建的word表格中 至此我们就可以将一条excel数据读取到word表

NPOI 导入Excel和读取Excel

1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 3.POI读取Excel有两种格式一个是HSSF,另一个是XSSF. HSSF和XSSF的区别如下: HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the

基于NPOI的Excel数据导入

从Excel导入数据最令人头疼的是数据格式的兼容性,特别是日期类型的兼容性.为了能够无脑导入日期,折腾了一天的NPOI.在经过测试确实可以导入任意格式的合法日期后,写下这篇小文,与大家共享.完整代码请移步:https://github.com/xuanbg/Utility 概述: 这个帮助类是一个泛型类,泛型参数对应的实体类还起到模板的作用.如果你的Excel文件使用与实体类不同的列标题的话,可以通过给属性加上Alias特性,将列标题和属性进行对应.例如: Excel格式如图: 实体类: 1 u

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.Collections; using System.Web; namespace Yikeba_htmlConverter { publi

NPOI 创建Excel 设置宽度 样式 颜色对比表

前两天用NPOI来操作Office软件,在使用的时候有点问题,也有收获,就做个笔记 记录下来,主要做的事数据的导出功能.一些公共的方法,做个笔记. 更多的详细内容可以到NPOI的官方教程去看  http://tonyqus.sinaapp.com/ 1.引用NPOI 这个,使用第三方类库就要添加DLL ,我使用的是1.2.5的版本 ,具体的版本可以在属相中找到 如下图. 貌似最新的版本到了2.0了 DLL文件点击下载 2.创建简单的一个Excel MemoryStream ms = new Me

python + Excel数据读取(更新)

data.xlsx 数据如下: import xlrd #1.读取Excel数据# table = xlrd.open_workbook("data.xlsx","r")# print("获取excel的所有标签:",table.sheets())# for sheet in table.sheets():# print(sheet) #2.读取第一个标签 第二个标签 ....# table = xlrd.open_workbook("

用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Excel中格式的设置,以及单元格的合并等等.下面就介绍下,使用NPOI类库操作Excel的方法. 1.首先我们先在内存中生成一个Excel文件,代码如下:   HSSFWorkbook book = new HSSFWorkbook();        ISheet sheet = book.CreateSheet("Sheet1"); 2.然后在新创建的sheet里面,创建我们的行和列,代码如下

NPOI导入Excel数据

using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System;using System.Collections.Generic;using System.Data;using System.IO;using System.Linq;using System.Text; namespace Common{ ///使用此代码需要添加NPOI的dll引用 public class Exc

NPOI 导出excel数据超65535自动分表

工作上遇到的问题,网上找了一些资料 整理了一个比较可行的解决方案. NPOI 大数据量分多个sheet导出 代码段 /// <summary> /// DataTable转换成Excel文档流,并输出到客户端 /// </summary> /// <param name="table"></param> /// <param name="response"></param> /// <pa