用java从excel电子表格中获取字体大小

8wtpewkr  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(612)

我试图在excel电子表格上获取标题的字体大小,但一直未能获取。我试着用下面的来获得尺寸,但是我没有得到尺寸。以下这些都不适用于我,因为它返回的字体大小不正确。headerfont.getfontheight();headerfont.getfontheightinpoints();有什么建议吗?
下面是我的代码:

try {
        FileInputStream file = new FileInputStream(new File(fileName));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = workbook.getSheetAt(1);

        int numRows = sheet.getLastRowNum() + 1;
        int numCols = sheet.getRow(0).getLastCellNum();

        Iterator<Row> rowIterator = sheet.iterator();

        for (int i = 0; i < 1; i++) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            for (int j = 0; j < numCols; j++) {
                Cell cell = cellIterator.next();
                Font headerFont = workbook.createFont();
                headerFontFamily = headerFont.getFontName();
                headerFont.getFontHeight();
                headerFont.getFontHeightInPoints();

            }
        }
        file.close();
    } catch (Exception e) {

    }
3okqufwl

3okqufwl1#

你需要从单元格中获取字体。字体是单元格样式的一部分。单元格样式可以通过 Cell.getCellStyle . 然后使用的字体的索引可以作为 short 通过 CelStyle.getFontIndex 或作为 int 通过 CelStyle.getFontIndexAsInt 或作为 int 通过 CelStyle.getFontIndex 取决于 apache poi 使用的版本。后者利用电流工作 5.0.0 版本。
完整示例:

import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;

class ReadExcel {

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

  Workbook workbook = WorkbookFactory.create(new FileInputStream("./ExcelExample.xlsx"));
  FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();  

  DataFormatter dataFormatter = new DataFormatter();

  Sheet sheet = workbook.getSheetAt(0);
  for (Row row : sheet) {
   for (Cell cell : row) {
    String value = dataFormatter.formatCellValue(cell, evaluator);
    System.out.println(value);
    CellStyle style = cell.getCellStyle();
    //short fontIdx = style.getFontIndex(); // depends on apache poi version
    //int fontIdx = style.getFontIndexAsInt(); // depends on apache poi version
    int fontIdx = style.getFontIndex(); // depends on apache poi version
    Font font = workbook.getFontAt(fontIdx);
    System.out.println(font.getFontName() + ", " + font.getFontHeightInPoints());
   }
  }
  workbook.close();
 }
}

注意:这只在单元格只有一种字体时有效。如果单元格包含富文本字符串,则每个格式化文本运行都有字体。那么 RichTextString 需要得到和遍历。这要复杂得多,需要做不同的工作 HSSF 以及 XSSF .

相关问题