Click here to Skip to main content
15,888,980 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
i want to export huge records to excel file . When i export until 30000 records , the function is ok. But when i export more than 40000 records in doExport(response.getOutputStream()), Invalid row number (-32768) outside allowable range error is occoured. how to solve this problem in JSP .The code is the following



jave
if	((status!=null ) && (status.equals("download"))){
		double amnt=0.0,amnt1=0.0,amnt2=0.0,amnt3=0.0,amnt4=0.0;
		long start = System.currentTimeMillis();
		String filename = app.getString("button.TransactionInquiry")+App.getCurDateStr()+".xls";
		filename= new String(filename.getBytes("GBK"),"ISO8859-1");

		response.setContentType("application/vnd.ms-excel");
		response.setHeader("Content-disposition","attachment; filename="+filename);
		PoiExcelView ev=new PoiExcelView();
		ev.init();
		
		
		ev.addHead(app.getString("button.TransactionInquiry"));
		ev.addRowField(app.getString("label.DateTime"));
		
		if("".equals(format)){
					ev.addRowField(ccas.App.transDateFormat(App.getCurDateStr(8).toString(),"yyyyMMdd",ccas.App.getString("format.date")));
				}else{
					ev.addRowField(ccas.App.transDateFormat(App.getCurDateStr(8).toString(),"yyyyMMdd",format));
		}
		ev.addRow();

		ev.addRowField(app.getString("label.SN"));
		ev.addRowField(app.getString("label.TranxDate"));
		ev.addRowField(app.getString("label.TranxType"));
		
		
		ev.addRowField(app.getString("label.AcquiryBank"));
		ev.addRowField(app.getString("label.IssueBank"));
		
		
		ev.addRowField(app.getString("label.CardNumber"));
		ev.addRowField(app.getString("label.TranxAmount")+"/"+app.getString("label.Currency"));
		ev.addRowField(app.getString("label.Fee"));
		
		ev.addRowField(app.getString("label.RefNo"));
		ev.addRowField(app.getString("label.TraceNo"));
		ev.addRowField(app.getString("label.2Track"));
		ev.addRowField(app.getString("title.ResponseCode"));
		ev.addRowField(app.getString("label.ApprovalCode"));
		ev.addRowField(app.getString("label.Status"));
		ev.addRowField(app.getString("label.SettleFlag"));
		ev.addRowField(app.getString("label.BatchNumber"));
		ev.addRow();
		
		Collection	interfaceInfos=(Collection)mysql.select(tablename,where);
		Iterator		it=interfaceInfos.iterator();
		

		int			i = 0;
		int			rowNum = obInterface.getRowNum();
		String	prefix = new java.io.File(application.getRealPath(request.getRequestURI())).getParent()+"/../include/id.xml";

		for(i=0;i<rowNum&&it.hasNext();i++)
		{
			temp =	(ObInterface)it.next();
			
			try	{mysql.getRow("T_TXNTYPE","I_TXNID="+temp.getInt("i_txnid")+"");}	catch(Exception e)	{obInterface.set("M_ACTXNNAME",temp.getString("i_txnid"));};
			try	{mysql.getRow("E001","CYNO='"+temp.get("c_fundtype")+"' or CYCD='"+temp.get("c_fundtype")+"'");}	catch(Exception e)	{obInterface.set("cycd",temp.getString("c_fundtype"));};

			ev.addRowField(i+1);
			
			if("".equals(format)){
					ev.addRowField(ccas.App.transDateFormat(temp.get("C_DATE").toString().substring(0,8),"yyyyMMdd",ccas.App.getString("format.date")));
				}else{
					ev.addRowField(ccas.App.transDateFormat(temp.get("C_DATE").toString().substring(0,8),"yyyyMMdd",format));
				}
			ev.addRowField(obInterface.getDefault("M_ACTXNNAME"," "));
			ev.addRowField(temp.get("C_ACQUIRCODE"));
			ev.addRowField(temp.get("C_ISSUERCODE"));
			ev.addRowField(temp.get("c_pan"));
			ev.addRowField(app.transAmountFormat(temp.getDouble("I_TXNAMOUNT"),temp.getString("C_FUNDTYPE"))+" "+obInterface.get("cycd"));
			ev.addRowField(app.transAmountFormat(temp.getDouble("i_transfee"),temp.getString("C_FUNDTYPE")));
			ev.addRowField(temp.get("c_retriverefno"));
			ev.addRowField(temp.get("c_traceno"));
			
			ev.addRowField(temp.get("c_track2"));
			ev.addRowField(temp.get("c_respcode"));
			ev.addRowField(temp.get("c_authorcode"));
			ev.addRowField(temp.get("I_SETTFLAG"));
			
			ev.addRowField(temp.get("i_settflag"));
			
			ev.addRowField(temp.get("c_batchnum"));  
			ev.addRow();
			amnt +=temp.getDouble("i_txnamount");
			amnt1+=temp.getDouble("i_transfee");
			amnt2+=temp.getTsam2();
			amnt3+=temp.getTsam3();
			amnt4+=temp.getTsam4();
		}

		ev.addRow();
		ev.addRowField("");
		ev.addRowField("");
		ev.addRowField("");
		ev.addRowField("Total");
		ev.addRowField(i);
		ev.addRowField("");
		ev.addRowField(app.transAmountFormat(amnt,obInterface.getCyno()));
		ev.addRowField(app.transAmountFormat(amnt1,obInterface.getCyno()));

		ev.addRow();
		ev.addRow();
		ev.addRowField("");
		ev.addRowField("Download Time:");
		ev.addRowField((System.currentTimeMillis() - start)/1000.00);
		ev.addRowField("Second");
		ev.addRow();

		ev.doExport(response.getOutputStream());
Posted
Updated 15-Oct-15 0:54am
v2

1 solution

Quote:
Invalid row number (-32768) outside allowable range error

This error indicate that a signed 16 bits variable is holding the record number (probably an int). Changing the variable to unsigned int would solve the problem until row 65000.

If the variable is in a library, it is a library limitation.

If you are stuck with a library, you can change the format to csv or html and generate the file without any library.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900