关于 java poi 导出excel时 导出多个sheet的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 java poi 导出excel时 导出多个sheet的问题相关的知识,希望对你有一定的参考价值。

如题,是这样的,在导出excel时候我需要导出多个sheet页,可是我的后面sheet页会覆盖前面sheet页的内容~!!比如导出7个sheet ~原本每一个sheet页内容应该不一样但是现在是跟第七个一模一样~~
我是这么写的代码
HSSFWorkbook workbook = null;
workbook=new HSSFWorkbook();

for()

//没有现成的文件需要重新计算
HSSFSheet sheet_sin =workbook.createSheet(month_query1);
sheet_sin= makeJDL(year_query,month_query1,sheet_sin,workbook);



就这个结构 求高手看看有什么问题~~

看你代码可不是循环创建相同的sheet么,传参都是一样的。一般创建sheet不用写循环吧,有几个sheet页不是也知道吗,何况你也说了,sheet的内容是不一样的。如果你循环创建的sheet,劝你创建的对象名也要不一样,要不让你怎么获取对应的sheet,怎么再创建row,cell?追问

HSSFSheet sheet_sin =workbook.createSheet(month_query1);是创建不同的sheet页,怪我没写清楚 month_query1是个变量的 不是固定的 所以每次想当于创建一个新的sheet 事实上我也导出了这些sheet名字也不同 但是 内容却是和最后一个一样~

参考技术A 你写的上面这些代码应该都没问题。
问题可能出在:
从数据库导出数据的话,sql语句是不是要换一下。比如:
select top 50000 * from 表名 where id not in(select top "+50000*i+" id from 表名)
50000代表每个sheet放5w条记录;

i是你for循环里面定义的int变量。
参考技术B createSheet(month_query1)
参数 month_query1 这个是名称,每个Sheet的,都要不同追问

这个是传递过来的参数 是不同的~~

参考技术C 楼主你问题解决了吗?我这边项目情况也是这样,循环createSheet(),但是在第三张sheet后就开始被后面的sheet数据覆盖,代码调试正常。createSheet()是用for循环去调模板的index

Java 利用poi 导出excel表格 如何在导出时自由选择路径?

能导出成功,知识代码把路径写死了,想要实现自己选择保存路径。

导出时自由选择路径的代码如下:

1、后台输出Excel文件代码:


OutputStream output = response.getOutputStream();


response.reset();


response.setHeader("Content-disposition", "attachment; filename=" + path);


response.setContentType("Content-Type:application/vnd.ms-excel ");


wb.write(output);


output.close();

2、前端代码:

window.open("getExcelList","_blank");

导出excel数据

* @param id

* @param m

* @return

*/

@RequestMapping("/exportExcel")

public void exportExcel(@RequestParam("id") Integer id, Model m,HttpServletRequest req, HttpServletResponse resp)

try

ExportExcel<P2pLoanPlanVo> ex = new ExportExcel<P2pLoanPlanVo>();

String[] headers = "最迟还款日", "还款金额","剩余几天","逾期几天", "罚息","是否垫付","状态","是否发放收益";

List<P2pLoanPlanVo> dataset = new ArrayList<P2pLoanPlanVo>();

List<P2pLoanPlan> plans = this.planService.getListByLoan(id);

for (int i = 0; i < plans.size(); i++)

P2pLoanPlanVo p2pLoanPlanVo = new P2pLoanPlanVo();

p2pLoanPlanVo.setRepayDate(plans.get(i).getRepayDate());

p2pLoanPlanVo.setRepayAmount(plans.get(i).getRepayAmount());

if(plans.get(i).getRepayDays() >= 0 && plans.get(i).getStatus() == 0)

p2pLoanPlanVo.setRepayDays(plans.get(i).getRepayDays());

else

p2pLoanPlanVo.setRepayDays(0);

if(plans.get(i).getRepayDays() < 0 && plans.get(i).getStatus() == 0)

p2pLoanPlanVo.setRepayYqDays(-plans.get(i).getRepayDays());

else

p2pLoanPlanVo.setRepayYqDays(0);

参考技术A 主要代码如下:
后台输出Excel文件代码:
OutputStream output = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=" + path);
response.setContentType("Content-Type:application/vnd.ms-excel ");
wb.write(output);
output.close();
前端代码:window.open("getExcelList","_blank");
参考技术B 做个临时文件,在重定向到这个临时文件,浏览器就会选择下载追问

我不明白,没学这个多久,望耐心解释~十分感谢~

追答

在servlet中,

//把上边的改成
try
    wb.write(response.getOutputStream());

参考技术C 可以用pageoffice导出excel. pageoffice 调用的是本地的office,导出excel可以弹出另存的对话框,用户可以选择自己想要的位置进行保存.

以上是关于关于 java poi 导出excel时 导出多个sheet的问题的主要内容,如果未能解决你的问题,请参考以下文章

求问 java poi 导出多个sheet页

关于java poi导出excel弹出下载框无法弹出的问题

Java 利用poi 导出excel表格 如何在导出时自由选择路径?

JAVA POI导出excel:多个sheet

java 操作poi 导出excel 多个sheet

java POI excel 导出复合样式(一个单元格两个字体)