Invalid row number (65536) outside allowable range (0..65535)

Invalid row number (65536) outside allowable range (0..65535)《 outsideallowablerange》异常信息:   Invalidrownumber(65536)outsideallowablerange(0..65535)   今天突然接到客户通知,说使用项目中的导出功能导出的Excel文件,打开时看不到业务数据,要求立即处理一下。我打开Excel看了一下,导致的错误信息如

大家好,又见面了,我是你们的朋友全栈君。


《  outside allowable range 》


异常信息:
      Invalid row number (65536) outside allowable range (0..65535)

      今天突然接到客户通知,说使用项目中的导出功能导出的 Excel 文件,打开时看不到业务数据,要求立即处理一下。

      期间你可能需要准备两个 Jar 包: Servlet jar 包 和 POI jar 包

  
我打开 Excel 看了一下,导致的错误信息如下图所示:

Invalid row number (65536) outside allowable range (0..65535)

      如上图信息所示可知,Excel 的 Sheet超出了允许的范围;这是关于 《Java POI 导出 Excel 文件 》时遇到异常情况。


解决办法:
将原来的 POI 导出 Excel 的工具类,修改并加入如下内容即可完美的解决了,完全替换原来的 Util 也可以,下面的片段代码也是我在原来代码的基础新加的:

Java POI 导出 Excel 的工具类

package com.etc.bus.carpark.utils;

import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.etc.bus.carpark.utils.IntegerToChineseNumberUtils;
import com.etc.third.tlq.bean.StopInThePayment;

/**
 * 数据导出为Excel工具类
 * 

* * @ClassName : ExportExcelUtils *

*

* @Description : TODO *

*

* @Author : HuaZai *

*

* @ContactInformation : 1461522031@qq.com/huazai6789@aliyun.com *

*

* @Date : 2017年10月20日 上午10:01:22 *

* *

* @Version : V1.0.0 *

* */ @SuppressWarnings({ "serial", "deprecation" }) @Component public class ExportExcelUtil extends HttpServlet { // 阿拉伯数字转中文数字 @Autowired private IntegerToChineseNumberUtils toChineseNuber; /** * *

* * @throws UnsupportedEncodingException * * @Title : exportPayment *

*

* @Description : TODO *

*

* @Author : HuaZai *

*

* @Date : 2017年10月23日 上午10:12:02 *

*/ @SuppressWarnings({ "static-access" }) public void exportPayment(HttpServletRequest request, HttpServletResponse response, List dataSet, String[] headers) throws UnsupportedEncodingException { // 声明一个工作簿 HSSFWorkbook wb = new HSSFWorkbook(); // 设置下载时弹出框 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/vnd.ms-excel;charset=utf-8"); String fileName = "临停缴费"; response.addHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1")); // 获取需要设置 Excel 的 Sheet 总页数 int dataCount = dataSet.size(); int page = dataCount % 10000; int pageNo; if (page == 0) { pageNo = dataCount / 10000; } else { pageNo = dataCount / 10000 + 1; } // 设置 Sheet 的页数,当数据 超过 10000 条时 将数据 设值到下一个 Sheet for (int i = 1; i <= pageNo; i++) { // 在 Excel 中声明一个 Sheet HSSFSheet sheet = wb.createSheet(); HSSFRow row1 = sheet.createRow(0); row1.setHeight((short) 800); // 创建表头单元格 HSSFCell cell1 = row1.createCell(0); cell1.setCellValue("临停缴费记录报表(" + toChineseNuber.ToCH(i) + ")"); // 设置字体 HSSFFont font = wb.createFont(); // 字体高度 font.setFontHeightInPoints((short) 20); // 字体颜色 font.setColor(HSSFFont.COLOR_NORMAL); // 字体类型 font.setFontName("仿宋"); // 字体宽度 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置单元格类型 HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setFont(font); // 水平居中 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 垂直居中 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); cellStyle.setWrapText(true); // 设置单元格样式 cell1.setCellStyle(cellStyle); // 创建内容单元格 HSSFRow row = sheet.createRow(1); // 设置行高 row.setHeight((short) 400); // 设置没列的宽度 sheet.setColumnWidth(0, 3000); sheet.setColumnWidth(1, 5000); sheet.setColumnWidth(2, 4000); sheet.setColumnWidth(3, 5000); sheet.setColumnWidth(4, 6000); sheet.setColumnWidth(5, 6000); sheet.setColumnWidth(6, 6000); sheet.setColumnWidth(7, 6000); sheet.setColumnWidth(8, 6000); sheet.setColumnWidth(9, 6000); sheet.setColumnWidth(10, 6000); sheet.setColumnWidth(11, 6000); // 设置字体样式 HSSFFont fontlast = wb.createFont(); // 字体高度 fontlast.setFontHeightInPoints((short) 12); // 字体颜色 fontlast.setColor(HSSFFont.COLOR_NORMAL); // 字体类型 fontlast.setFontName("宋体"); HSSFCellStyle style = wb.createCellStyle(); style.setFont(fontlast); // 水平居中 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 垂直居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setWrapText(true); // 设值表头值 for (int k = 0; k < headers.length; k++) { HSSFCell cell = row.createCell(k); cell.setCellValue(headers[k]); cell.setCellStyle(cellStyle); } // 准备数据集合 List stopInThePayments = dataSet; // 当每个 Sheet 写满 10000 条数据 时,新建并写入下一个 Sheet for (int j = 10000 * i - 10000; j < 10000 * i && j < dataCount; j++) { row = sheet.createRow(j - 10000 * i + 10002); StopInThePayment stopInThePayment = stopInThePayments.get(j); HSSFCell cell = row.createCell(0); cell.setCellValue(j + 1);// 编号 cell.setCellStyle(style); cell = row.createCell(1); cell.setCellValue(stopInThePayment.getName());// 停车场名称 cell.setCellStyle(style); cell = row.createCell(2); cell.setCellValue(stopInThePayment.getOutcarno());// 车牌号 cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue(stopInThePayment.getTime());// 停车时长 cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue(stopInThePayment.getPaymoney());// 应收金额 cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue(stopInThePayment.getAgiomoney());// 优惠金额 cell.setCellStyle(style); cell = row.createCell(6); cell.setCellValue(stopInThePayment.getCharmoney());// 实收金额 cell.setCellStyle(style); cell = row.createCell(7); cell.setCellValue(stopInThePayment.getType());// 缴费方式 cell.setCellStyle(style); cell = row.createCell(8); cell.setCellValue(stopInThePayment.getFreestatus());// 缴费状态 cell.setCellStyle(style); cell = row.createCell(9); cell.setCellValue(stopInThePayment.getOutoperationtime());// 缴费时间 cell.setCellStyle(style); cell = row.createCell(10); cell.setCellValue(stopInThePayment.getOutmemo());// 备注 cell.setCellStyle(style); } // 设置 Sheet 的合并范围 Region region = new Region(0, (short) 0, 0, (short) (10)); sheet.addMergedRegion(region); } try { OutputStream out = response.getOutputStream(); wb.write(out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }


 链接到 《 阿拉伯数字转中文数字 》 

好了,经过上面的内容修改后,关于 “ outside allowable range ” 超出 Excel 的 Sheet 允许范围的异常情况。
太累了,不写了,我先去码我的代码去了,如果期间还遇到其它问题,可以给我留言,一起探讨。
也希望大家多多关注CSND的IT社区。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146033.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号