You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java Apache POI复制Excel工作表未保留原格式的问题咨询

Apache POI 复制Excel工作表保留完整格式解决方案

问题原因

Apache POI 提供的cloneSheet()方法默认仅复制工作表的单元格内容、单元格样式、公式等核心业务数据,不会同步视图属性、打印配置这类展示类参数,缩放比例属于工作表的视图配置项,因此会出现复制后缩放比例恢复默认100%的问题。

修复后完整代码

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.ss.util.CellAddress;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class CloneSheet {
    public static void main(String[] args) throws Exception {
        FileInputStream file = new FileInputStream(new File("exemple.xlsx"));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        // 获取原工作表
        XSSFSheet originSheet = workbook.getSheetAt(0);
        // 克隆工作表
        XSSFSheet sheet_copy = workbook.cloneSheet(0);
        int num = workbook.getSheetIndex(sheet_copy);
        workbook.setSheetName(num, "copy_file");

        // 核心:同步缩放比例
        sheet_copy.setZoom(originSheet.getZoom());

        // 可选:同步打印配置,导出PDF时保证布局完全一致
        sheet_copy.getPrintSetup().setPaperSize(originSheet.getPrintSetup().getPaperSize());
        sheet_copy.setMargin(Sheet.LeftMargin, originSheet.getMargin(Sheet.LeftMargin));
        sheet_copy.setMargin(Sheet.RightMargin, originSheet.getMargin(Sheet.RightMargin));
        sheet_copy.setMargin(Sheet.TopMargin, originSheet.getMargin(Sheet.TopMargin));
        sheet_copy.setMargin(Sheet.BottomMargin, originSheet.getMargin(Sheet.BottomMargin));
        sheet_copy.setFitToPage(originSheet.getFitToPage());

        // 可选:同步冻结窗格配置
        if (originSheet.getPaneInformation() != null) {
            CellAddress freezeAddress = originSheet.getPaneInformation().getTopLeftCell();
            sheet_copy.createFreezePane(freezeAddress.getColumn(), freezeAddress.getRow(), freezeAddress.getColumn(), freezeAddress.getRow());
        }

        FileOutputStream outputStream = new FileOutputStream("exemple.xlsx");
        workbook.write(outputStream);
        // 关闭流避免资源泄漏
        outputStream.close();
        workbook.close();
        file.close();
    }
}

说明

  • 仅需要解决缩放比例问题的话,只需要保留setZoom相关的一行代码即可。
  • 如有导出PDF的需求,建议加上打印配置同步的代码,可避免出现页边距、纸张大小、分页位置不一致的问题。

内容的提问来源于stack exchange,提问作者dEs12ZER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:45:00