起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17337|回复: 15

excel导出

  [复制链接]

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
发表于 2013-9-2 11:11:14 | 显示全部楼层 |阅读模式
本帖最后由 song_ning_ning 于 2014-1-23 15:33 编辑

同时导出主从表

思路:根据exportExcel组件导出excel中的信息查询从表信息 然后把从表信息手动保存到excel中

主表:FID(主键不导入excel中)    fYGBH(员工编号)   fYGXM(员工姓名)    fNL(年龄)    注:因为FID不导入excel中  所以保证主表信息在excel中至少有一列为唯一值  本例以fYGBH为唯一值
从表:fYGID(员工ID)对应的是主表中的FID,例子中不保存到excel中    fYF(月份)     fJXCJ(绩效成绩)      fJXJJ(绩效奖金)      
做法如下
1、在构建路径中添加/SA/excel/logic/code下的jar包
2、在process中引用/SA/excel/logic/action和/SA/excel/logic/code目录
3、在动作设置中添加exportExcelAfterAction,及执行后事件
4、在w文件的excel导出组件的action属性中选择/SA/excel/logic/action/exportExcel

在exportExcelAfter的执行后事件中添加如下代码:
  1.                 HSSFWorkbook workBook =(HSSFWorkbook)ModelUtils.getRequestContext().getActionContext().getParameter("excel");//获取主表的excel
  2.                 HSSFSheet sheet=workBook.getSheetAt(0);
  3.                 HSSFRow row=null;
  4.                 Row row1=null;
  5.                 HSSFCell cell=null;
  6.                 String id=null;
  7.                 List list=new ArrayList();
  8.                 for(int i=1;i<=sheet.getLastRowNum();i++){ //遍历主表的excel
  9.                         id=sheet.getRow(i).getCell(0).getStringCellValue();//获取excel中的员工编号(<font color="#ff0000">每条数据除FID外的唯一值</font>)
  10.                         list.add(id);
  11.                         
  12.                 }
  13.                 System.out.println("size:"+list.size());
  14.                 for(int j=0;j<list.size();j++){
  15.                         String sql="select EX_JXB.* from EX_JXB EX_JXB where EX_JXB.fYGID=(select EX_YGB from EX_YGB EX_YGB where EX_YGB.fYGBH='"+list.get(j)+"')";//先根据excel中的员工编号查询主表的FID,然后再根据员工ID查询从表的信息(<font color="#ff0000">主表FID与从表员工ID关联</font>)
  16.                         Table table=KSQL.select(sql, null, "/exportExcel/exportExcel/data", null);
  17.                         Iterator<Row> rows=table.iterator();
  18.                         row=sheet.createRow(sheet.getLastRowNum()+1);//追加一行
  19.                         row.createCell(1).setCellValue("月份");//设置追加行第一列为月份
  20.                         row.createCell(2).setCellValue("绩效成绩");//设置追加行第一列为绩效成绩
  21.                         row.createCell(3).setCellValue("绩效奖金");//设置追加行第一列为绩效奖金
  22.                         while(rows.hasNext()){   //保存主表中每条记录对应的从表的信息
  23.                                 row1=rows.next();
  24.                                 String yf=row1.getString("fYF");//获取月份值
  25.                                 String jxcj=row1.getString("fJXCJ");//获取绩效成绩值
  26.                                 float jxjj=row1.getFloat("fJXJJ");//获取绩效奖金值
  27.                                 row=sheet.createRow(sheet.getLastRowNum()+1); //追加一行
  28.                                 row.createCell(1).setCellValue(yf);//保存月份值
  29.                                 row.createCell(2).setCellValue(jxcj);//保存绩效成绩值
  30.                                 row.createCell(3).setCellValue(jxjj);//保存绩效奖金值
  31.                         }
  32.                 }
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

53

主题

313

帖子

1138

积分

金牌会员

Rank: 6Rank: 6

积分
1138
QQ
发表于 2013-9-23 14:21:36 | 显示全部楼层
mark!

397

主题

2437

帖子

4887

积分

论坛元老

Rank: 8Rank: 8

积分
4887
QQ
发表于 2013-9-23 16:16:47 | 显示全部楼层
标准动作ksql中做好表的关联,导出的时候不是把关联的表所有字段都能导出去吗?
QQ67886387

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-9-23 16:30:27 | 显示全部楼层
67886387 发表于 2013-9-23 16:16
标准动作ksql中做好表的关联,导出的时候不是把关联的表所有字段都能导出去吗? ...

对 可以的
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2014-1-23 15:31:28 | 显示全部楼层

导出加标题的excel

在exportExcelAfter的执行后事件中添加如下代码:
  1. HSSFWorkbook workbook=(HSSFWorkbook) ModelUtils.getRequestContext().getActionContext().getParameter("excel");
  2.                 HSSFSheet sheet=workbook.getSheetAt(0);
  3.                 sheet.shiftRows(0, sheet.getLastRowNum(), 1, false, false);
  4.                 CellRangeAddress region = new CellRangeAddress(0,0,0,2);//合并单元格
  5.                 sheet.addMergedRegion(region);
  6.                 HSSFFont font=workbook.createFont();//设置字体大小
  7.                 font.setFontName("黑体");
  8.                 font.setFontHeightInPoints((short) 18);
  9.                 HSSFCellStyle style=workbook.createCellStyle();//设置样式
  10.                 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  11.                 style.setFont(font);
  12.                 HSSFRow row=sheet.getRow(0);
  13.                 HSSFCell cell=row.createCell(0);
  14.                 cell.setCellStyle(style);
  15.                 cell.setCellValue("公司员工表");
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

397

主题

2437

帖子

4887

积分

论坛元老

Rank: 8Rank: 8

积分
4887
QQ
发表于 2014-1-24 09:16:53 | 显示全部楼层
4、在w文件的excel导出组件的action属性中选择/SA/excel/logic/action/exportExcel
为何要有第四条,选中这个action做什么的
QQ67886387

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2014-1-24 09:24:53 | 显示全部楼层
67886387 发表于 2014-1-24 09:16
4、在w文件的excel导出组件的action属性中选择/SA/excel/logic/action/exportExcel
为何要有第四条,选中这 ...

不加的话 不会执行到exportExcel执行后事件的
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

124

主题

249

帖子

610

积分

高级会员

Rank: 4

积分
610
QQ
发表于 2014-3-28 16:18:44 | 显示全部楼层
可以实现效果,谢了

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
发表于 2016-2-24 14:48:37 | 显示全部楼层
song_ning_ning 发表于 2014-1-23 15:31
在exportExcelAfter的执行后事件中添加如下代码:

这里能不能拿到 前端的参数,因为excel标题可能是有参数的

4

主题

22

帖子

64

积分

初级会员

Rank: 2

积分
64
QQ
发表于 2016-4-26 09:36:49 | 显示全部楼层
您好请问  有该方法的示例吗?
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-21 17:16 , Processed in 0.057548 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表