压缩包里面excel 导出 (跨行跨列)

创建好 excel模板  直接读取内容即可的方法

1、
List content = new ArrayList();
InputStream istream = null;//创建输入流
String templateFile = null;
String parentPath = request.getSession().getServletContext().getRealPath("/") + "/WEB-INF/templates/";

//获取根据sql查询出来的结果
List result = this.xxdjShengzsfcdjService.getListBySql(sql.toString());

//循环结果添加到content内容里面
Object[] obj = new Object[36];
for (int i = 0; i < result.size(); i++) {
obj = (Object[]) result.get(i);
String[] str = new String[36];
str[0] = obj[0] == null ? "" : obj[0].toString();
str[1] = obj[1] == null ? "" : obj[1].toString();
content.add(str);
}

//从session中获取当前登录对象

XtglYongh self = (XtglYongh) request.getSession().getAttribute(
"userInfo");

2、根据查询的种类不同 获得的excel 模板也不同
if(xxcxShifcxxcxtjForm.getFenwclss().equals("0")){
templateFile = "szc_template_all.xls";
}else  if(xxcxShifcxxcxtjForm.getFenwclss().equals("1")){
templateFile = "szc_template_fwcl.xls";

3、将模板内容写入到 输入流
istream = new FileInputStream(parentPath+templateFile);

//创建excel 文件  self.getYonghm()是excel的头部
CreateExcelFile cef = new CreateExcelFile(content,name,  self.getYonghm(),istream,response.getOutputStream() ,types0);

fileName = cef.getZipExcelFileName() + ".zip";

//添加文件名称
response.addHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");

//self.getYonghm():当前用户  ;name:表头
cef.getZipExcelFile2(self.getYonghm(),name);

javabean : 
CreateExcelFile:

private List list;

private String reportTitle;

private OutputStream outputStream;

private InputStream inputStream;

private HttpServletRequest request;

private HttpServletResponse response;

private String userName;

private int max_row=59997;

private String[] types;

//通过构造 创建对象
public CreateExcelFile(List content, String name,String yonghm,
InputStream istream,OutputStream ostream, String[] types2) {
this.list=content;
this.reportTitle = name;
this.userName=yonghm;
this.inputStream=istream;
this.outputStream = ostream;
this.types=types2;
}

//得到zip压缩包文件的名字
public String getZipExcelFileName() {
return ChineseToUnicode(reportTitle + this.getCurrentDate("yyyyMMdd"));
}
//转编码格式
private static String ChineseToUnicode(String s) {
try {
String newstring = null;
newstring = java.net.URLEncoder.encode(s,"UTF-8"); 
return newstring;
} catch (UnsupportedEncodingException e) {
return s;
}
}

//获得zip压缩包里面excel的文件
public String getZipExcelFile2(String userName,String name) {
String zipFileName = null;
if (list == null || list.size() < 1)
return zipFileName;
if (reportTitle == null || "".equals(reportTitle))
reportTitle = "Sheet1";
HSSFWorkbook wb = null;
if (USE_TEMPLATE) {
try {
wb = this.getHSSFWorkbookByTemplate(userName,name);
} catch (IOException e1) {
return null;
}
} else {
wb = this.getHSSFWorkbook();
}
zipFileName = this.getZipExcel(wb);
String xlsFileName = zipFileName.substring(0, zipFileName.indexOf("."))
+ ".xls";

java.io.FileInputStream fis = null;
OutputStream os = null;
if (this.outputStream != null)
os = this.outputStream;
else
try {
os = this.response.getOutputStream();
} catch (IOException e1) {
return null;
}

try {
fis = new java.io.FileInputStream(zipFileName);
byte[] b = new byte[2048];
int i = 0;
while ((i = fis.read(b)) > 0) {
os.write(b, 0, i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
// log.error("Zip输出流错误:" + this.getClass().getName());
return null;
} finally {
try {
if (fis != null)
fis.close();
if (os != null) {
os.flush();
os.close();
os=null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

new File(zipFileName).delete();
new File(xlsFileName).delete();
return zipFileName;
}

//userName是当前登录对象名字 、name 是表头
private HSSFWorkbook getHSSFWorkbookByTemplate(String userName,String name) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(inputStream);
HSSFRow row;
HSSFSheet sheet = wb.getSheetAt(0);
int rowStart = 4;
int count = list.size();
sheet.getRow(0).getCell(0).setCellValue(name);
sheet.getRow(1).getCell(1).setCellValue(DateUtils.format(new Date(),"yyyy-MM-dd"));
sheet.getRow(1).getCell(3).setCellValue(userName);
sheet.getRow(1).getCell(5).setCellValue(count);
for (int i = 0; i < count; i++) {
Object[] obj = (Object[]) list.get(i);
if (list.get(i)!=null){
row = sheet.createRow(rowStart++);// 建立新row
HSSFCellStyle cs = wb.createCellStyle();   
HSSFFont font = wb.createFont(); 
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);   
font.setFontName("仿宋_GB2312");   
font.setFontHeightInPoints((short) 10); 
cs.setFont(font);   
cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
cs.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中   
cs.setWrapText(true);//自动换行        
cs.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框    
cs.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
cs.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框    
cs.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框

for (int j = 0; j < obj.length; j++) {
HSSFCell cell = row.createCell(j);// 建立新cell
if (obj[j] != null&&!"".equals(obj[j]))
if(types!=null&&types.length>0){
if("string".equals(types[j])){
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(obj[j].toString());
}
else{
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(Float.parseFloat(obj[j].toString()));
}
}else{
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(obj[j].toString());
}
cell.setCellStyle(cs);
cell = null;
}
}
}
return wb;
}

压缩包里面excel 导出 (跨行跨列)相关推荐

  1. javascript 将table导出 Excel ,可跨行跨列

    原文地址:https://www.cnblogs.com/hailexuexi/p/10795887.html <script language="JavaScript" t ...

  2. 使用POI导出跨行跨列

    https://q.cnblogs.com/q/52096/ @RequestMapping("/export3") public void export3(HttpServlet ...

  3. java使用poi读取跨行跨列excel

    java使用poi读取跨行跨列excel 1.需求背景 2.实现思路分析 3.重要代码片码说明 4.完整的代码类如下: 5.完整的demo代码提供如下 6.demo执行结果 1.需求背景 最近有一个工 ...

  4. PHP数据跨行跨列处理

    PS PHP数据跨行跨列处理,表格展示,Excel导出.后台是Dcat Admin,导出是"maatwebsite/excel": "^3.1" Excel效果 ...

  5. EasyUI Datagrid跨行跨列的需求

    常规开发后台管理系统中遇到的列表查询,都是用到最基本的数据网格,不包括单元格合并,多列页眉,冻结列和页脚等需求.类似如下这个列表 实现也很简单,引入相关的js.css文件,html标签定义展示的列,通 ...

  6. html跨行跨列学生报名表,HTML表格跨行、跨列操作(rowspan、colspan)

    一般使用 元素的colspan属性来实现单元格跨列操作,使用元素的rowspan属性来实现单元格的跨行操作. colspan属性规定单元格可横跨的列数,所有浏览器都支持colspan属性.其取值为nu ...

  7. JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列

    pom.xml依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</a ...

  8. 小程序跨行跨列多列复杂表格实现

    今天来实现个跨行跨列多列表格. 如图,这是个列数不确定,有的单元格还要跨行跨列的复杂表格. 这里暂时最多支持4列,列数再多就放不下了. 实现原理 实现原理比较简单,通过多个嵌套的循环将数据取出. 上面 ...

  9. el-table 跨行/跨列 的写法

    一. el-table 跨行/跨列 的写法 <el-table>:span-method="objectSpanMethod" </el-table> // ...

最新文章

  1. node JS獲取GPS_Node.js 14 正式发布:V8 引擎升级,新增异步本地存储 API
  2. Dart.Powerweb.livecontrols应用
  3. Python 03 学习内容整理
  4. 动态规划之力扣股票类问题
  5. DuangDuangDuang!码云项目的 Readme.md 特殊技能
  6. mysql索引_MySQL索引介绍和实战
  7. 精通Android自定义View(五)自定义属性值使用详情
  8. html5数组删除相同数据,js数组相减简单示例【删除a数组所有与b数组相同元素】...
  9. java将当前页面隐藏,java 如何将当前程序隐藏到任务栏(类似windows上的其他程序)...
  10. oracle的解析計劃,Oracle中获取执行计划的几种方法分析
  11. 【文献阅读笔记】(1):一篇手把手教你做GWAS的Guideline文献解读
  12. 销傲销售过程GSP管理系统功能概述
  13. 《计算广告学之内容匹配广告展示广告原理、技术和实践》学习笔记
  14. C# Form窗体打开BIN文件并读取二进制数据
  15. LR 杂记--nmon 分析 AIX 和 Linux 性能
  16. HTML5----响应式(自适应)网页设计
  17. 企业微信公众号运营技巧有哪些
  18. 有关蓝色RGB的数值
  19. 【USACO 2020 January Silver】Loan Repayment 题解
  20. 计算机毕业设计ssm基于客户时间窗变化的物流配送管理系统设计ro75j系统+程序+源码+lw+远程部署

热门文章

  1. 持续集成之企业微信通知:1:群机器人使用方法介绍
  2. 11月更新!一口气上线20+新功能,3D架构拓扑图更具趣味性
  3. QEMU中的内存API(2)
  4. 高级软件工程(2022春)课程总结
  5. 生物特性再次助力无人机技术突破
  6. 大厂面经丨Nginx 面试 40 问
  7. h5阿里云播放器 常规使用
  8. 【纯干货】SpringBoot 整合 ES 进行各种高级查询搜索
  9. 基于Keras2《面向小数据集构建图像分类模型》——Kaggle猫狗数据集
  10. Unity3D基础知识学习笔记