【工具使用】【EasyExcel 】【aspose】Excel 删除中间某一列,并保持列后面格式不变

1  前言

最近项目上有个问题,有一批导入的文件,可能中间沟通有差异或者导入模版格式有变化导致最后的一批很多文件需要删除里边的某列内容,并保持整体的内容都不变化。

我这里把我的实现在这里贴一下,希望能帮助到你们。

比如这里我有个文件,想把第2列删除掉:

2  实现

我这里就直接贴代码了哈:

package com.virtuous.demo.laboratory.excel.aspose;

import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;


public class Main {

    public static void main(String[] args) {

        File dir = new File("/Users/kuku/develop/project/javaproject/myyanjiu/yanjiu/virtuous-demo/src/main/resources/xlsx");
        for (File file : dir.listFiles()) {
            try {
                // 不是 xlsx格式的文件 直接略过
                if (!file.getName().endsWith(".xlsx")) {
                    continue;
                }
                // 当前文件的文件路径 绝对路径
                String inputFilePath = file.getAbsolutePath();
                // 中间转换后文件的路径
                String outputFilePath = newFileName(file.getAbsolutePath(), "1_");
                // 要操作的Sheet索引(从0开始)
                int sheetIndex = 0;
                // 要删除的列索引(从0开始)
                int columnIndexToDelete = 1;

                // 利用 aspose-cells 先删除指定的列--这玩意不开源 收费的 处理后的文件会有个多的 sheet 里边有个版权啥的
                Workbook workbook = new Workbook(inputFilePath);
                Worksheet worksheet = workbook.getWorksheets().get(sheetIndex);
                worksheet.getCells().deleteColumns(columnIndexToDelete, 1, false);
                workbook.save(outputFilePath);

                // 处理完后,需要利用 poi 再把版本的那个 sheet 删除掉
                File eFile = new File(outputFilePath);
                FileInputStream fis = new FileInputStream(eFile);
                org.apache.poi.ss.usermodel.Workbook workbook1 = WorkbookFactory.create(fis);
                int numberOfSheets = workbook1.getNumberOfSheets();
                // 删掉最后一个 sheet
                workbook1.removeSheetAt(numberOfSheets - 1);
                // 打开默认显示第一个 sheet
                workbook1.setActiveSheet(0);

                // 最终文件保存
                String finalFileStr = newFileName(file.getAbsolutePath(), "new_"); // 输出文件路径
                FileOutputStream finalFile = new FileOutputStream(finalFileStr);
                workbook1.write(finalFile);
                System.out.println(file.getName() + "处理成功");
            } catch (Exception e) {
                System.out.println(file.getName() + "处理出错");
            }
        }
    }


    /**
     * 这里注意下 mac或者 win的路径的转换即可
     * @param fileName
     * @param prefix
     * @return
     */
    private static String newFileName(String fileName, String prefix) {
        String[] temp = fileName.split("/");
        String fileNameNow = temp[temp.length-1];
        String substring = fileName.substring(0, fileName.lastIndexOf("/"));
        return substring + "/" + prefix + fileNameNow;
    }


}

这是 maven 依赖:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>22.10</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>5.0.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
    <exclusions>
        <exclusion>
            <artifactId>xmlbeans</artifactId>
            <groupId>org.apache.xmlbeans</groupId>
        </exclusion>
    </exclusions>
</dependency>

最后的效果,删除列后边的合并以及格式都没变化,很好:

3  小结

好啦,到这里就结束了,另外大家注意核心是使用的 aspose 的这个工具,它是非开源的,所以处理过后的 excel 会有一个自带的 sheet 然后我是通过 poi 处理掉了哈,感谢这两个软件产品哈,谢谢。

posted @ 2025-03-08 19:47  酷酷-  阅读(253)  评论(0)    收藏  举报