• 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;
                }
            }
        }
    }


  • 相关阅读:
    sscanf 与 ssprintf 用法 (转载--https://www.cnblogs.com/Anker/p/3351168.html)
    PYTHON网络爬虫与信息提取[信息的组织与提取](单元五)
    PYTHON网络爬虫与信息提取[BeautifulSoup](单元四)
    PYTHON网络爬虫与信息提取[网络爬虫协议](单元二)
    Python网络爬虫与信息提取[request库的应用](单元一)
    scikit-learn实现ebay数据分析 的随笔
    machine leanring 笔记 vectorization
    machine learning 笔记 normal equation
    machine leanring 笔记 octave命令笔记
    UVa 1354 天平难题 Mobile Computing
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4014293.html
Copyright © 2020-2023  润新知