使用 Apache POI 删除特定 Excel 工作表上的所有边框

2022-09-05 00:34:16

我正在使用Apache POI来生成Excel文件。我需要删除工作表中的所有边框。如何使用Apache PIO 3.11和Microsoft Excel 2007完成此操作?

以下是我到目前为止的代码:

package models;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileOutputStream;
import java.util.List;
public class Excel {

    public static void writeDocument() {
        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet("sheet");
        //first font
        Font font1 = workbook.createFont();
        font1.setBoldweight(Font.BOLDWEIGHT_BOLD);
        //first style
        CellStyle style1 = workbook.createCellStyle();
        style1.setBorderLeft(CellStyle.BORDER_NONE);
        style1.setBorderRight(CellStyle.BORDER_NONE);
        style1.setBorderBottom(CellStyle.BORDER_NONE);
        style1.setBorderTop(CellStyle.BORDER_NONE);

        //second style
        CellStyle style2 =  workbook.createCellStyle();
        style2.setFont(font1);
        style2.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style2.setAlignment(CellStyle.ALIGN_CENTER);
        style2.setFillForegroundColor(IndexedColors.ORANGE.getIndex());
        style2.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style2.setBorderBottom(CellStyle.BORDER_THIN);
        style2.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style2.setBorderLeft(CellStyle.BORDER_THIN);
        style2.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style2.setBorderRight(CellStyle.BORDER_THIN);
        style2.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style2.setBorderTop(IndexedColors.GREY_25_PERCENT.getIndex());

        for(int i=0; i< 100 ; i++){
            for(int j=0; j< 100; j++){
                Cell cell = sheet.createRow(i).createCell(j);
                cell.setCellStyle(style1);
            }
        }


        CellRangeAddress region = new CellRangeAddress(0, 10, 0, 10);
        cleanBeforeMergeOnValidCells(sheet, region, style2);
        sheet.addMergedRegion(region);

        try {
            FileOutputStream output = new FileOutputStream("tmp/rapport.xls");
            workbook.write(output);
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void cleanBeforeMergeOnValidCells(Sheet sheet, CellRangeAddress region, CellStyle cellStyle) {
        for (int rowNum = region.getFirstRow(); rowNum <= region.getLastRow(); rowNum++) {
            Row row = sheet.getRow(rowNum);
            if (row == null) {
                sheet.createRow(rowNum);
            }
            for (int colNum = region.getFirstColumn(); colNum <= region.getLastColumn(); colNum++) {
                Cell currentCell = row.getCell(colNum);
                if (currentCell == null) {
                    currentCell = row.createCell(colNum);
                }

                currentCell.setCellStyle(cellStyle);

            }
        }

    }
}

答案 1

我想你的意思是你不需要网格线,在这种情况下,使用setDisplayGridlines方法,如:

sheet.setDisplayGridlines(false);

答案 2

推荐