前后端分离,get请求导出
[HttpGet]
public HttpResponseMessage Export(string obj)
{
string eventType = string.Empty;
string exportFileName = string.Empty;
//查询出要导出数据json字符串
var resultValue = Query(obj);
//解析join字符串到对象
var result = JsonConvert.DeserializeObject<Data>(resultValue);
//解析join字符串到对象
//JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
//javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
//var result = javaScriptSerializer.Deserialize<Data>(resultValue);
if (result.Data.PageDatas.Count < 50000)
{
var list = result.Data.PageDatas;
var res = ExcelImport(list, eventType.ToString(), exportFileName);
return res;
}
else
{
var message = "数据太多,无法导出数据";
string str = ApiResultHelper.GetMessage(message.ToString());
return new HttpResponseMessage { Content = new StringContent(str, Encoding.UTF8, "application/json") };
//return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
protected HttpResponseMessage ExcelImport(List<PageData> PageDatas)
{
DataTable dt = new DataTable();
#region DataTable数据
dt.Columns.Add("事件名称");
dt.Columns.Add("设备名称");
dt.Columns.Add("事件类型");
dt.Columns.Add("发生时间");
int rowIndex = 0;
foreach (var item in PageDatas)
{
dt.Rows.Add();
dt.Rows[rowIndex][0] = item.EventName;
dt.Rows[rowIndex][1] = item.DeviceName;
dt.Rows[rowIndex][2] = item.RecordName;
dt.Rows[rowIndex][3] = item.IssueTime;
rowIndex++;
}
#endregion DataTable数据
var file = ExcelStream(dt);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(file);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = exportFileName + ".xls";
return result;
}
private MemoryStream ExcelStream(DataTable dt)
{
//var list = dc.v_bs_dj_bbcdd1.Where(eps).ToList();
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet1 = workbook.CreateSheet("Sheet1");
//1-创建首行
IRow headRow = sheet1.CreateRow(0);
//1.1-设置首行样式
IFont font = workbook.CreateFont();
font.Boldweight = (short)FontBoldWeight.Bold; //字体加粗
ICellStyle headCellStyle = workbook.CreateCellStyle();
headCellStyle.SetFont(font);
headCellStyle.Alignment = HorizontalAlignment.Center; //字体居中
//1.2-设置首行标题
int rowIndex = 0;
foreach (DataColumn dc in dt.Columns)
{
ICell cell = headRow.CreateCell(rowIndex);
cell.SetCellValue(dc.ColumnName);
cell.CellStyle = headCellStyle;
rowIndex++;
}
//2.1-内容行样式
ICellStyle contentCellStyle = workbook.CreateCellStyle();
contentCellStyle.Alignment = HorizontalAlignment.Center; //字体居中
contentCellStyle.WrapText = true; //自动换行
int rowCount = 0;
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
IRow row = sheet1.CreateRow(rowCount + 1);
for (int i = 0; i < dt.Columns.Count; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(dr[i].ToString());
cell.CellStyle = contentCellStyle;
}
rowCount++;
}
}
for (var i = 1; i < dt.Rows.Count; i++)
{
IRow row = sheet1.CreateRow(i + 1);
//设置内容
for (var j = 0; j < dt.Columns.Count; j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue(dt.Rows[i][j].ToString());
cell.CellStyle = contentCellStyle;
}
}
//3-自动列宽-根据内容长度自动展开
for (int i = 0; i < dt.Columns.Count; i++)
{
sheet1.AutoSizeColumn(i);
}
MemoryStream file = new MemoryStream();
workbook.Write(file);
//这句代码非常重要,如果不加,会报:打开的EXCEL格式与扩展名指定的格式不一致
file.Seek(0, SeekOrigin.Begin);
return file;
}
前后端分离,get请求导出的更多相关文章
- Springboot+vue前后端分离项目,poi导出excel提供用户下载的解决方案
因为我们做的是前后端分离项目 无法采用response.write直接将文件流写出 我们采用阿里云oss 进行保存 再返回的结果对象里面保存我们的文件地址 废话不多说,上代码 Springboot 第 ...
- 谈谈渲染,玩玩nginx——前后端分离,转发请求到Tomcat的尝试
一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...
- laravel5.7 前后端分离开发 实现基于API请求的token认证
最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...
- Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置
前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个 ...
- 解决前后端分离的“两次请求”引出的Web服务器跨域请求访问问题的解决方案
在前后端分离的项目中,前端和后端可能是在不同的服务器上,也可以是Docker上,那就意味着前端请求后端Restful接口时,存在跨域情况. 后端在做了通用的跨域资源共享CORS设置后,前端在做ajax ...
- Spring Security 前后端分离登录,非法请求直接返回 JSON
hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...
- ASP.NET WebApi+Vue前后端分离之允许启用跨域请求
前言: 这段时间接手了一个新需求,将一个ASP.NET MVC项目改成前后端分离项目.前端使用Vue,后端则是使用ASP.NET WebApi.在搭建完成前后端框架后,进行接口测试时发现了一个前后端分 ...
- Django前后端分离跨域请求问题
一.问题背景 之前使用django+vue进行前后端分离碰到跨域请求问题,跨域(域名或者端口不同)请求问题的本质是由于浏览器的同源策略导致的,当请求的响应不是处于同一个域名和端口下,浏览器不会接受响应 ...
- 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)
利用Nginx轻松实现浏览器中Ajax的跨域请求(前后端分离开发调试必备神技) 前言 为什么会出现跨域? 造成跨域问题的原因是因为浏览器受到同源策略的限制,也就是说js只能访问和操作自己域下的资源,不 ...
- 前后端分离开发,跨域时jsessionid每次请求都变化的问题解决方法
本解决方法的使用前提是,前端开发使用的是vue,后端使用java(SpringMVC) 在前后端分离开发过程中,可能会出现因跨域而导致每次请求的jsessionid不一致的情况 解决方法: 前端:要在 ...
随机推荐
- Hive 教程(七)-DML基础
DML,Hive Data Manipulation Language,数据操作语言: 通俗理解就是数据库里与数据的操作,如增删改查,统计汇总等: Loading files into tables ...
- JavaScript快速排序法实现数组排序
大致分三步: 1.找基准(一般是以中间项为基准) 2.遍历数组,小于基准的放在left,大于基准的放在right 3.递归 var arr = [10,8,6,9,1,7,1,13,5,1,9]; / ...
- 10 Python之文件操作
1.文件操作 f = open(文件路径, mode="模式", encoding="编码") f: 文件句柄 文件的路径: 相对路径 相对于当前程序所在的文件 ...
- 11 Scrapy框架之递归解析和post请求
一.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化存储 - 需求分析:每一个页面对应一个url,则scrapy工程需要对每一个页码对应的url依次发起请求, ...
- node + express搭建api项目
express框架 描述 express是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能. 安装 // 1.使用npm淘宝镜像--cn ...
- CentOS MySql5.6编译安装
生产环境中,mysql服务器上边最好什么服务都不要再安装!!! 一.准备工作: # yum -y install make gcc-c++ cmake bison-devel ncurses-deve ...
- Delphi 变量的作用域
- linux 用户及文件权限管理
Linux 是一个可以实现多用户登陆的操作系统,比如“李雷”和“韩梅梅”都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是放在同 ...
- Python测试开发必知必会-PEP
互联网发展了许多年,不仅颠覆了很多行业,还让很多职位有了更多的用武之地.产品发布迭代速度不断加快,让测试开发这个岗位简直火得不要不要的. Python语言,作为一种更接近人来自然语言的开发语言,以简洁 ...
- Cuda9.0安装
CUDA 9.0安装笔记 最近实验室新购买两块K80的GPU.作为好奇的小猪,当然会自报奋勇去配置环境.在这篇博客中将会介绍在centos7下配置CUDA 9.0的步骤. 1. 什么是CUDA? 引用 ...