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