使用NPOI操纵Excle,并输入到客户端
NPOI下载:http://files.cnblogs.com/files/gosky/NPOI_2.2.0.0.zip
导入以下5个引用:
ICSharpCode.SharpZipLib.dll
NPOI.dll
NPOI.OOXML.dll
NPOI.OpenXml4Net.dll
NPOI.OpenXmlFormats.dll
1.将Excle数据导入到DataTable中
新建工具类: 根据上传文件后缀名判断 xls使用 ImportExcelFile2003方法 xlsx使用ImportExcelFile2007方法
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using NPOI.SS.Formula.Eval;
/// <summary>
/// NPOIExcelHelper 的摘要说明
/// </summary>
public class NPOIExcelHelper
{ public static DataTable ImportExcelFile2007(string filePath)
{ XSSFWorkbook hssfworkbook;
#region//初始化信息
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new XSSFWorkbook(file);;
}
}
catch (Exception e)
{
throw e;
}
#endregion NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();;
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();;
DataTable dt = new DataTable();;
rows.MoveNext();; XSSFRow row = (XSSFRow)rows.Current;
for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
{
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());;
//将第一列作为列表头
dt.Columns.Add(row.GetCell(j).ToString());;
}
while (rows.MoveNext())
{
row = (XSSFRow)rows.Current;
DataRow dr = dt.NewRow();;
for (int i = ; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.ICell cell = row.GetCell(i);;
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();;
}
}
dt.Rows.Add(dr);;
}
return dt;
} public static DataTable ImportExcelFile2003(string filePath)
{ HSSFWorkbook hssfworkbook;
#region//初始化信息
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);;
}
}
catch (Exception e)
{
throw e;
}
#endregion NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();;
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();;
DataTable dt = new DataTable();;
rows.MoveNext();; HSSFRow row = (HSSFRow)rows.Current;
for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
{
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());;
//将第一列作为列表头
dt.Columns.Add(row.GetCell(j).ToString());;
}
while (rows.MoveNext())
{
row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();;
for (int i = ; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.ICell cell = row.GetCell(i);;
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();;
}
}
dt.Rows.Add(dr);;
}
return dt;
} }
2.将数据导出到Excle
引用命名空间:
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.Formula.Eval;
代码实例:
//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建标签
ISheet sheet = workbook.CreateSheet("sheet1");
//新建表头
IRow rowHead = sheet.CreateRow();
rowHead.CreateCell(, CellType.String).SetCellValue("序号");
rowHead.CreateCell(, CellType.String).SetCellValue("学生姓名");
rowHead.CreateCell(, CellType.String).SetCellValue("性别");
rowHead.CreateCell(, CellType.String).SetCellValue("生源地");
rowHead.CreateCell(, CellType.String).SetCellValue("身份证");
rowHead.CreateCell(, CellType.String).SetCellValue("准考证");
rowHead.CreateCell(, CellType.String).SetCellValue("专业名称");
rowHead.CreateCell(, CellType.String).SetCellValue("专业方向");
rowHead.CreateCell(, CellType.String).SetCellValue("来源");
rowHead.CreateCell(, CellType.String).SetCellValue("生源学校");
rowHead.CreateCell(, CellType.String).SetCellValue("审核状态");
rowHead.CreateCell(, CellType.String).SetCellValue("录取状态");
//循环填充内容
for (int i = ; i < table.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + );
DataRow datarow = table.Rows[i];
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["rn"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuName"]));
row.CreateCell(, CellType.String).SetCellValue(Constants.sex[datarow["StuSex"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Constants.stuAddr[datarow["StuProvince"].ToString()] + Constants.stuAddr[datarow["StuCity"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuCardNo"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuZKNo"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["zyname"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["zyfx"]));
row.CreateCell(, CellType.String).SetCellValue(Constants.stuFrom[datarow["StuFrom"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuSchool"]));
row.CreateCell(, CellType.String).SetCellValue(Constants.stuState[datarow["State"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Constants.stuAdmit[datarow["Admit"].ToString()]);
} System.IO.MemoryStream ms = new System.IO.MemoryStream();
//写入内存
workbook.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
//输出到客户端
Response.BinaryWrite(ms.ToArray());
workbook = null;
ms.Close();
ms.Dispose();
导出结果如图:

3.将服务器上的文件输出到客户端
//读取文件
FileStream fileStream = new FileStream(Server.MapPath("~/Uploads/test.xlsx"), FileMode.Open);
long fileSize = fileStream.Length;
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, , (int)fileSize);
//如果不写fileStream.Close()语句,用户在下载过程中选择取消,将不能再次下载
fileStream.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", DateTime.Now.ToString("yyyyMMdd")));
Response.AddHeader("Content-Length", fileSize.ToString());
Response.BinaryWrite(fileBuffer);
Response.Flush();
Response.Close();
将服务器上 /Uploads/test.xlsx 文件 输出到客户端并使用日期命名
使用NPOI操纵Excle,并输入到客户端的更多相关文章
- Excle快速输入√与×
如何在EXCLE中快速输入√与×呢 很简单的一个小技巧,只需要在EXCLE单元格中输入P(O) 然后将其字体设置为Wingdings 2,接着就出现符号了 不信你可以试试的哦.
- NPOI导出Excle
前端: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...
- npoi生成excel流并在客户端下载(html+后台 )
//前端页面 <body> <input type="button" value="导出Excel" class="button&q ...
- Request.ServerVariables 获取服务器或者客户端信息
本机ip[客户端]:request.servervariables("remote_addr") 从哪个页面转到当前页面的:Request.ServerVariables(&quo ...
- PL/SQL连接Oracle客户端步骤
首先,安装oracle,再安装plsql 打开plsql——>选择“首选项(preferences)”——>输入oracle客户端路径 如下图:
- Ubuntu12.04 下svn服务搭建及Windows客户端tortoisesvn的使用
在Ubuntu服务端搭建apache+svn 在客户端使用Tortoisesvn工具. 第一步 安装SVN $sudo apt-get install subversion 安装成功后系统会自动建立一 ...
- androd输入管理系统机制解析
android的输入管理系统主要完成按键.触摸板.鼠标等输入设备的事件输入,功能包括,输入设备的事件输入及向焦点窗口和焦点视图的事件派发,事件的插入,事件的过滤,事件的拦截等功能. 整个输入系统 ...
- Struts2各个功能详解(2)-输入校验和拦截器
前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器. 一:输入校验 客户端校验进行基本校验,如检验非空字段 ...
- 转----ui输入测试数据
jin'tHackChecker黑测工作室 - 专注于软件安全测试技术研究!(www.AutomationQA.com)常用安全测试用例 建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL ...
随机推荐
- 转-android图片降低图片大小保持图片清晰的方法
http://i.cnblogs.com/EditPosts.aspx?opt=1 android里面对于图片的处理一直是个比较烦人的问题,烦人之处在于一个不小心,就有可能造成OOM. 最近碰到一个关 ...
- 转--Android资源总结(环境搭建/ 反编译工具)
在Android发展前景相当好的情况下,本人最近搜集了一些关于Android的相关资源,当然包含以前发布的博客内容,进行了一次大整合,希望对和我一样是Android的初学者管用,如在文章中有所错误,敬 ...
- 转载__UI之Frgment
http://www.cnblogs.com/plokmju/p/3239265.html 前言 开门见山开篇名义,本篇博客将讲解一下Android中Fragment的内容,必要的地方会提供相应的演示 ...
- [转载]socket下server端支持多客户端并发访问简单实现
/*Author: wainiwann *Source: 博客园 http://www.cnblogs.com/wainiwann *Remarks: 转载请说明出处!!! */ 感觉很不错,可以学 ...
- Android之访问下载文件
1.SD卡操作类 FileUtils.java package com.example.mars_1500_download; import java.io.File; import java.io. ...
- 使用k-近邻算法改进约会网站的配对效果
---恢复内容开始--- < Machine Learning 机器学习实战>的确是一本学习python,掌握数据相关技能的,不可多得的好书!! 最近邻算法源码如下,给有需要的入门者学习, ...
- IO/NIO
1.转换流,Buffered BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out)); BufferedRe ...
- Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)
在之前的文章(http://space.itpub.net/17203031/viewspace-774843)中,笔者介绍了如何在Linux 2.6内核中配置HugePage以及AMM与其的不兼容性 ...
- CODESOFT 2015中的二维码该怎样生成
由于二维条码具有储存量大.保密性高.追踪性高.抗损性强.备援性大.成本便宜等特性,其应用 渐趋广泛,因此二维码的制作对于CODESOFT条码设计软件的用户来讲可谓司空见惯.我们最常见的二维码要数QR码 ...
- PMP考试--关于职业道德
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 ★四个价值标准(value standards) 责任(responsibility ...