在下列方法上新增功能,第四列,第五列,第六列的合并行数以第三列的合并行数为准 public static int exportToExcelForXlsx(List<List> objData, String sheetName, List<String> columns, List mergeIndex, HttpServletResponse response) { int flag = 0; XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet1 = wb.createSheet(sheetName); sheet1row1.setHeight((short) 520); if (columns != null && columns.size() > 0) { for(int i=0;i<columns.size();i++) { String column = columns.get(i); //列 XSSFCell cell = sheet1row1.createCell(i); cell.setCellValue(column); } } int dataSatrtIndex = 1; boolean isMerge = false; if(mergeIndex != null && mergeIndex.size() != 0) { isMerge = true; } if (objData != null && objData.size() > 0) { Map<Integer, PoiModel> poiModels = new HashMap<Integer, PoiModel>(); int i = 0; for ( ; i < objData.size(); i++) { XSSFRow row = sheet1.createRow((short) (i+dataSatrtIndex)); List<Object> list = objData.get(i); DecimalFormat decimalFormat = new DecimalFormat("0.00"); int j = 0; for (Object o : list) { String content = ""; if(o != null) { if (o.toString().contains(".") && isNumeric(o.to }else { XSSFCell cell = row.createCell(j); cell.setCellValue(content); } j++; } } if(poiModels != null && poiModels.size() != 0) { for(Integer key : poiModels.keySet()) { PoiModel poiModel = poiModels.get(key); XSSFRow lastRow = sheet1.getRow(poiModel.getRowIndex()); XSSFCell lastCell = lastRow.getCell(poiModel.getCellIndex()); lastCell.setCellValue(poiModel.getContent()); lastCell.setCellStyle(style); lastRow.setRowStyle(style); if(poiModel.getRowIndex() != i + dataSatrtIndex -1) { sheet1.addMergedRegion(new CellRangeAddress(poiModel.getRowIndex(), i + dataSatrtIndex - 1, poiModel.getCellIndex(), poiModel.getCellIndex())); } } } } else { flag = -1; }

时间: 2023-06-13 13:05:31 浏览: 61
可以考虑新增以下功能: 1. 合并单元格:根据传入的合并行数,将指定列的单元格进行合并。可以使用XSSFCellStyle的setAlignment()方法,将内容对齐方式设置为居中。 示例代码: ```java // 获取合并列数 int mergeCount = Integer.parseInt(mergeIndex.get(2).toString()); // 合并单元格 for (int i = 0; i < mergeCount; i++) { String startCell = mergeIndex.get(0) + (Integer.parseInt(mergeIndex.get(1).toString()) + i); String endCell = mergeIndex.get(0) + (Integer.parseInt(mergeIndex.get(1).toString()) + mergeCount - 1); CellRangeAddress cellRange = new CellRangeAddress(CellReference.convertColStringToIndex(startCell.substring(0, 1)), Integer.parseInt(startCell.substring(1)) - 1, CellReference.convertColStringToIndex(endCell.substring(0, 1)), Integer.parseInt(endCell.substring(1)) - 1); sheet1.addMergedRegion(cellRange); // 设置对齐方式 XSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); cellRange.setCellStyle(style); } ``` 2. 设置表头样式:可以使用XSSFCellStyle的setFont()方法和setFillForegroundColor()方法,分别设置字体和背景颜色。 示例代码: ```java // 设置表头样式 XSSFCellStyle headerStyle = wb.createCellStyle(); headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); XSSFFont font = wb.createFont(); font.setFontHeightInPoints((short) 12); font.setBold(true); headerStyle.setFont(font); // 设置表头单元格样式 for (int i = 0; i < columns.size(); i++) { sheet1row1.getCell(i).setCellStyle(headerStyle); } ``` 3. 设置列宽:可以使用setColumnWidth()方法设置指定列的宽度。 示例代码: ```java // 设置列宽 for (int i = 0; i < columns.size(); i++) { sheet1.setColumnWidth(i, 5000); } ``` 完整代码如下: ```java public static int exportToExcelForXlsx(List<List> objData, String sheetName, List<String> columns, List mergeIndex, HttpServletResponse response) { int flag = 0; XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet1 = wb.createSheet(sheetName); // 创建表头 XSSFRow sheet1row1 = sheet1.createRow(0); for (int i = 0; i < columns.size(); i++) { sheet1row1.createCell(i).setCellValue(columns.get(i)); } // 设置表头样式 XSSFCellStyle headerStyle = wb.createCellStyle(); headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); XSSFFont font = wb.createFont(); font.setFontHeightInPoints((short) 12); font.setBold(true); headerStyle.setFont(font); // 设置表头单元格样式 for (int i = 0; i < columns.size(); i++) { sheet1row1.getCell(i).setCellStyle(headerStyle); } // 填充数据 for (int i = 0; i < objData.size(); i++) { XSSFRow row = sheet1.createRow(i + 1); for (int j = 0; j < objData.get(i).size(); j++) { row.createCell(j).setCellValue(objData.get(i).get(j).toString()); } } // 设置列宽 for (int i = 0; i < columns.size(); i++) { sheet1.setColumnWidth(i, 5000); } // 合并单元格 int mergeCount = Integer.parseInt(mergeIndex.get(2).toString()); for (int i = 0; i < mergeCount; i++) { String startCell = mergeIndex.get(0) + (Integer.parseInt(mergeIndex.get(1).toString()) + i); String endCell = mergeIndex.get(0) + (Integer.parseInt(mergeIndex.get(1).toString()) + mergeCount - 1); CellRangeAddress cellRange = new CellRangeAddress(CellReference.convertColStringToIndex(startCell.substring(0, 1)), Integer.parseInt(startCell.substring(1)) - 1, CellReference.convertColStringToIndex(endCell.substring(0, 1)), Integer.parseInt(endCell.substring(1)) - 1); sheet1.addMergedRegion(cellRange); // 设置对齐方式 XSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); cellRange.setCellStyle(style); } // 导出excel文件 try { OutputStream out = response.getOutputStream(); String fileName = sheetName + ".xlsx"; response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("application/vnd.ms-excel;charset=utf-8"); wb.write(out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); flag = 1; } return flag; } ```

相关推荐

最新推荐

recommend-type

数字逻辑白中英第五版答案

数字逻辑白中英第五版第一章答案,开关理论基础 1.将下列十进制数化为二进制数和八进制数 十进制 二进制 八进制  49 110001 61  53 110101 65  127 1111111 177  635 1001111011 1173  7.493 111.1111 7.74  ...
recommend-type

第四届全国ITAT教育工程就业技能大赛复赛试题

第四届全国ITAT教育工程就业技能大赛复赛试题,一、WORD2003操作题:请参照样例文档“Word2003复赛操作题。pdf”,利用给定的素材,完成下列操作任务,并将制作好的文档保存为“Word2003复赛操作题。doc”。(40分)
recommend-type

利用python对excel中一列的时间数据更改格式操作

问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y0190000X B150 200 2019-05-10 00:00:00 2 K10Y0190000X B165 100 2019...
recommend-type

北邮 数据结构第三次实验 图 实验报告

北邮信通院C++数据结构第三次实验——图 1.实验要求 2.程序分析 3.程序运行结果 4.总结 5.代码
recommend-type

数据结构——第9章 数据结构 anyview作业系统答案

H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。试编写一个按第一个字母的顺序输出哈希表中所有关键字的算法。 实现下列函数: void PrintKeys(HashTable ht, void(*...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。