NPOI导出Excle
前端:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
<link href="easyui/themes/default/easyui.css" rel="stylesheet" />
<link href="easyui/themes/icon.css" rel="stylesheet" />
<script src="easyui/js/jquery.min.js"></script>
<script src="easyui/js/jquery.easyui.min.js"></script>
<script src="easyui/js/easyui-lang-zh_CN.js"></script>
<script type="text/javascript">
var datagrid = {
init: function () {
$('#userGrid').datagrid({
toolbar: '',
title: "用户信息",
iconCls: 'icon icon-list',
nowrap: false, //折行
rownumbers: true, //行号
striped: true, //隔行变色
remoteSort: false,//定义从服务器对数据进行排序
idField: 'Id', //主键
//singleSelect: true, //单选
columns: [[
{ field: 'ck', checkbox: true },
{ title: 'Id', field: 'Id', width: 130 },
{ title: 'Name', field: 'Name', width: 80 },
{ title: 'Sex', field: 'Sex', width: 100 },
{
title: 'Email', field: 'Email', width: 100, formatter: function (value) {
return "<a href='www.baidu.com'>"+value+"</a>";
}
},
{ title: 'Remark', field: 'Remark', width: 100 }
]],
onLoadSuccess: function () {
},
pagination: true,
pageNumber: 1,
pageSize: 2,
pageList: [2, 3, 10, 50]
});
},
databind: function () {
$('#userGrid').datagrid({ url: "Handler/UserInfoHandler.ashx?Action=getList" });
}
} $(document).ready(function () {
datagrid.init();
datagrid.databind();
$("#Report1").click(ExportResumeList1)
$("#Report2").click(ExportResumeList2)
$("#Report3").click(ExportResumeList3)
})
function ExportResumeList1() {
$.ajax({
url: "Handler/ReportHelperHandler.ashx?action=export1",
type: "get",
cache: false,
success: function (data) {
alert(data);
window.location.href = "Handler/ReportHelperHandler.ashx?action=ResponseFile&filePath=" + escape(data);
},
error: function (e) {
alert(e);
}
});
}
//导出文件
function ExportResumeList2() {
$("#Export").attr("action", "Handler/ReportHelperHandler.ashx?action=export2");
$("#Export").submit();
}
function ExportResumeList3() {
$("#Export").attr("action", "Handler/ReportHelperHandler.ashx?action=export3");
$("#Export").submit();
}
</script>
</head>
<body>
<button id="Report1">Excle导出1</button>
<button id="Report2">Excle导出2</button>
<button id="Report3">Excle导出3</button>
<table id="userGrid" style="width:400px; height:200px;"></table>
<form style="display: none; width: 0px; height: 0px;" id="Export" method="post" action=""></form>
</body>
</html>
后端:
using Common;
using DBUtility;
using Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using System.Web; namespace ReportTool
{
/// <summary>
/// ReportHelperHandler 的摘要说明
/// </summary>
public class ReportHelperHandler : IHttpHandler
{ public DataProvider dataprovider = new DataProvider();
public ReportHelperHandler()
{
dataprovider.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
} public void ProcessRequest(HttpContext context)
{
try
{
context.Response.ContentType = "text/plain";
string action = context.Request["Action"];
switch (action)
{ case "export1":
export1(context);
break;
case "ResponseFile":
//ResponseFile(context.Request["filePath"]);
ResponseFile1(context);
break;
case "export2":
export2(context);
//responeResult(filepath,context);
break;
case "export3":
export3(context);
//responeResult(filepath,context);
break;
} }
catch (Exception e)
{ throw e;
}
} private void export1(HttpContext context)
{
try
{
var result = configEnum.mergeRow.ToString();
//string BaseTemplateFolder = HttpContext.Current.Server.MapPath("~/Template");
string BaseTemplateFolder = AppDomain.CurrentDomain.BaseDirectory+ "Template";
string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
ExcelHelper excelHelper = new ExcelHelper(templateFile);
DataTable configDt = excelHelper.ExcelToDataTable(templateFile, true);
var list = DataTableHelper.ConvertTo<ConfigModel>(configDt);
DataTable dt = new DataTable();
string strSql = string.Empty;
foreach (var item in list)
{
if (item.key == "cols" && item.type == "sql")
{
strSql = item.value;
}
}
dt = dataprovider.FillDataTable(strSql, CommandType.Text);
string sDirFileName = setDataToTemplate(dt, (List<ConfigModel>)list, context);
System.IO.File.WriteAllText(HttpContext.Current.Server.MapPath("~/") + "log.txt", "export1"+sDirFileName);
//返回导出文件的路径
//ResponseFile(sDirFileName);
context.Response.Write(sDirFileName);
}
catch (Exception e)
{
throw e;
} }
private void ResponseFile1(HttpContext context)
{
try
{ FileStream fs = new FileStream(context.Request["filePath"], FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
context.Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(Path.GetFileName(context.Request["filePath"]), System.Text.Encoding.UTF8));
context.Response.BinaryWrite(bytes);
context.Response.Flush();
//context.Response.End();
context.ApplicationInstance.CompleteRequest();
}
catch (Exception e)
{ throw e;
}
} private void export2(HttpContext context)
{
try
{
var result = configEnum.mergeRow.ToString();
//string BaseTemplateFolder = context.Server.MapPath("~/Template");
string BaseTemplateFolder = AppDomain.CurrentDomain.BaseDirectory + "Template";
string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
ExcelHelper excelHelper = new ExcelHelper(templateFile);
DataTable configDt = excelHelper.ExcelToDataTable(templateFile, true);
var list = DataTableHelper.ConvertTo<ConfigModel>(configDt);
DataTable dt = new DataTable();
string strSql = string.Empty;
foreach (var item in list)
{
if (item.key == "cols" && item.type == "sql")
{
strSql = item.value;
}
}
dt = dataprovider.FillDataTable(strSql, CommandType.Text);
string sDirFileName = setDataToTemplate(dt, (List<ConfigModel>)list, context);
System.IO.File.WriteAllText(context.Server.MapPath("~/") + "log.txt", "export2"+sDirFileName);
//返回导出文件的路径
//ResponseFile(sDirFileName,context);
//return sDirFileName;
responeResult2(sDirFileName, context);
}
catch (Exception e)
{
throw e;
} }
private void responeResult2(string filepath, HttpContext context)
{
FileStream fs1 = new FileStream(filepath, FileMode.Open);
byte[] bytes1 = new byte[(int)fs1.Length];
fs1.Read(bytes1, 0, bytes1.Length);
fs1.Close();
context.Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(Path.GetFileName(filepath), System.Text.Encoding.UTF8));
context.Response.BinaryWrite(bytes1);
context.Response.Flush();
//context.Response.End();
context.ApplicationInstance.CompleteRequest();
} private void export3(HttpContext context)
{
try
{
var result = configEnum.mergeRow.ToString();
string BaseTemplateFolder = context.Server.MapPath("~/Template");
string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
ExcelHelper excelHelper = new ExcelHelper(templateFile);
DataTable configDt = excelHelper.ExcelToDataTable(templateFile, true);
var list = DataTableHelper.ConvertTo<ConfigModel>(configDt);
DataTable dt = new DataTable();
string strSql = string.Empty;
foreach (var item in list)
{
if (item.key == "cols" && item.type == "sql")
{
strSql = item.value;
}
}
dt = dataprovider.FillDataTable(strSql, CommandType.Text);
string sDirFileName = setDataToTemplate(dt, (List<ConfigModel>)list, context);
System.IO.File.WriteAllText(context.Server.MapPath("~/") + "log.txt", "export13"+sDirFileName);
//返回导出文件的路径
//ResponseFile(sDirFileName,context);
//return sDirFileName;
responeResult3(sDirFileName, context);
}
catch (Exception e)
{
throw e;
} }
private void responeResult3(string filepath, HttpContext context)
{
FileInfo file = new FileInfo(filepath);//创建一个文件对象
context.Response.Clear();//清除所有缓存区的内容
context.Response.Charset = "GB2312";//定义输出字符集
context.Response.ContentEncoding = Encoding.Default;//输出内容的编码为默认编码
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);
//添加头信息。为“文件下载/另存为”指定默认文件名称
context.Response.AddHeader("Content-Length", file.Length.ToString());
//添加头文件,指定文件的大小,让浏览器显示文件下载的速度
context.Response.WriteFile(file.FullName);// 把文件流发送到客户端
context.Response.End();
//context.ApplicationInstance.CompleteRequest();
}
/// <summary>
/// 将数据设置到模板中
/// </summary>
public string setDataToTemplate(DataTable dt)
{
string tmpFilePath = string.Empty;
string BaseTmpFolder = AppDomain.CurrentDomain.BaseDirectory + "Export\\";
string BaseTemplateFolder = AppDomain.CurrentDomain.BaseDirectory + "Template\\"; foreach (string fileInfo in Directory.GetFiles(BaseTmpFolder))
{
File.Delete(fileInfo);
}
string templateFile = BaseTemplateFolder + "端午假期网络和信息系统运行值班表(汇总).xlsx";
string tmpFile = string.Format("{0}{1}年{2}", BaseTmpFolder, DateTime.Now.ToString("yyyy"), "端午假期网络和信息系统运行值班表(汇总).xlsx");
File.Copy(templateFile, tmpFile);
ExcelHelper excelHelper = new ExcelHelper(tmpFile);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
excelHelper.DataSetToExcel(ds, 3, 0, 0); return tmpFile; }
public string setDataToTemplate(DataTable dt, List<ConfigModel> Listconfig, HttpContext context)
{
string tmpFilePath = string.Empty;
string BaseTmpFolder = context.Server.MapPath("~/Export");
string BaseTemplateFolder = context.Server.MapPath("~/Template"); foreach (string fileInfo in Directory.GetFiles(BaseTmpFolder))
{
File.Delete(fileInfo);
}
string templateFile = Path.Combine(BaseTemplateFolder, "端午假期网络和信息系统运行值班表(汇总).xlsx");
string tmpFile = string.Format("{0}\\{1}年{2}", BaseTmpFolder, DateTime.Now.ToString("yyyy"), "端午假期网络和信息系统运行值班表(汇总).xlsx");
File.Copy(templateFile, tmpFile);
ExcelHelper excelHelper = new ExcelHelper(tmpFile);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
excelHelper.DataSetToExcel(ds, 3, 0, 0, Listconfig); return tmpFile; }
public bool IsReusable
{
get
{
return false;
}
}
}
}
注意:
临时文件夹读写权限设置:1.自己设置
2.通过代码控制
//给Excel文件添加"Everyone,Users"用户组的完全控制权限
FileInfo fi = new FileInfo(excelPath);
System.Security.AccessControl.FileSecurity fileSecurity = fi.GetAccessControl();
fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
fi.SetAccessControl(fileSecurity); //给Excel文件所在目录添加"Everyone,Users"用户组的完全控制权限
DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(excelPath));
System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl();
dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
di.SetAccessControl(dirSecurity);
NPOI导出Excle的更多相关文章
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- 基于NPOI导出和导入Excel
概述 NPOI,顾名思义,就是POI的.NET版本.NPOI就是用.NET语言编写的一套数据导出Excel的开源项目,支持XML.xls.xlsx.ppt等格式..NET不仅实现Excel导出还可以实 ...
- (C#)使用NPOI导出Excel
在做业务型的软件时,经常需要将某些数据导出,本文介绍了在Winform或Asp.net中使用NPOI(POI 项目的 .NET 版本)来操作Excel文件,而无需安装Office. 首先,需要获取NP ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- C# NPOI导出Excel和EPPlus导出Excel比较
系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- .NET NPOI导出Excel详解
NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...
- NPOI导出Excel(含有超过65335的处理情况)
NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...
- [转]NPOI导出EXCEL 打印设置分页及打印标题
本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...
随机推荐
- 【图像算法】彩色图像切割专题八:基于MeanShift的彩色切割
>原理曾经的博客中已经有对meanshift原理的解释,这里就不啰嗦了.国外的资料看这:http://people.csail.mit.edu/sparis/#cvpr07 >源代码 核心 ...
- maven web配置发布路径 cargo自动部署项目到tomcat
pom.xml中加入以下 配置发布路径 <build> <!-- 发布名 www.locathost:8080/HelloWeb可以访问,如果改成ROOT那么 默认的tomcat也就 ...
- oracle创建用户及赋权
1,创建表空间 create tablespace hxzg_data logging datafile 'C:\app\data\hxzg_data.dbf' size 50m autoextend ...
- Centos网络时好时超时问题解决
近期公司使用的Centos突然出现网络不稳定现象,有公网,内部可以PING通外网,但是外部PING这个IP时,经常丢包现象,而且一丢包就是连续性的长达七八次,甚至十几次. 这个问题折腾了很长时间,因为 ...
- C#实现分片上传文件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...
- TypeError: can't convert console.log(...) to primitive type
一.背景 火狐浏览器提示这个错误,谷歌没有. 二.出错代码 var eventHandlers = { 'succeeded': function(e){ console.log('send succ ...
- c#(winform)中自定义ListItem类方便ComboBox添加Item项
1.定义ListItem类 public class ListItem { private string _key = string.Empty; private string _value = st ...
- Centos 7 防火墙
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体.启动一个服务:systemctl start firewalld.service ...
- location 设定某个文件的过期时间,并不记录访问日志
网页的根目录本来是: 6 root /app/www/default; [root@web01 default]# cat /app/server/nginx/conf/vhosts/default. ...
- 每日英语:Dishing the Dirt on Hand-Washing Guidelines
Americans aren't washing their hands nearly as often and as thoroughly as they should, according to ...