1、ashx文件中查询出DataTable数据,将DataTable数据生成excel文件,并保存到相对应的目录里面;
public void ProcessRequest(HttpContext context)
{
DataTable dt=new DataTable();
string filePath = context.Server.MapPath("~/") + "FileData\\TempExport\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string excelFileName = DateTime.Now.ToString("yyyyMMddHHmmss")+"跟单文件.xlsx";
ExcelWrite.DataToExcel(dt,filePath+excelFileName);
context.Response.Write(JsonConvert.SerializeObject(new ));
var res= new { Result = true, Message = "../FileData/TempExport/" + excelFileName }
context.Response.Write(JsonConvert.SerializeObject(res));
}
public class ExcelWrite
{
/// <summary>
/// Datatable生成Excel表格并返回路径
/// </summary>
/// <param name="m_DataTable">Datatable</param>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public static void DataToExcel(DataTable dataTable, string fileName)
{
if (File.Exists(fileName)) //存在则删除
{
File.Delete(fileName);
}
FileStream objFileStream;
StreamWriter objStreamWriter;
string strLine = "";
objFileStream = new FileStream(fileName, System.IO.FileMode.OpenOrCreate, FileAccess.Write);
objStreamWriter = new StreamWriter(objFileStream, Encoding.Unicode);
for (int i = 0; i < dataTable.Columns.Count; i++)
{
strLine = strLine + dataTable.Columns[i].Caption.ToString() + Convert.ToChar(9); //写列标题
}
objStreamWriter.WriteLine(strLine);
strLine = "";
for (int i = 0; i < dataTable.Rows.Count; i++)
{
for (int j = 0; j < dataTable.Columns.Count; j++)
{
if (dataTable.Rows[i].ItemArray[j] == null)
strLine = strLine + " " + Convert.ToChar(9); //写内容
else
{
string rowstr = "";
rowstr = dataTable.Rows[i].ItemArray[j].ToString();
if (rowstr.IndexOf("\r\n") > 0)
rowstr = rowstr.Replace("\r\n", " ");
if (rowstr.IndexOf("\t") > 0)
rowstr = rowstr.Replace("\t", " ");
strLine = strLine + rowstr + Convert.ToChar(9);
}
}
objStreamWriter.WriteLine(strLine);
strLine = "";
}
objStreamWriter.Close();
objFileStream.Close();
}
}
2、前台页面通过ajax请求数据接收到的结果之后,模拟点击a链接进行下载
<a id="dp" href="#" style="display:none"><span id="fp"></span></a>
$.ajax({
type: "get",
dataType: "json",
url: "../Ajax/XXX.ashx",
data: {
type: "XXXXXX"
},
success: function (response) {
if (response.Result) {
var path = response.Message;
$("#dp").attr("href", path);
$("#fp").click();
}
else {
}
},
});