java - 如何使用 apache poi 删除一行

标签 java apache-poi

我试图删除第三行

这是我根据 rgettman、Leo、zibi 的评论所做的编辑。谢谢。

public class MainTest {

    public static void main(String[] args) throws IOException {

        FileInputStream file  =   new FileInputStream(new  File("test.xlsx") );
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = wb.getSheetAt(0);
        sheet.removeRow(sheet.getRow(3));
//      sheet.shiftRows(3, 3, -1);

        File outWB = new File("testResult.xlsx");
        OutputStream out = new FileOutputStream(outWB);
        wb.write(out);
        out.flush();
        out.close();


        System.exit(0);
    }

}

但这会删除一行中的值但不会删除该行

最佳答案

如果您正在使用 XLS 文件(不是 XLSX),那么您应该使用 HSSFWorkbook。我刚刚测试了下面的解决方案,一切正常:

    File file = new File(....);
    FileInputStream fis = new FileInputStream(file);
    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet sheet = wb.getSheetAt(0);

    sheet.shiftRows(3, 3, -1);

    File outWB = new File(.....);
    OutputStream out = new FileOutputStream(outWB);
    wb.write(out);
    out.flush();
    out.close();

或者甚至更好地使用 Workbook 工厂,它可以为您识别类型:

    Workbook wb = WorkbookFactory.create(file);
    Sheet sheet = wb.getSheetAt(0);
    sheet.shiftRows(3, 3, -1);

下面你可以找到一个删除行的函数,它可以在 xls 和 xlsx 中使用(已测试;))。

Workbook wb = WorkbookFactory.create(file);
Sheet sheet = wb.getSheetAt(0);
removeRow(sheet, 2);
File outWB = new File(...);
OutputStream out = new FileOutputStream(outWB);
wb.write(out);
out.flush();
out.close();


public static void removeRow(Sheet sheet, int rowIndex) {
    int lastRowNum = sheet.getLastRowNum();
    if (rowIndex >= 0 && rowIndex < lastRowNum) {
        sheet.shiftRows(rowIndex + 1, lastRowNum, -1);
    }
    if (rowIndex == lastRowNum) {
        Row removingRow = sheet.getRow(rowIndex);
        if (removingRow != null) {
            sheet.removeRow(removingRow);
        }
    }
}

关于java - 如何使用 apache poi 删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946958/

相关文章:

java - 当安装了 64/32 位 JVM 版本时,JNLP 应用程序如何选择 JVM 的(正确的位数)版本?

java - 使用 print 语句找出十六进制代码 "5A"的字符

java - 使用 Apache POI 在 Excel 中删除多行

java - 如何通过java从Excel文件中删除空白列?

java - 如何使用 Apache POI 将现有 Excel 工作表中的一行复制到新的 Excel 工作表?

java - 在 Selenium WebDriver 上如何从 Span 标签获取文本

java - 如何在字符串映射中保留最大值

java - 如何检查sheet是否存在?

java - Apache POI 锁定单元格但允许调整列大小

java - Maven 和 Tomcat 中的 Jar 冲突?