前后端分离,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不一致的情况 解决方法: 前端:要在 ...
随机推荐
- python基础数据类型和初级应用
1.整数: int -- 计算和比较 2 -- 10 推位 8421 20 21 -- 2**7 10 - 2 bit_length 二进制的有效占用位数 # 123 # 计算和比较 # 14 0 # ...
- Spring Boot 获取yaml配置文件信息
Spring boot 项目启动过程中: org.springframework.boot.SpringApplication#prepareEnvironment 当程序步入listeners.en ...
- Css几个兼容性问题
1.BUG_fireFox!!!一个容器内的子容器如果要左右浮动的话,需要在这个容器设置上样式:"overflow:hidden". 注:内部元素浮动就会导致外面的容器的高度在fi ...
- ELK电子书籍
Elasticsearch in Action(英文版).pdfElasticsearch实战 in action(中文版).pdfElasticsearch技术解析与实战.pdfElasticsea ...
- 埋在 MYSQL 数据库应用中的17个关键问题!
Mysql的使用非常普遍,跟mysql有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份.集群.横向扩展.纵向扩展.负载均衡.读写分离等.要想掌握其中的精髓,可得花费不少功力,虽然目前流行 ...
- python 一键登录微信分析好友性别 地址 生成结果
# -*- coding:utf- -*- """ author:Mr Yang data:// """ import itchat imp ...
- PHP之常用操作
在最高权限下执行相关命令 1)查看PHP配置 php --ini Configuration File (php.ini) Path: /www/server/php//etc Loaded Conf ...
- 改变font-weight的数值,样式并不会改变的原因
通常情况下,一个特定的字体仅会包含少数的可用字重.若所指定的字重不存在直接匹配,则会通过字体匹配算法规则匹配使用邻近的可用字重.这也就是为什么我们有时候使用特定字重时没有“生效”,看起来跟其它字重差不 ...
- Linux 日志分析
学会查看日志文件是一件很有意义的事,因为在Linux系统中运行的程序通常会把一些系统消息和错误消息写入对应的日志中,若是一旦出现问题,我们就可以通过查看日志来迅速定位,及时解决故障. 日志的三种类型 ...
- c++ 实现https网页上的图片爬取
一.主要的原理 我们通过发送一个http请求,获得目标网页的html源代码,然后通过正则表达式获取到图片的URL,把该网页的所有的图片都保存到一个文件夹,这就是整个软件的流程. 二.具体的实践 现在很 ...