View

Html.DevExpress().Button(DevExpressButtonHelper.AddButton(ViewBag.Form, "Export", "Export", 70, false)).GetHtml();

Javascript

调用StoreLocalViewData controller的方法主要是用来把传入export的参数, 然后使用(ViewDataDictionary)LocalViewData 存储. 
var url = "@Url.Action("BillExportFile", ViewBag.Controller)"; 这个是在controller里面从数据获取需要导出的数据, 然后返回一个文件.
function MainExport(){

        var la_HAWB = GetSelectedValueByField(MainGridView,"HAWB",1);
if(la_HAWB.length == 0 )
{
Messagebox("1012","","","","0")
return false;
}
var ljs_Json = GenerateJson("HAWB", la_HAWB,"String");
ljs_Json = "["+ ljs_Json.substring(0, ljs_Json.length - 1)+"]"; $.ajax({
url: '@Url.Action("StoreLocalViewData", ViewBag.Controller)',
type: "POST",
dataType: "html",
//async: false,
beforeSend:function () {
lplLoadingPanel.Show();
},
data:
{
"ajs_Value":ljs_Json
},
success: function (data) {
var url = "@Url.Action("BillExportFile", ViewBag.Controller)";
window.location = url; lplLoadingPanel.Hide();
}
});
}

  

Controller

        public void StoreLocalViewData(string ajs_Value)
{
LocalViewData["BillExportFile_Json"] = ajs_Value;
} public FileResult BillExportFile()
{
DataTable ldt_DataTable = null;
string ls_ExcelPath = "";
using (var db = new agilitycpEntities())
{ ls_ExcelPath = db.sp_Sys_getSysPar("DOCUMENT", "CFS_RPT_FLIGHTPLAN").Select(c=>c.Value).FirstOrDefault();
ls_ExcelPath = Server.MapPath(ls_ExcelPath);
}         //从数据获取数据, 然后存储DataTable
ldt_DataTable = DBUtils.ExecuteStoredProceReturnDataSet("sp_rpt_CFS_Report_FlightPlan", User.Identity.Name, (string)LocalViewData["BillExportFile_Json"], "Con_Shp", "getMainGrid").Tables[0];      //将获取的数据使用NPOI组件生成excel文件.
MemoryStream stream = ExcelHelper.DataTableToExcel(ldt_DataTable, ls_ExcelPath,2,true);
stream.Seek(0, SeekOrigin.Begin);
//更改文件名后 return回去.
string ls_filename = "Flight Plan" + DateTime.Now.ToString("yyyyMMdd") + "_" + User.Identity.Name + ".xls";
return File(stream, "application/vnd.ms-excel", ls_filename);
}

  

ExcelHelper

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;
using NPOI.XSSF.UserModel; namespace AgilityNorthAsiaPlatform.Code.Helpers
{
public class ExcelHelper
{ public static MemoryStream ExportDataTableToExcel(DataTable adt_DataTable)
{
try
{
//文件流对象
MemoryStream stream = new MemoryStream();
if (adt_DataTable == null)
{
return stream;
}
//打开Excel对象
HSSFWorkbook workbook = new HSSFWorkbook(); //Excel的Sheet对象
var sheet = workbook.CreateSheet("sheet1"); //set date format
var cellStyleDate = workbook.CreateCellStyle();
var format = workbook.CreateDataFormat();
cellStyleDate.DataFormat = format.GetFormat("yyyyMMdd"); //使用NPOI操作Excel表
var row = sheet.CreateRow(0);
int count = 0;
for (int i = 0; i < adt_DataTable.Columns.Count; i++) //生成sheet第一行列名
{
var cell = row.CreateCell(count++);
cell.SetCellValue(adt_DataTable.Columns[i].Caption);
}
//将数据导入到excel表中
for (int i = 0; i < adt_DataTable.Rows.Count; i++)
{
var rows = sheet.CreateRow(i + 1);
count = 0;
for (int j = 0; j < adt_DataTable.Columns.Count; j++)
{
var cell = rows.CreateCell(count++);
Type type = adt_DataTable.Rows[i][j].GetType();
if (type == typeof(int) || type == typeof(Int16)
|| type == typeof(Int32) || type == typeof(Int64))
{
cell.SetCellValue(Convert.ToInt32(adt_DataTable.Rows[i][j]));
}
else
{
if (type == typeof(float) || type == typeof(double) || type == typeof(Double))
{
cell.SetCellValue((Double)adt_DataTable.Rows[i][j]);
}
else
{
if (type == typeof(DateTime))
{
cell.SetCellValue(((DateTime)adt_DataTable.Rows[i][j]).ToString("yyyy-MM-dd HH:mm"));
}
else
{
if (type == typeof(bool) || type == typeof(Boolean))
{
cell.SetCellValue((bool)adt_DataTable.Rows[i][j]);
}
else
{
cell.SetCellValue(adt_DataTable.Rows[i][j].ToString());
}
}
}
}
}
} //保存excel文档
sheet.ForceFormulaRecalculation = true; workbook.Write(stream);
workbook = null;
//workbook.Dispose(); return stream;
}
catch (Exception ex)
{
return new MemoryStream();
}
} public static FileStream ModifyExcelFromDataTable(DataTable adt_DataTable)
{
//文件流对象
FileStream stream = null;
try
{ if (adt_DataTable == null)
{
return stream;
} string ls_FileName = "North Asia Platform-Flight Plan_Template.xlsx";
string ls_ExcelPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/FileUploads/"), ls_FileName);
XSSFWorkbook wk = null; using (FileStream fs = File.Open(ls_ExcelPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
//把xls文件读入workbook变量里,之后就可以关闭了
wk = new XSSFWorkbook(fs);
fs.Close();
}
ISheet sheet = wk.GetSheetAt(0);
IRow row = sheet.CreateRow(1);
ICell cell = row.CreateCell(0);
sheet.GetRow(2).GetCell(0).SetCellValue("AAAAAA"); //保存excel文档
sheet.ForceFormulaRecalculation = true; stream = File.Open(ls_ExcelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
wk.Write(stream);
wk = null;
//stream.Close(); //打开Excel对象
//HSSFWorkbook workbook = new HSSFWorkbook();
return stream;
}
catch (Exception ex)
{
return stream;
}
} public static MemoryStream DataTableToExcel(DataTable adt_DataTable, string as_FilePath, int ai_HeaderRowCount, bool ab_FristColumnUID)
{
int i = 0;
int j = 0;
int count = 2;
ISheet sheet = null;
MemoryStream stream = new MemoryStream();
if (adt_DataTable == null)
{
return stream;
}
if (ab_FristColumnUID)
adt_DataTable.Columns.RemoveAt(0); FileStream fs = null;
IWorkbook workbook = null; fs = new FileStream(as_FilePath, FileMode.Open, FileAccess.Read);
if (as_FilePath.IndexOf(".xlsx") > 0) // 2007版本
workbook = new XSSFWorkbook(fs);
else if (as_FilePath.IndexOf(".xls") > 0) // 2003版本
workbook = new HSSFWorkbook(fs);
try
{
if (workbook != null)
{
sheet = workbook.GetSheetAt(0);
}
else
{
return stream;
}
IRow row = null;
if (ai_HeaderRowCount == 0)
row = sheet.CreateRow(1);
row = sheet.CreateRow(ai_HeaderRowCount); for (i = 0; i < adt_DataTable.Rows.Count; ++i)
{ for (j = 0; j < adt_DataTable.Columns.Count; ++j)
{
row.CreateCell(j).SetCellValue(adt_DataTable.Rows[i][j].ToString());
}
++count;
row = sheet.CreateRow(count);
}
workbook.Write(stream); //写入到excel
workbook = null;
return stream;
}
catch (Exception ex)
{
return new MemoryStream();
}
} }
}

ASP.NET MVC Ajax下载文件(使用NPOI向现有的excel模板文件里面添加数据)的更多相关文章

  1. ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表

    使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2): ...

  3. asp.net mvc ajax文件上传

    前台页面提交文件 <!DOCTYPE html> <html> <head> <meta name="viewport" content= ...

  4. ASP.NET MVC 4 (十一) Bundles和显示模式--asp.net mvc中 @Scripts.Render("~/bundles/jquery")是什么意思? 在布局文件中使用Scripts.Render()输出脚本包,Styles.Render()输出风格包:

    ASP.NET MVC 4 (十一) Bundles和显示模式 ASP.NET MVC 4 引入的js打包压缩功能.打包压缩jquery目录下的文件,在布局文件中使用Scripts.Render()输 ...

  5. ASP.NET MVC Ajax.ActionLink 简单用法

    ASP.NET MVC 项目中,如何使用类似于 iframe 的效果呢?或者说 Ajax 局部刷新,比如下面操作: 我们想要的效果是,点击 About 链接,页面不刷新(地址栏不变),然后下面的内容进 ...

  6. asp.net MVC 自动下载apk

    在Asp.net MVC中直接把.apk文件放入/Upload/App/ 路径下,然后通过IIS发布完之后,再通过http://xxx/Upload/App/xx.apk访问是访问不到的,因此不能下载 ...

  7. asp.net MVC  Ajax.BeginForm 异步上传图片的问题

    当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流. 这就是我要说的,当使用Ajax.Be ...

  8. Asp.Net MVC ajax调用 .net 类库问题

    如果你还在为 ajax 调用 .net 类库还束手无策的话,相信这篇博客将帮助你解决这个世纪问题! 因为Visual Studio 内置了asp.net mvc ,不过当你添加asp.net mvc项 ...

  9. Asp.Net MVC Ajax

    将ASP.NET MVC中的form提交改为ajax提交 在ASP.NET MVC视图中通过 @using (Html.BeginForm()) 产生的是form表单提交代码,可以用javascrip ...

随机推荐

  1. ocelot集成consul服务发现

    首先下载consul 点击这里下载 转到解压文件夹目录输入cmd命令  consul agent -dev (有时候会卡住按一下方向键上) 在浏览器中输入http://localhost:8500/u ...

  2. Linux系统管理和调优(内存、CPU、磁盘IO、网络)

    系统管理 Author:Rich七哥 查看 CPU 负载相关工具,找出系统中使用 CPU 最多的进程 查看 Memory 运行状态相关工具,找出系统中使用内存最多的进程 查看 IO 运行状态相关工具, ...

  3. nodejs版本控制:nvm use命令失效

    Downloading npm version ... Download failed. Rolling Back. Rollback failed. remove C:\Users\Administ ...

  4. Websocket --(3)实现

    今天介绍另外一种websocket实现方式,结合了spring MVC,并完善了第二节所提到做一个简单的登录认证用来识别用户的名称.界面继续沿用第二节的布局样式,同时增加上线和下线功能. 参考了 ht ...

  5. java 内容仓储

    什么是JAVA内容仓库(Java Content Repository)(2) 转载 自:http://blog.csdn.net/vltic/article/details/7249395 内容仓库 ...

  6. 洛谷 P5239 回忆京都 题解

    题面 裸的杨辉三角前缀和,但----- 在求前缀和的时候有可能得到一个负数(由于取模的原因),所以一定要加上模数后再取模!!!! #include <bits/stdc++.h> #def ...

  7. 遍历dataframe

    import pandas as pd import os if __name__ == '__main__': Folder_Path = 'c:\checklog' os.chdir(Folder ...

  8. 列出连通集(DFS及BFS遍历图) -- 数据结构

    题目: 7-1 列出连通集 (30 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递 ...

  9. 使用Jenkins结合Gogs和SonarQube对项目代码进行测试、部署、回滚,以及使用keepalived+haproxy调度至后端tomcat

    0 环境说明 主tomcat:192.168.0.112 备tomcat:192.168.0.183 haproxy+keepalived-1:192.168.0.156 haproxy+keepal ...

  10. 093、如何用Graylog 管理日志? (2019-05-17 周五)

    参考https://www.cnblogs.com/CloudMan6/p/7821817.html   上节我们已经部署好了 Graylog ,现在学习如何使用他来管理日志.   首先运行测试容器, ...