正题前的唠叨

本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的。发现这个问题,想着提升一下自己的技术水平,将一些学的新的‘好’东西记录下来,一是加深印象;二是以后可以作为参考;三是希望博友们可以提出不足和可以优化的地方,一起讨论。

本方法是通过ajax直接下载,当然也可以直接button下载,本方法类已经实现导入导出,请执行扩展。谢谢

效果图:点击导出按钮

前端 AJAX

    //导出ececl
function btn_excel(ExeclID) {
var myConfirmCode = ' <div id="downloaddiv" style="display: none">\
<a id = "downloadRul" href = "" > \
<p>\
</p>\
</a >\
</div >'; $("body").append(myConfirmCode); $.ajax({
type: "GET",
url: "../../tools/downloadExecl.ashx?action=GetExcel",
data: { "ExeclID": ExeclID, "TempName":"", "Outname":"" },
dataType: "json",
success: function (data) {
if (data.status == ) {
$("#downloadRul").attr("href", data.msg);
$('#downloadRul>p').trigger("click"); $("#downloaddiv").remove();
} else {
$("#downloaddiv").remove();
alert("请登入系统");
}
}
});
// $("#downloaddiv").remove(); }

主要是导出excel并在浏览器下载下来。 但是会有不同的细微的需求差别。

进入正题

简单的需求描述

将查询出来已经转化好了的list<T> xxx 的数据的某些列,导入到excel之中,并在浏览器中下载下来。

public void GetExcel(HttpContext context)
{
string ExeclID = MXRequest.GetString("ExeclID");//导出模板ID,管理sql
BLL.InfoExecl infoExeclbll = new BLL.InfoExecl();
infoExecl= infoExeclbll.GetModel(MyCommFun.Obj2Int( ExeclID));
if (Outname != "") {
infoExecl.titlename = Outname;
}
if (TempName != "")
{
infoExecl.title = TempName;
} DataTable dt = new DataTable(); // DataTable 数据源 string download = Manage.ExeclOUtAjax(infoExecl.Sql, infoExecl.title, infoExecl.titlename); context.Response.Write("{\"status\":1, \"msg\": \""+ download + "\"}"); }
        /// <summary>
/// 导出Exec方法
/// </summary>
/// <param name="sql"></param>
/// <param name="temppathName"></param>
/// <param name="Outname"></param>
public string ExeclOUtAjax(string sql, string temppathName, string Outname)
{
string timeflie= DateTime.Now.ToString("yyyyMMddHHmmss");
DataSet ds = DBUtility.DbHelperSQL.Query(sql);
//导出数据
string temppath = Server.MapPath("\\UpFile");
string filepath = temppath + "\\ExportExcel\\" + temppathName + ".xls";//临时文件,也作为模板文件
string downUrl = "\\ExcelOut\\" + timeflie+ Outname+ ".xls";//导出文件路径
string downUrlAjax = "/UpFile/ExcelOut/" + timeflie + Outname + ".xls";//下载文件路径
string outfilepath = temppath + downUrl;//导出文件路径
AsposeExcel asposeexcel = new AsposeExcel(outfilepath, filepath);
asposeexcel.DatatableToExcel(ds.Tables[0]);
//return DownFile("\\UpFile" + downUrl, DateTime.Now.ToString("yyyyMMdd") + "零售品牌汇总导出.xls");
//获取项目绝对路径地址
string url = HttpContext.Current.Request.Url.AbsoluteUri.ToString().Split('/')[0] + "//" + HttpContext.Current.Request.Url.Authority.ToString();
var virtualPath = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath;
string fileName = "";
if (virtualPath != "/")
{
//有子应用程序
fileName = virtualPath + "/UpFile/";
}
else
{
fileName = "/Document/TemporaryDocuments/" + tempExcelName;
} //清除历史文件,避免历史文件越来越多,可进行删除
DirectoryInfo dyInfo = new DirectoryInfo(HttpContext.Current.Server.MapPath("/UpFile/ExcelOut/"));
//获取文件夹下所有的文件
foreach (FileInfo feInfo in dyInfo.GetFiles())
{
//判断文件日期是否小于两天前,是则删除
if (feInfo.CreationTime < DateTime.Today.AddDays(-2))
feInfo.Delete(); } return url+ downUrlAjax; }

  

  

后端 公共操作类

AsposeExcel.cs 类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Aspose.Cells;
using System.IO;
using System.Web; namespace Flysem.Common
{
public class AsposeExcel
{
private string outFileName = "";
private string fullFilename = "";
private Workbook book = null;
private Worksheet sheet = null;
/// <summary>
///
/// </summary>
/// <param name="outfilename">导出文件路径</param>
/// <param name="tempfilename">模板文件路径</param>
public AsposeExcel(string outfilename, string tempfilename) //导出构造数
{
Aspose.Cells.License license = new Aspose.Cells.License();
license.SetLicense("Aspose.Cells.lic"); outFileName = outfilename;
book = new Workbook();
//book.Open(tempfilename);//这里我们暂时不用模板
// 打开 Excel 模板
book = File.Exists(tempfilename) ? new Workbook(tempfilename) : new Workbook();
sheet = book.Worksheets[];
}
/// <summary>
/// 保存文件
/// </summary> /// <param name="name"></param>
public void SaveReprotFile( string name)
{
// book.Save(System.Web.HttpContext.Current.Response, "学生信息.xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Xlsx)); book.Save(System.Web.HttpContext.Current.Response, HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8) + ".xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Excel97To2003));
//try
//{
// // filePath = Server.MapPath(filePath);
// if (File.Exists(name))
// {
// FileInfo info = new FileInfo(name);
// long fileSize = info.Length;
// HttpContext.Current.Response.Clear();
// HttpContext.Current.Response.ContentType = "application/octet-stream";
// HttpContext.Current.Response.AddHeader("Content-Disposition", "attachement;filename=" + (info.FullName.));
// //指定文件大小
// HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
// HttpContext.Current.Response.WriteFile(name, 0, fileSize);
// HttpContext.Current.Response.Flush();
// }
//}
//catch
//{ } //#region 输出到Excel
//using (MemoryStream ms = new MemoryStream())
//{
// // 生成的文件名称
// // string ReportFileName = string.Format("Excel_{0}.xls", DateTime.Now.ToString("yyyy-MM-dd") + name); // book.Save(ms, new OoxmlSaveOptions(SaveFormat.Xlsx));//默认支持xls版,需要修改指定版本
// System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", name));
// System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
// System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
// book = null;
// System.Web.HttpContext.Current.Response.End();
//}
//#endregion
} /// <summary>
///
/// </summary>
/// <param name="outfilename">导出文件路径</param>
/// <param name="tempfilename">导入文件路径</param>
/// <param name="tempfilename">模板文件路径</param>
public AsposeExcel(string outfilename, string fullfilename, string tempfilename) //导出构造数
{
Aspose.Cells.License license = new Aspose.Cells.License();
license.SetLicense("Aspose.Cells.lic"); outFileName = outfilename;
fullFilename = fullfilename;
book = new Workbook();
// book.Open(tempfilename);这里我们暂时不用模板
sheet = book.Worksheets[];
}
/// <summary>
/// 导入文件路径
/// </summary>
/// <param name="fullfilename"></param>
public AsposeExcel(string fullfilename) //导入构造数
{
Aspose.Cells.License license = new Aspose.Cells.License();
license.SetLicense("Aspose.Cells.lic"); fullFilename = fullfilename;
// book = new Workbook();
// book.Open(tempfilename);
// sheet = book.Worksheets[0];
}
private void AddTitle(string title, int columnCount)
{
sheet.Cells.Merge(, , , columnCount);
sheet.Cells.Merge(, , , columnCount);
Cell cell1 = sheet.Cells[, ];
cell1.PutValue(title);
Style style = new Style(); style.HorizontalAlignment = TextAlignmentType.Center;
style.Font.Name = "黑体";
style.Font.Size = ;
style.Font.IsBold = true;
Cell cell2 = sheet.Cells[, ];
cell1.PutValue("查询时间:" + DateTime.Now.ToLocalTime());
cell2.SetStyle(style);
}
private void AddHeader(DataTable dt)
{
Cell cell = null;
Style style = new Style();
for (int col = ; col < dt.Columns.Count; col++)
{
cell = sheet.Cells[, col];
cell.PutValue(dt.Columns[col].ColumnName);
style.Font.IsBold = true;
cell.SetStyle(style);
}
}
private void AddBody(DataTable dt)
{
Style style = new Style();
for (int r = ; r < dt.Rows.Count; r++)
{
for (int c = ; c < dt.Columns.Count; c++)
{
sheet.Cells[r+, c].PutValue(dt.Rows[r][c].ToString());
style.Font.Name = "宋体";
style.Font.Size = ;
sheet.Cells[r + , c].SetStyle(style);
//r+数值,这个数值再加1表示从第几行开始
//sheet.Cells[r + 1, c].PutValue(dt.Rows[r][c].ToString());
}
}
} //导出------------下一篇会用到这个方法
public Boolean DatatableToExcel(DataTable dt)
{
Boolean yn = false;
try
{
//sheet.Name = sheetName;
//AddTitle(title, dt.Columns.Count);
//AddHeader(dt);
AddBody(dt);
sheet.AutoFitColumns();
//sheet.AutoFitRows();
book.Save(outFileName);
yn = true;
return yn;
}
catch (Exception e)
{
return yn;
// throw e;
}
}
public DataTable ExcelToDatatalbe()//导入
{
Workbook book = new Workbook();
book.Open(fullFilename);
Worksheet sheet = book.Worksheets[];
Cells cells = sheet.Cells;
//获取excel中的数据保存到一个datatable中
DataTable dt_Import = cells.ExportDataTableAsString(, , cells.MaxDataRow + , cells.MaxDataColumn + , false);
// dt_Import.
return dt_Import;
}
}
}

利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。的更多相关文章

  1. 在ASP.NET MVC中利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。

    正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的'好'东西记 ...

  2. 将查询到的数据导出到Excel终结版

    吐槽 最近新项目需要用到导出数据到Excel,试了试之前写的一篇博文,但是感觉那个不太好,主要原因是没能实现样式控制,今天我们就来介绍一种新的导出Excel方法,而且这种方法很轻量级,它利用xml生成 ...

  3. 怎么利用Aspose.Cells 获取excel 数据表中sheet的名称

    说明:开发环境 vs2012 asp.net mvc4 c# 利用Aspose.Cells 获取Excel数据表的sheet的名称,并把获取的名称赋值给easyUI 的combobox 1.运行效果 ...

  4. 匿名类型 使用泛型T linq返回dynamic类型的匿名实体 如何把匿名类型.GetType()返回的对象传进泛型里面 EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题

    [100分]紧急求助:LinQ下使用IQueryable<T>如何将返回类型<T>使用匿名类型 问题描述如下:我有一个方法如下:public IQueryable Dissen ...

  5. sql语句中查询出的数据添加一列,并且添加默认值

    查询出数据,并且要添加一列表中都不存在的数据,且这一列的值都是相等的 select app_id,app_secret from wx_ticket group by app_id; 查询出的数据是 ...

  6. 使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!

    一.需求 我们会遇到开发任务: 经理:小王,你来做一下把数据库里的数据导出到Excel中,一个表是一个sheet,不要一个表一个Excel. 小王:好的,经理.(内心一脸懵逼) 二.前期准备 首先我们 ...

  7. Java利用Apache POI将数据库数据导出为excel

    将数据库中的数据导出为excel文件,供其他人查看 public class POITest { public static void main(String[] args) { POITest te ...

  8. asp.net将数据导出到excel

    本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...

  9. 使用apache的poi来实现数据导出到excel的功能——方式二

    此次,介绍利用poi与layui table结合导出excel.这次不需要从数据库中查询出来的数据进行每一行的拼接那么麻烦,我们这次将标题定义一个id值,对应从数据库中查找出来的字段名即可. 1.po ...

随机推荐

  1. 【JZOJ4831】【NOIP2016提高A组集训第3场10.31】方程式

    题目描述 数据范围 解法 枚举根之后,使用大除法. 代码 #include<stdio.h> #include<iostream> #include<string.h&g ...

  2. hdu 2844 混合背包【背包dp】

    http://acm.hdu.edu.cn/showproblem.php?pid=2844 题意:有n种纸币面额(a1,a2,...an),每种面额对应有(c1,c2,...cn)张.问这些钱能拼成 ...

  3. springboot项目启动,但是访问报404错误

    启动类Application上加了@ComponentScan(basePackages = {})这个注解导致controller扫描不到导致的,如果加了这个注解,springboot就不会扫描Ap ...

  4. 阿里开源新一代 AI 算法模型,由达摩院90后科学家研发

    最炫的技术新知.最热门的大咖公开课.最有趣的开发者活动.最实用的工具干货,就在<开发者必读>! 每日集成开发者社区精品内容,你身边的技术资讯管家. 每日头条 阿里开源新一代 AI 算法模型 ...

  5. [React Native]StatusBar的使用

    StatusBar是React Native 0.20 新增的跨平台组件,它可以用来设置并动态改变设备的状态栏显示特性. 虽然说是跨平台的组件, 但是有些属性不是跨平台的 ,我们需要注意下.因为IOS ...

  6. POLARDB 2.0 重磅升级,分别支持Oracle与PostgreSQL

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 POLARDB 2.0 重磅升级 2019年6月19日15时,阿里云 POLAR ...

  7. 根据花瓶的侧面投影图,用Matlab绘制花瓶的三维立体图

    现有一花瓶侧面投影如图 问题: 1)    做出该花瓶三维立体图: 2)    计算其表面积:  计算其体积. 第一次参加数学建模,从来没有接触过Matlab语言,一上来就碰到这种数字图像处理的问题就 ...

  8. MyEclipse2016项目内复制一个项目,如何更改项目的访问路径

    在MyEclipse2010版本如果复制了一个项目,需要改项目的访问路径的话,可以选中项目右键,点开Properties,在顶部搜索web,就会出现如下内容,这是只需要在里面更改路径就可以了. 而在2 ...

  9. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  10. @noi.ac - 506@ 强连通分量

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个叫能求出有向图中所有的强连通分量的算法,你决定将 ...