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;
}
}
}
}
NPOI 创建Excel,数据读取与写入的更多相关文章
- C#中NPOI操作excel之读取和写入excel数据
一.下载引用 下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2 ...
- 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法
本篇文章小编为大家介绍,用NPOI创建Excel.合并单元格.设置单元格样式.边框的方法.需要的朋友参考下 今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Ex ...
- 使用NPOI创建Excel
一.NPOI 函式庫: NPOI 函式庫檔案有七個,NPOI 函式庫可以在 http://npoi.codeplex.com 中下載,分別是: NPOI.DLL:NPOI 核心函式庫. NPOI.DD ...
- Java 创建 Excel 数据透视表
Excel 数据透视表具有强大的数据处理功能,能够使表格中的数据更加直观化.使用Excel 数据透视表,能方便用户快速的排序. 筛选各种数据,同时也能满足用户对不同数据汇总的需求.本文将介绍如何在Ja ...
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...
- C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位置&使用excel表达式收集数据&单元格映射&标题映射&模板文件的参数数据替换
本篇博客园是被任务所逼,而已有的使用nopi技术的文档技术经验又不支持我需要的应对各种复杂需求的苛刻要求,只能自己造轮子封装了,由于需要应对很多总类型的数据采集需求,因此有了本篇博客的代码封装,下面一 ...
- NPOI操作excel之读取excel数据
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 一.下载引用 去NPOI官网http://npoi.codeplex. ...
- NPOI 导入Excel和读取Excel
1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
随机推荐
- robotframework ride 版本兼容问题
在安装robotFramework ride的时候,必须需要使用wxpython 目前使用的wxpython 还必须是unicode 版本的要不然不支持中文 目前使用的 wx.version.2.8. ...
- shell oracle
#!/bin/sh traffic= rm -rf test.txt data=`sqlplus -S anoscfg/anoscfg <<EOF spool test.txt set f ...
- Minor GC、Major GC和Full GC之间的区别(转)
在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...
- eclipse weblogic debug 简易配置版
1. eclipse->help->marketplace->search->weblogic 1.1安装对应eclipse版本的weblogic plugin 查看eclip ...
- QT5.6,5.7,5.8的新特征以及展望
https://wiki.qt.io/New_Features_in_Qt_5.6 (跨平台High-DPI,改进WebEngine到45,支持WIN 10,Canvas3D,3D) https:// ...
- 使用svnkit 的相关实例及相关问题汇总
SVNKIT操作SVN版本库的完整例子 http://www.cnblogs.com/wangjiyuan/p/svnkitwanchenglizi.html#!comments 2.SVNClien ...
- SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里
表一: SPRD PRD_NO SPC 001 NULL 002 NULL 003 NULL ... ...
- information_schema模式表介绍 processlist
在mysql里,我们一般通过show (full)processlist查看当前连接情况,处理各种数据库问题.现在在information_schema模式下,5.5以后增加了processlist表 ...
- Delphi的没落有三个原因(比较贴切)
Delphi的没落有三个原因:1,Object pascal并没有像C/C++那样成为业内标准. 如果你使用C或C++写程序,可以在任何地方进行编译,例如Windows.Linux.手机,甚至是单片机 ...
- tmpfs(/dev/shm)
tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储.而且传统的ramdisk是个块 ...