HSSFWorkBook导出excel2003表数据超过65535条时报错怎么办

         考勤管理模块中的签到记录列表数据导出excel2003表时,如果数据量太大,超过了65535条就会报错.

解决办法:当数据每隔65535条时,就新建一个sheet工作表写数据,把数据写到多张sheet表里面.

/**
     * excel 2003版本的导出方法 支持多个sheet导出 导出的文件后缀为.xls
     * 由于excel2003最多导出65535条数据
     * @param dataMap       要导出的数据
     * @param excelFilePath excel文件的存放位置
     * @param fileName      excel文件名字
     * @return
     */
    public String exportXlsExcel(Map<String,List<String[]>> dataMap,String excelFilePath,String fileName){
        FileOutputStream fout=null;
        String fileLocal="";
        try{
            File file=new File(excelFilePath);
            if(!file.exists()){
                file.mkdirs();
            }
            // 第一步,创建一个webbook,对应一个Excel文件
            HSSFWorkbook wb=new HSSFWorkbook();
            // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet=null;
            List<String[]> dataList=null;
            HSSFCellStyle style=wb.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            //
            dataList=dataMap.get("签到记录列表");
            int i;
            int k;
            /**
             * k表示sheet工作表的张数
             */
            int dataSizeNum=dataList.size()-1;    //减去表头
            if (dataSizeNum%EXCEL_EXPORT_PARAM==0){
                k=(dataList.size()-1)/EXCEL_EXPORT_PARAM;
            }else {
                k=(dataList.size()-1)/EXCEL_EXPORT_PARAM+1;
            }
            for (int t=0;t<k;t++){
                int titleNum=t+1;
                sheet=wb.createSheet("签到记录列表"+"("+titleNum+")");
                for(i=0;i<=EXCEL_EXPORT_PARAM;i++){
                    // 生成第一行 第一行是表头,包括表头在内,所以多加一行
                    HSSFRow row=sheet.createRow(i);
                    /**
                     * 1EXCEL_EXPORT_PARAM表示每张sheet工作表最多写的记录的条数(不包括表头)
                     */
                    int num=(t*EXCEL_EXPORT_PARAM)+i;
                    if (num>=dataList.size()){
                        break;
                    }
                    String[] arr=dataList.get(num);
                    /**
                     * t不等于0且i=0时说明又是一张sheet表
                     */
                    if (t!=0&&i==0){
                        arr=dataList.get(0);
                    }
                    for(int j=0;null!=arr&&j<arr.length;j++){
                        // 给这一行的第一列赋值
                        HSSFCell cell=row.createCell(j);
                        String value = arr[j];
                        if(value==null ||"null".equals(value)){
                            value = "";
                        }
                        cell.setCellValue(value);
                        cell.setCellStyle(style);
                        if(i==0){
                            HSSFCellStyle tempStyle=style;
                            tempStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
                            tempStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
                            cell.setCellStyle(tempStyle);
                        }
                    }
                }
            }
            // 第六步,将文件存到指定位置
            fileLocal=excelFilePath+"/"+fileName+".xls";
            fout=new FileOutputStream(fileLocal);
            wb.write(fout);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                if(fout != null) {
                    fout.close();
                }
            }catch(IOException e){
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return fileLocal;
    }



HSSFWorkbook是NPOI库中用于导出Excel文件的一种方式。它是Excel的工作簿,可以包含多个工作HSSFSheet),而一个工作又由多行(HSSFRow)和多个单元格(HSSFCell)组成。此外,HSSFWorkbook还提供了一些其他功能,如设置字体(HSSFFont)、日期格式(HSSFDataFormat)和单元格样式(HSSFCellStyle)。 下面是一个动态生成Excel文件的例子: ``` //创建HSSFWorkbook对象 HSSFWorkbook wb = new HSSFWorkbook(); //创建HSSFSheet对象 HSSFSheet sheet = wb.createSheet("sheet0"); //创建HSSFRow对象 HSSFRow row = sheet.createRow(0); //创建HSSFCell对象 HSSFCell cell = row.createCell(0); //设置单元格的值 cell.setCellValue("单元格中的中文"); //输出Excel文件 FileOutputStream output = new FileOutputStream("d:\\workbook.xls"); wb.write(output); output.flush(); ``` 以上代码会创建一个名为"sheet0"的工作,并在第一行第一列的单元格中写入"单元格中的中文"。然后将工作簿保存为一个Excel文件(workbook.xls)并输出到指定路径中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Winform中通过NPOI导出Excel的三种方式HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook示例代码.zip](https://download.csdn.net/download/qq_35406995/16604372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [使用HSSFWorkbook导出、操作excel](https://blog.csdn.net/caicai1171523597/article/details/86643667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java中导入、导出Excel——HSSFWorkbook 使用](https://blog.csdn.net/qq_43842093/article/details/121109593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值