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 ...
随机推荐
- java反射机制学习笔记
内容引用自:https://www.cnblogs.com/wkrbky/p/6201098.html https://www.cnblogs.com/xumBlog/p/8882489.html,本 ...
- Java作业 题目:16版.情人节送玫瑰花
题目:16版.情人节送玫瑰花 题干: 1.实验要求 本实验要求:以情人节送花为业务背景,体验自定义异常以及异常处理机制. 1-1. 业务说明: 1-1.1. 本实验以情人节送花为业务背景,女方提出送花 ...
- laravel修改用户模块的密码验证
做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成这个功能. 现在假设我们只需要修改登录用户的表,表名和表结构 ...
- 对Elastic集群内部配置TLS加密通信及身份验证
1.介绍 官方宣布从6.8和7.1开始,免费提供多项安全功能.其中包括tls加密通信,基于角色访问控制等功能. 可以使用企业CA证书来完成这一步骤,但是一般情况下,我们可以通过elasticsearc ...
- 07.AutoMapper 之列表和数组(Lists and Arrays)
https://www.jianshu.com/p/419a3b7f12d5 列表和数组(Lists and Arrays) AutoMapper只需要配置元素类型的映射配置,不需要针对列表和数组进行 ...
- java实现spark常用算子之cartesian
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- mysql登录密码错误,以及设置密码
1.输了几次,密码都错误,忘记了... 2.编辑mysql安装文件夹(D:\mysql-5.7.26-winx64)下的my.ini文件,mysqld标签下输入 skip-grant-tables,字 ...
- unittest装饰器:只执行一次方法
@classmethod def setUpClass(cls): print "start!" @classmethod def tearDownCla ...
- Java学习笔记-----eclipse中建立Java项目并成功运行
环境:WIN7 64位 +eclipse 2018 12version 具体方法:https://jingyan.baidu.com/album/9c69d48fefa53113c9024eb3.ht ...
- Apple历史应用以及开发工具版本(Xcode官方历史版本等等)
1.Xcode 官方历史版本下载:(需要登录开发者账号) https://developer.apple.com/download/more/