Commit fec4288a by zhangxingmin

push

parent 8ea554f9
...@@ -11,6 +11,7 @@ import com.yd.oss.service.service.IFileTemplateService; ...@@ -11,6 +11,7 @@ import com.yd.oss.service.service.IFileTemplateService;
import com.yd.oss.service.service.OssService; import com.yd.oss.service.service.OssService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.*; import java.io.*;
...@@ -164,14 +165,30 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService { ...@@ -164,14 +165,30 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService {
int neededBeneficiaryRows = beneficiaries.size() * 4 + (beneficiaries.size() - 1); // 每个受益人占4行,加上空行 int neededBeneficiaryRows = beneficiaries.size() * 4 + (beneficiaries.size() - 1); // 每个受益人占4行,加上空行
int rowsToInsert = neededBeneficiaryRows - existingBeneficiaryRows; int rowsToInsert = neededBeneficiaryRows - existingBeneficiaryRows;
if (rowsToInsert > 0) {
// 修复:在移动行之前处理合并区域
if (rowsToInsert != 0) {
// 获取并移除受影响的合并区域
List<CellRangeAddress> mergedRegionsToRemove = new ArrayList<>();
for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
CellRangeAddress mergedRegion = sheet.getMergedRegion(i);
// 如果合并区域在移动的范围内,需要移除
if (mergedRegion.getFirstRow() >= secondHolderRowNum) {
mergedRegionsToRemove.add(mergedRegion);
}
}
// 移除受影响的合并区域
for (CellRangeAddress mergedRegion : mergedRegionsToRemove) {
sheet.removeMergedRegion(sheet.getMergedRegions().indexOf(mergedRegion));
}
// 下移后续内容,包括第二持有人资料 // 下移后续内容,包括第二持有人资料
sheet.shiftRows(secondHolderRowNum, sheet.getLastRowNum(), rowsToInsert, true, false); sheet.shiftRows(secondHolderRowNum, sheet.getLastRowNum(), rowsToInsert, true, false);
secondHolderRowNum += rowsToInsert; // 更新第二持有人资料的行号 secondHolderRowNum += rowsToInsert; // 更新第二持有人资料的行号
} else if (rowsToInsert < 0) {
// 上移后续内容 // 重新添加合并区域(位置已自动调整)
sheet.shiftRows(secondHolderRowNum, sheet.getLastRowNum(), rowsToInsert, true, false); // 这里不需要手动重新添加,因为shiftRows会自动处理合并区域的移动
secondHolderRowNum += rowsToInsert; // 更新第二持有人资料的行号
} }
// 清除模板中的示例数据(保留"受益人资料"标题行) // 清除模板中的示例数据(保留"受益人资料"标题行)
...@@ -261,6 +278,7 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService { ...@@ -261,6 +278,7 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService {
// 确保第二持有人资料上方有一行空行 // 确保第二持有人资料上方有一行空行
secondHolderRow = sheet.getRow(secondHolderRowNum); secondHolderRow = sheet.getRow(secondHolderRowNum);
if (secondHolderRow != null) { if (secondHolderRow != null) {
// 修复:在添加空行前检查并处理合并区域
sheet.shiftRows(secondHolderRowNum, sheet.getLastRowNum(), 1, true, false); sheet.shiftRows(secondHolderRowNum, sheet.getLastRowNum(), 1, true, false);
// 创建一个空行 // 创建一个空行
Row emptyRow = sheet.createRow(secondHolderRowNum); Row emptyRow = sheet.createRow(secondHolderRowNum);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment