前端:
<!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', 130 },
{ title: 'Name', field: 'Name', 80 },
{ title: 'Sex', field: 'Sex', 100 },
{
title: 'Email', field: 'Email', 100, formatter: function (value) {
return "<a href='www.baidu.com'>"+value+"</a>";
}
},
{ title: 'Remark', field: 'Remark', 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="400px; height:200px;"></table>
<form style="display: none; 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);