ASP.NET MVC Ajax下载文件(使用NPOI向现有的excel模板文件里面添加数据)
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模板文件里面添加数据)的更多相关文章
- ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2): ...
- asp.net mvc ajax文件上传
前台页面提交文件 <!DOCTYPE html> <html> <head> <meta name="viewport" content= ...
- 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()输 ...
- ASP.NET MVC Ajax.ActionLink 简单用法
ASP.NET MVC 项目中,如何使用类似于 iframe 的效果呢?或者说 Ajax 局部刷新,比如下面操作: 我们想要的效果是,点击 About 链接,页面不刷新(地址栏不变),然后下面的内容进 ...
- asp.net MVC 自动下载apk
在Asp.net MVC中直接把.apk文件放入/Upload/App/ 路径下,然后通过IIS发布完之后,再通过http://xxx/Upload/App/xx.apk访问是访问不到的,因此不能下载 ...
- asp.net MVC Ajax.BeginForm 异步上传图片的问题
当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流. 这就是我要说的,当使用Ajax.Be ...
- Asp.Net MVC ajax调用 .net 类库问题
如果你还在为 ajax 调用 .net 类库还束手无策的话,相信这篇博客将帮助你解决这个世纪问题! 因为Visual Studio 内置了asp.net mvc ,不过当你添加asp.net mvc项 ...
- Asp.Net MVC Ajax
将ASP.NET MVC中的form提交改为ajax提交 在ASP.NET MVC视图中通过 @using (Html.BeginForm()) 产生的是form表单提交代码,可以用javascrip ...
随机推荐
- 四、Kubernetes_V1.10集群部署-master-创建kubeconfig
1.生成配置文件 # 创建 TLS Bootstrapping Token # export BOOTSTRAP_TOKEN=$( /dev/urandom | od -An -t x | tr -d ...
- P4962 朋也与光玉题解
题目链接 光坂小镇是一个由 n 个点(编号为 1 ~ n),m 条有向边构成的图,每个节点上都有一个光玉,光玉共有 k 种,编号为 0 ~ k−1. 为了使一切改变,朋也需要找齐全部的 k种光玉.他可 ...
- tp5框架用foreach循环时候报Indirect modification of overloaded element of think\paginator\driver\Bootst错误
thinkphp5使用paginator分页查询数据后,需要foreach便利处理某一字段的数据,会出现类似题目的错误.主要是因为tp5使用分页类读取的数据不是纯数组的格式!所以在循环的时候需要用数据 ...
- 从入门到自闭之python初识
Day 01 整型: 对比: 在python 2 版本中有整型,长整型long 在python 3 版本中全部都是整型 用于计算和比较 整型和布尔值的转换 二进制转换成十进制: print (int ...
- centos部署LVS负载均衡直接路由DR模式
环境: 在vm里开三个虚拟机 负载调度器:10.0.3.102 真实服务器1:10.0.3.103 真实服务器2:10.0.3.104 虚拟ip: 10.0.3.99 (用来飘移) 负载调度器上 if ...
- CDH部署StreamSets
StreamSets是一个大数据采集工具,数据源支持包括结构化和半/非结构化,目标源支持HDFS,HBase,Hive,Kudu,Cloudera Search, ElasticSearch等.它包括 ...
- display:inline-block元素之间空隙的产生原因和解决办法
在CSS布局中,如果我们想要将一些元素在同一行显示,其中的一种方法就是把要同行显示的元素设置display属性为inline-block.但是你会发现这些同行显示的inline-block元素之间会出 ...
- 初探css-18 尺寸
CSS 尺寸 (Dimension) CSS 尺寸 (Dimension) 属性允许你控制元素的高度和宽度.同样,它允许你增加行间距. 更多实例 这个例子演示了如何设置不同元素的高度. <sty ...
- python-函数4(递归、高阶函数)
python-函数4(递归.高阶函数) 递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归特性: 1. 递归必须有一个明确的结束条件 2. 每次进入更深一 ...
- memcached和redis的区别
memcache和redis区别 memcach简介 Memcache时一个内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载.它可以应对任意多个连接,使用非阻塞的网络I/O, 工作机制: ...