使用 Java 从 excel 电子表格获取字体大小
Getting font size from excel spreadsheet using Java
我正在尝试获取 excel 电子表格中 header 的字体大小,但无法获取。我尝试使用以下方法获取尺寸,但无法获得尺寸。 None 以下对我有用,因为它 return 的字体大小不正确。
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) {
}
您需要从单元格中获取字体。字体是单元格样式的一部分。可以通过 Cell.getCellStyle
获取单元格样式。然后使用的字体的索引可以通过 CelStyle.getFontIndex
或 int
通过 CelStyle.getFontIndexAsInt
或 int
通过 CelStyle.getFontIndex
dependig使用的 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
.
做不同的事情
我正在尝试获取 excel 电子表格中 header 的字体大小,但无法获取。我尝试使用以下方法获取尺寸,但无法获得尺寸。 None 以下对我有用,因为它 return 的字体大小不正确。 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) {
}
您需要从单元格中获取字体。字体是单元格样式的一部分。可以通过 Cell.getCellStyle
获取单元格样式。然后使用的字体的索引可以通过 CelStyle.getFontIndex
或 int
通过 CelStyle.getFontIndexAsInt
或 int
通过 CelStyle.getFontIndex
dependig使用的 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
.