如何使用Apache POI对整行应用粗体文本样式?

66

如何使用Apache POI使整个Excel行的单元格加粗?

例如:
列标题应该是加粗的。除了为每个标题行单元格应用样式外,我如何将样式应用于整个行?


这也很有帮助:http://thinktibits.blogspot.com/2012/12/Java-POI-Format-Excel-Cell-Bold-Example-Program.html - NoNaMe
可能这个链接会对你有所帮助:https://dev59.com/05bfa4cB1Zd3GeqP1v4e - Peter
6个回答

60

这应该可以很好地工作。

    Workbook wb = new XSSFWorkbook("myWorkbook.xlsx");
    Row row=sheet.getRow(0);
    CellStyle style=null;

    XSSFFont defaultFont= wb.createFont();
    defaultFont.setFontHeightInPoints((short)10);
    defaultFont.setFontName("Arial");
    defaultFont.setColor(IndexedColors.BLACK.getIndex());
    defaultFont.setBold(false);
    defaultFont.setItalic(false);

    XSSFFont font= wb.createFont();
    font.setFontHeightInPoints((short)10);
    font.setFontName("Arial");
    font.setColor(IndexedColors.WHITE.getIndex());
    font.setBold(true);
    font.setItalic(false);

    style=row.getRowStyle();
    style.setFillBackgroundColor(IndexedColors.DARK_BLUE.getIndex());
    style.setFillPattern(CellStyle.SOLID_FOREGROUND);
    style.setAlignment(CellStyle.ALIGN_CENTER);
    style.setFont(font);
如果您不创建defaultFont,那么您的整个工作簿将使用另一个字体作为默认字体。

对不起,我忘了提到。我正在使用 HSSFWorkbook。 - Krishnamachary
4
HSSFWorkbook hwb = new HSSFWorkbook(); HSSFSheet sheet = hwb.createSheet("新工作表"); HSSFRow headRow = sheet.createRow((int)0);CellStyle style = hwb.createCellStyle(); Font boldFont = hwb.createFont(); boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(boldFont);headRow.setRowStyle(style); Cell cell = headRow.createCell((int)0);cell.setCellStyle(style);我想将粗体样式应用于整个行,而不是单个单元格。 - Krishnamachary
33
对我来说,row.getRowStyle()返回null。 - Danny Lo
5
即使创建了列,row.getRowStyle() 仍将返回 null。 - LittleBit
1
https://dev59.com/Sl8e5IYBdhLWcg3wucVT - Alfaz Jikani
看起来这里的 sheet 还没有被设置,我认为应该在这里调用 workbook.createSheet("Sheet Name"); - ebwb

23
请查看以下简易方式:
XSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop((short) 6); // double lines border
style.setBorderBottom((short) 1); // single line border
XSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short) 15);
font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
style.setFont(font);                 

Row row = sheet.createRow(0);   
Cell cell0 = row.createCell(0);
cell0.setCellValue("Nav Value");
cell0.setCellStyle(style);  
for(int j = 0; j<=3; j++)
row.getCell(j).setCellStyle(style);

8
你是否知道为什么row.setRowStyle()无法正常工作?:/ - Erdal G.

13

这对我有用

我先设置了样式的字体,并使行标题正常,然后在循环中为每个行标题单元格设置了粗体样式,于是第一行就加粗了。

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("FirstSheet");
HSSFRow rowhead = sheet.createRow(0); 
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontName(HSSFFont.FONT_ARIAL);
font.setFontHeightInPoints((short)10);
font.setBold(true);
style.setFont(font);
rowhead.createCell(0).setCellValue("ID");
rowhead.createCell(1).setCellValue("First");
rowhead.createCell(2).setCellValue("Second");
rowhead.createCell(3).setCellValue("Third");
for(int j = 0; j<=3; j++)
rowhead.getCell(j).setCellStyle(style);

5
你是否知道为什么row.setRowStyle()没有起作用?:/ - Erdal G.

6

这对我有用

    Object[][] bookData = { { "col1", "col2", 3 }, { "col1", "col2", 3 }, { "col1", "col2", 3 },
            { "col1", "col2", 3 }, { "col1", "col2", 3 }, { "col1", "col2", 3 } };

    String[] headers = new String[] { "HEader 1", "HEader 2", "HEader 3" };

    int noOfColumns = headers.length;
    int rowCount = 0;

    Row rowZero = sheet.createRow(rowCount++);
    CellStyle style = workbook.createCellStyle();
    Font font = workbook.createFont();
    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
    style.setFont(font);
    for (int col = 1; col <= noOfColumns; col++) {
        Cell cell = rowZero.createCell(col);
        cell.setCellValue(headers[col - 1]);
        cell.setCellStyle(style);
    }

1
你是否知道为什么row.setRowStyle()无法正常工作? :/ - Erdal G.
如果它起作用的话,我只会逐行进行而不是逐列进行开销。 - omkar sirra
1
@ErdalG。如果在行单元格中设置值后再设置行样式,row.setRowStyle就会起作用。如果在上面的答案中,在for循环之后执行setRowStyle,它将起作用!使用Poi 3.9版本进行测试。 - Champ
@ErdalG. 抱歉,我的说法只有部分正确。它可以在LibreOffice中工作,但不能在MS Excel中!不过你可能想要检查一下最新版本的Excel。 - Champ

0
public class ExcelReader {

    private XSSFWorkbook workBook;
    private XSSFSheet workSheet;


    public ExcelReader(String path, String sheetName){
        File file = new File(path);
        try {
            FileInputStream inputStream = new FileInputStream(file);
            workBook = new XSSFWorkbook(inputStream);
            workSheet = workBook.getSheet(sheetName);
            workBook.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    public Object[][] getData(){

        int rows = workSheet.getLastRowNum(); // returns number of rows
        int cols = workSheet.getRow(0).getLastCellNum(); //returns number of cols

        Object[][] data = new Object[rows][1];

        for (int i = 0; i < rows; i++) {
            Map<String,String> map = new HashMap<>();

            for (int j = 0; j < cols; j++) {
                //each column name is a key
                XSSFCell cell = workSheet.getRow(i + 1).getCell(j);// might be null sometimes if the cell is empty

                if (cell == null){
                    System.out.println();
                }

                map.put(workSheet.getRow(0).getCell(j).toString(),
                        // each cell under column name will be value
                        cell == null  ? "" : cell.toString() );
            }
            data[i][0] = map;
        }
        return data;
    }

}

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

-1
一个已经完成且简单的示例:
package io.github.baijifeilong.excel;

import lombok.SneakyThrows;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;

/**
 * Created by BaiJiFeiLong@gmail.com at 2019/12/6 11:41
 */
public class ExcelBoldTextDemo {

    @SneakyThrows
    public static void main(String[] args) {

        new XSSFWorkbook() {{
            XSSFRow row = createSheet().createRow(0);
            row.setRowStyle(createCellStyle());
            row.getRowStyle().getFont().setBold(true);
            row.createCell(0).setCellValue("Alpha");
            row.createCell(1).setCellValue("Beta");
            row.createCell(2).setCellValue("Gamma");
        }}.write(new FileOutputStream("demo.xlsx"));
    }
}

14
createCellStyle()是什么?它是Java中HSSF(Horrible Spreadsheet Format)API的方法之一,用于创建新的单元格样式。 - user13182598

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接