java 实现 excel sheet 拷贝到另一个Excel文件中 poi

本文介绍了一个Java程序,该程序能够从指定路径读取多个Excel文件,并将这些文件中的所有工作表复制到一个新的Excel文件中。此外,程序还保留了原始工作表中的合并单元格设置,并移除了单元格内容中的空白字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.liujicheng;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;

public class CopyExcelSheetToAnotherExcelSheet {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        String fromPath = "D:\\share\\jiemu_new\\";// excel存放路径
        String toPath = "c:\\ok\\";// 保存新EXCEL路径
        // 新的excel 文件名
        String excelName = "节目访问量";
        // 创建新的excel
        HSSFWorkbook wbCreat = new HSSFWorkbook();
        File file = new File(fromPath);
        for (File excel : file.listFiles()) {
            // 打开已有的excel
            String strExcelPath = fromPath + "\\" + excel.getName();
            InputStream in = new FileInputStream(strExcelPath);
            HSSFWorkbook wb = new HSSFWorkbook(in);
            for (int ii = 0; ii < wb.getNumberOfSheets(); ii++) {
                HSSFSheet sheet = wb.getSheetAt(ii);
                HSSFSheet sheetCreat = wbCreat.createSheet(sheet.getSheetName());
                // 复制源表中的合并单元格
                MergerRegion(sheetCreat, sheet);
                int firstRow = sheet.getFirstRowNum();
                int lastRow = sheet.getLastRowNum();
                for (int i = firstRow; i <= lastRow; i++) {
                    // 创建新建excel Sheet的行
                    HSSFRow rowCreat = sheetCreat.createRow(i);
                    // 取得源有excel Sheet的行
                    HSSFRow row = sheet.getRow(i);
                    // 单元格式样
                    int firstCell = row.getFirstCellNum();
                    int lastCell = row.getLastCellNum();
                    for (int j = firstCell; j < lastCell; j++) {
                        // 自动适应列宽 貌似不起作用
                        //sheetCreat.autoSizeColumn(j);
                        System.out.println(row.getCell(j));
                        rowCreat.createCell(j);
                        String strVal ="";
                        if (row.getCell(j)==null) {
                           
                        }else{
                             strVal = removeInternalBlank(row.getCell(j).getStringCellValue());
                        }
                        rowCreat.getCell(j).setCellValue(strVal);
                    }
                }
            }
        }
        FileOutputStream fileOut = new FileOutputStream(toPath + excelName + ".xls");
        wbCreat.write(fileOut);
        fileOut.close();
    }
 
    /**
     * 复制原有sheet的合并单元格到新创建的sheet
     *
     * @param sheetCreat
     *            新创建sheet
     * @param sheet
     *            原有的sheet
     */
    private static void MergerRegion(HSSFSheet sheetCreat, HSSFSheet sheet) {
        int sheetMergerCount = sheet.getNumMergedRegions();
        for (int i = 0; i < sheetMergerCount; i++) {
            Region mergedRegionAt = sheet.getMergedRegionAt(i);
            sheetCreat.addMergedRegion(mergedRegionAt);
        }

    }

    /**
     * 去除字符串内部空格
     */
    public static String removeInternalBlank(String s) {
        // System.out.println("bb:" + s);
        Pattern p = Pattern.compile("\\s*|\t|\r|\n");
        Matcher m = p.matcher(s);
        char str[] = s.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < str.length; i++) {
            if (str[i] == ' ') {
                sb.append(' ');
            } else {
                break;
            }
        }
        String after = m.replaceAll("");
        return sb.toString() + after;
    }
}

  • 大小: 12.7 KB
可以使用 Apache POI 库中的 Workbook 类的 createSheet() 方法和 cloneSheet() 方法来实现拷贝其他 Excel 文件中的 sheet 到本 Excel 文件中。 首先,需要使用 POI 库打开目标 Excel 文件和源 Excel 文件: ```java // 打开目标 Excel 文件 Workbook targetWorkbook = WorkbookFactory.create(new FileInputStream("target.xlsx")); // 打开源 Excel 文件 Workbook sourceWorkbook = WorkbookFactory.create(new FileInputStream("source.xlsx")); ``` 然后,可以使用 createSheet() 方法在目标 Excel 文件中创建新的 sheet: ```java // 在目标 Excel 文件中创建新的 sheet Sheet newSheet = targetWorkbook.createSheet("New Sheet"); ``` 接下来,可以使用 cloneSheet() 方法将源 Excel 文件中的 sheet 拷贝到新创建的 sheet 中: ```java // 拷贝源 Excel 文件中的 sheet 到新创建的 sheetSheet sourceSheet = sourceWorkbook.getSheetAt(0); // 假设源文件中第一个 sheet 是需要拷贝的 int sourceSheetIndex = sourceWorkbook.getSheetIndex(sourceSheet); targetWorkbook.cloneSheet(sourceSheetIndex, newSheet); ``` 最后,需要将修改后的目标 Excel 文件保存: ```java // 保存目标 Excel 文件 targetWorkbook.write(new FileOutputStream("target.xlsx")); targetWorkbook.close(); ``` 完整示例代码如下: ```java import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.usermodel.Sheet; public class ExcelCopySheetExample { public static void main(String[] args) throws Exception { // 打开目标 Excel 文件 Workbook targetWorkbook = WorkbookFactory.create(new FileInputStream("target.xlsx")); // 打开源 Excel 文件 Workbook sourceWorkbook = WorkbookFactory.create(new FileInputStream("source.xlsx")); // 在目标 Excel 文件中创建新的 sheet Sheet newSheet = targetWorkbook.createSheet("New Sheet"); // 拷贝源 Excel 文件中的 sheet 到新创建的 sheetSheet sourceSheet = sourceWorkbook.getSheetAt(0); // 假设源文件中第一个 sheet 是需要拷贝的 int sourceSheetIndex = sourceWorkbook.getSheetIndex(sourceSheet); targetWorkbook.cloneSheet(sourceSheetIndex, newSheet); // 保存目标 Excel 文件 targetWorkbook.write(new FileOutputStream("target.xlsx")); targetWorkbook.close(); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值