压缩包里面excel 导出 (跨行跨列)
压缩包里面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 导出 (跨行跨列)相关推荐
- javascript 将table导出 Excel ,可跨行跨列
原文地址:https://www.cnblogs.com/hailexuexi/p/10795887.html <script language="JavaScript" t ...
- 使用POI导出跨行跨列
https://q.cnblogs.com/q/52096/ @RequestMapping("/export3") public void export3(HttpServlet ...
- java使用poi读取跨行跨列excel
java使用poi读取跨行跨列excel 1.需求背景 2.实现思路分析 3.重要代码片码说明 4.完整的代码类如下: 5.完整的demo代码提供如下 6.demo执行结果 1.需求背景 最近有一个工 ...
- PHP数据跨行跨列处理
PS PHP数据跨行跨列处理,表格展示,Excel导出.后台是Dcat Admin,导出是"maatwebsite/excel": "^3.1" Excel效果 ...
- EasyUI Datagrid跨行跨列的需求
常规开发后台管理系统中遇到的列表查询,都是用到最基本的数据网格,不包括单元格合并,多列页眉,冻结列和页脚等需求.类似如下这个列表 实现也很简单,引入相关的js.css文件,html标签定义展示的列,通 ...
- html跨行跨列学生报名表,HTML表格跨行、跨列操作(rowspan、colspan)
一般使用 元素的colspan属性来实现单元格跨列操作,使用元素的rowspan属性来实现单元格的跨行操作. colspan属性规定单元格可横跨的列数,所有浏览器都支持colspan属性.其取值为nu ...
- JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列
pom.xml依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</a ...
- 小程序跨行跨列多列复杂表格实现
今天来实现个跨行跨列多列表格. 如图,这是个列数不确定,有的单元格还要跨行跨列的复杂表格. 这里暂时最多支持4列,列数再多就放不下了. 实现原理 实现原理比较简单,通过多个嵌套的循环将数据取出. 上面 ...
- el-table 跨行/跨列 的写法
一. el-table 跨行/跨列 的写法 <el-table>:span-method="objectSpanMethod" </el-table> // ...
最新文章
- node JS獲取GPS_Node.js 14 正式发布:V8 引擎升级,新增异步本地存储 API
- Dart.Powerweb.livecontrols应用
- Python 03 学习内容整理
- 动态规划之力扣股票类问题
- DuangDuangDuang!码云项目的 Readme.md 特殊技能
- mysql索引_MySQL索引介绍和实战
- 精通Android自定义View(五)自定义属性值使用详情
- html5数组删除相同数据,js数组相减简单示例【删除a数组所有与b数组相同元素】...
- java将当前页面隐藏,java 如何将当前程序隐藏到任务栏(类似windows上的其他程序)...
- oracle的解析計劃,Oracle中获取执行计划的几种方法分析
- 【文献阅读笔记】(1):一篇手把手教你做GWAS的Guideline文献解读
- 销傲销售过程GSP管理系统功能概述
- 《计算广告学之内容匹配广告展示广告原理、技术和实践》学习笔记
- C# Form窗体打开BIN文件并读取二进制数据
- LR 杂记--nmon 分析 AIX 和 Linux 性能
- HTML5----响应式(自适应)网页设计
- 企业微信公众号运营技巧有哪些
- 有关蓝色RGB的数值
- 【USACO 2020 January Silver】Loan Repayment 题解
- 计算机毕业设计ssm基于客户时间窗变化的物流配送管理系统设计ro75j系统+程序+源码+lw+远程部署