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 ...
随机推荐
- 【VS开发】如何移植对话框?
[VS开发]如何移植对话框? 标签:[VS开发] 问题描述:当开发好一个可视化界面的时候,想将其移植到另外的工程中,这个时候希望能够导出对话框资源,好直接在另一个工程中进行编辑,而不用再次编辑对话框上 ...
- 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法
按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...
- Linux系统搭建并管理Git服务器
搭建Git服务器 GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓 ...
- Anaconda配置环境变量+创建虚拟环境+pycharm使用虚拟环境
Anaconda配置环境变量+创建虚拟环境 配置环境变量 没有添加系统变量,所有系统根本识别不了conda命令,找不到位置,所以添加以下系统变量: 添加对应Anaconda环境变量:(以自己的安装路径 ...
- 03: saltstack和ansible的区别和原理
1.1 SaltStack.Ansible.Puppet比较 1.SaltStack 1. saltStack由Python编写,为server-client模式的系统,自己本身支持多master. ...
- gym102201F_Fruit Tree
题意 给一棵带权树,多次询问路径上出现次数超过一半的数. 分析 dfs序建主席树,维护的就是根到某个节点这段路径的值域情况. 因为题目所求的不是一般的众数,而是出现次数大于一半的,所以在主席树上可以直 ...
- CentOS下配置Apache HTTPS
一.安装Apache支持SSL/TLS yum install mod_ssl openssl 二.创建证书 证书(Cerificate)的基本作用是将一个公钥和安全个体(个人.公司.组织等)的名字绑 ...
- SpringBoot在macOS下启动慢的原因
title: SpringBoot在macOS下启动慢的原因 comments: false date: 2019-07-16 09:48:24 description: 在 macOS + JDk1 ...
- LVS实现负载均衡原理及安装配置 负载均衡
LVS实现负载均衡原理及安装配置 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F ...
- QQ第三方登陆
第一步 引入第三方登陆类,实例化,调用类中方法getInstance()跳转到授权页面 第二步 登陆成功的回调方法,qq_return则是登陆成功会获取到的数据的处理方法 qq_return方法: 本 ...