Excel导出文件流下载
Controller.cs
@CrossOrigin(allowCredentials="true", allowedHeaders="*", methods={RequestMethod.GET,
RequestMethod.POST, RequestMethod.DELETE, RequestMethod.OPTIONS,
RequestMethod.HEAD, RequestMethod.PUT, RequestMethod.PATCH}, origins="*")
@RequestMapping("/ot")
@ResponseBody
public void ot(String key, HttpServletResponse response) {
try {
String storeName = key+".xlsx";
XSSFWorkbook workBook = excelService.outputExcel(key);
ByteArrayOutputStream bt = new ByteArrayOutputStream();
workBook.write(bt);
workBook.close();
bt.flush();
ByteArrayInputStream bis = new ByteArrayInputStream(bt.toByteArray());
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(storeName.getBytes("utf-8"), "ISO8859-1"));
//设置输出长度
response.setHeader("Content-Length", String.valueOf(bt.size()));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
//关闭流
bis.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Service.cs
public XSSFWorkbook outputExcel(String key){
String json = "{status:'OK', msg: '导出完毕!'}";
String schame = key.split("\\.")[0];
String tablename = key.split("\\.")[1];
XSSFWorkbook workBook = new XSSFWorkbook();
XSSFSheet sheet = workBook.createSheet();
workBook.setSheetName(0,"Sheet1");
XSSFRow titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue(tablename);
Jedis jedis = new Jedis("10.8.4.94");
List<String> tables = new ArrayList<String>();
jedis.select(2);
try {
tables = jedis.lrange("db_tables", 0, -1);
} catch (Exception e) {
// TODO: handle exception
}finally{
jedis.close();
}
for(String s:tables){
JSONObject obj = JSON.parseObject(s);
if(obj.getString("owner").equals(schame) && obj.getString("table_name").equals(tablename)){
titleRow.createCell(1).setCellValue(obj.getString("comment"));
}
}
XSSFRow secondRow = sheet.createRow(1);
secondRow.createCell(0).setCellValue("字段英文名");
secondRow.createCell(1).setCellValue("字段类型");
secondRow.createCell(2).setCellValue("注释");
secondRow.createCell(3).setCellValue("是否主键");
secondRow.createCell(4).setCellValue("是否非空");
secondRow.createCell(5).setCellValue("默认值");
jedis = new Jedis("10.8.4.94");
List<String> columns = new ArrayList<String>();
jedis.select(2);
try {
columns = jedis.lrange(key, 0, -1);
} catch (Exception e) {
// TODO: handle exception
}finally{
jedis.close();
}
int k = 2;
for(String s: columns){
JSONObject obj = JSON.parseObject(s);
XSSFRow row = sheet.createRow(k);
row.createCell(0).setCellValue(obj.getString("column_name"));
row.createCell(1).setCellValue(obj.getString("data_type").equals("VARCHAR2")?(obj.getString("data_type")+"("+obj.getString("data_length")+")"):obj.getString("data_type"));
row.createCell(2).setCellValue(obj.getString("comment"));
row.createCell(3).setCellValue(obj.getString("pk"));
row.createCell(4).setCellValue(obj.getString("nullable"));
row.createCell(5).setCellValue(obj.getString("data_default"));
k++;
}
return workBook;
}
Excel导出文件流下载的更多相关文章
- World、Excel利用流下载
/** * 下载excel * @param request * @param response * @param filePath * @param fileName */public static ...
- excel导入、下载功能
1.excel导入.下载功能 2.首先,我们是居于maven项目进行开发引入poi,如果不是那就手动下载相应的jar包引入项目就可以了 <!-- poi --> <dependenc ...
- java实现点击查询数据生成excel文件并下载
须先导入关键maven包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi& ...
- asp.net将页面内容按需导入Excel,并设置excel样式,下载文件(解决打开格式与扩展名指定的格式不统一的问题)
//请求一个excel类 Microsoft.Office.Interop.Excel.ApplicationClass excel = null; //创建 Workbook对象 Microsoft ...
- Java 读取excel 文件流
public static void initType(String path) { try { //1 获取excel文件流 excel xls 文件 暂不支持xlsx if (path.conta ...
- java导出excel 浏览器直接下载或者或以文件形式导出
/** * excel表格直接下载 */ public static void exportExcelByDownload(HSSFWorkbook wb,HttpServletResponse ht ...
- js文件流下载通用方法
通常我们会用到文件流下载文件,下面给大家一个通用的文件流下载的js /* *下载文件 * options:{ * url:'', //下载地址 * isNewWinOpen:false,是否新窗口打开 ...
- js实现使用文件流下载csv文件
1. 理解Blob对象 在Blob对象出现之前,在javascript中一直没有比较好的方式处理二进制文件,自从有了Blob了,我们就可以使用它操作二进制数据了.现在我们开始来理解下Bolb对象及它的 ...
- 文件流下载时 axios blob文件大小不正确?
文件流下载时 js blob文件大小不正确? res.data的字节长度 length blob.size匹配不上.. axio请求里必须修改 responseType: 'blob' 参数, 默认是 ...
随机推荐
- ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)
There are N children in kindergarten. Miss Li bought them NNN candies. To make the process more inte ...
- 2017.4.9 函数式编程FP
函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程范式,和面向对象的编程方式一样,是编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Cat ...
- 【HAOI2012】容易题
终于自己做出一道题了quq 原题: 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[ ...
- POJ3904 Sky Code
题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...
- CH#46A 磁力块
题意 磁力块 CH Round #46 - 「Adera 8」杯NOI模拟赛 描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐 ...
- vue全家桶+Koa2开发笔记(8)--开发网页
1.使用 mongoose 动态倒入数据 mongoimport -d student -c areas areas.dat -d 后面是数据库名称: -c后面是表名称 最后是数据源 2.使用vue的 ...
- keydown,keypress,keyup三者之间的区别
最近看了Javascript高级教程中对过滤输入的介绍,想实现比如电话号码中不能包好非数值的字符,而相应文本中插入字符的操作是keypress事件,所以就想通过阻止这个事件的默认事件行为来阻止这个事件 ...
- 自动化部署--shell脚本--2
node1和node2都装apache [root@linux-node1 ~]# yum install httpd -y Loaded plugins: fastestmirror Loadi ...
- 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新
大家好, 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...
- C++ vs Objective C
oc Short list of some of the major differences: C++ allows multiple inheritance, Objective-C doesn't ...