最近碰到个需要合并单元格的需求,要合并相同内容的单元格,前提是合并同一个订单的(第5列)
1.先合并第5列OrderNo的列的单元格
2.读取合并后的单元格,然后合并其它需要合并的列
代码如下:
String[] titles = { "orderList"};
// 对已生成的excel进行合并单元格操作,先合并第5列OrderNo的列的单元格
ExcelUtil.mergeCell(filepath + "/" + filename, 5);
注释:如果只合并一列相同内容的单元格,只调用上面的方法就可以了。如果还要合并其它的列,再调用下面的ExcelUtil.readMergedCell()方法即可。
int[] columns = {0, 1, 2, 3, 4, 6, 7, 8, 9, 10};
// 读取合并后的单元格,然后合并其它需要合并的列
ExcelUtil.readMergedCell(filepath + "/" + filename, titles, columns);
FileUtils.download(filepath + "/" + filename, response);
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExcelUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class);
/**
* 合并单元格
*
* @param filePath excel文件路径
* @param mergeNum 要合并的列数
*/
public static void mergeCell(String filePath, int mergeNum) throws Exception{
try {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
if (workbook != null){
// 设置样式
XSSFCellStyle cellStyle = createCellStyle(workbook);
XSSFFont font = createFont(workbook);
cellStyle.setFont(font);
XSSFSheet sheet = workbook.getSheetAt(0);
if (null != sheet) {
//开始查找的行
int currentRow = 1;
//totalRow 总行数
int totalRow = sheet.getLastRowNum();
String cellValue;
for (int p = 1; p <= totalRow; p++)