gpt4 book ai didi

java - SXSSF 无法创建 Font 和 DateFormat

转载 作者:行者123 更新时间:2023-12-04 20:55:37 25 4
gpt4 key购买 nike

问题

在 SXSSF 工作簿中:

如何设置字体?

如何将细胞类型设置为日期?

上下文

我需要编写一个包含大量行和列(400.000 行,每行 50 个字段)的 excel .xlsx 文件,所以我使用的是 apache poi,SXSSF 工作簿。我用这么多的虚拟文本创建了一个测试文件,它可以工作,但我希望单元格有一个自定义字体:所以如果文本以某种方式代表时间单元格类型应该设置为“日期”(允许我轻松地按日期过滤行) .

我编写了一个函数,它允许我根据传递给函数的 textType 值创建一个单元格、检查和修改其文本类型(货币、字符串、数据)。当我检查数据时,文本类型被正确识别。货币和文本已正确修改,但是当我尝试设置字体和数据类型时,它根本不起作用。

(我已经有一个工作函数(XSSF),它使用自定义字体和不同的数据类型(包括“日期”)创建一个 Excel,由于 GC 开销,它无法生成大的 Excel 文件,这就是我不得不切换到 SXSSF 的原因)

错误

我得到这种编译错误。

Errors incompatible types;found : org.apache.poi.ss.usermodel.Font,required: org.apache.poi.xssf.usermodel.XSSFFont at line 235 (235:40) incompatible types;found : org.apache.poi.ss.usermodel.DataFormat,required: org.apache.poi.xssf.usermodel.XSSFDataFormat at line 271 (271:54) incompatible types;found : org.apache.poi.ss.usermodel.DataFormat,required: org.apache.poi.xssf.usermodel.XSSFDataFormat at line 308 (308:54) incompatible types;found : org.apache.poi.ss.usermodel.DataFormat,required: org.apache.poi.xssf.usermodel.XSSFDataFormat at line 335 (335:54) incompatible types;found : org.apache.poi.ss.usermodel.DataFormat,required: org.apache.poi.xssf.usermodel.XSSFDataFormat at line 375 (375:66)



由于 SXSSFFont 不存在,我尝试通过创建一个 Font 对象然后使用它而不是 XSSFFont 来修复它。

数据格式相同。

但我仍然在代码中到处发现类型问题。
XSSFFont font = (XSSFFont) workbook.createFont();
XSSFDataFormat df = (XSSFFont) workbook.createDataFormat();

也尝试了上面的代码,但它不起作用,我明白了

ClassCastException error



代码
            //[...]
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
Sheet sheet;
Row row;
Cell cell;
//[...]
XSSFFont font = workbook.createFont();
font.setBold(fontBold);
font.setItalic(fontItalic);
font.setFontHeightInPoints( (short) fontSize);
if (!fontUnderline) {
font.setUnderline(FontUnderline.NONE);
}
else {
font.setUnderline(FontUnderline.SINGLE);
}
font.setColor(fontColor);

CellStyle style = workbook.createCellStyle();

style.setFont(font);


//[...]

if (textType == 'T') {

XSSFDataFormat df = workbook.createDataFormat();
style.setDataFormat(df.getFormat("d-mmm-yyyy hh:mi:ss"));
Calendar c = Calendar.getInstance();
c.set(year, month, day, hour, minute,second);
cell.setCellValue(c.getTime());
}

//in the end I set cell value and style

cell.setCellStyle(style);
cell.setCellValue(text);

最佳答案

在这里,我使用 SXSSFWorkbook 创建了一个简短的示例。并用日期填充 1 个单元格并应用正确的 format以及 font .

SXSSFWorkbook s = new SXSSFWorkbook();
Font font = s.createFont();
font.setBold(true);
font.setItalic(true);
short dateStyle = s.createDataFormat().getFormat("mm/dd/yy;@");
CellStyle dateCellFormat = s.createCellStyle();
dateCellFormat.setDataFormat(dateStyle);
dateCellFormat.setFont(font);
SXSSFSheet sheet = s.createSheet("Test");
Row r = sheet.createRow(0);
Cell c = r.createCell(0);
c.setCellValue(new Date());
c.setCellStyle(dateCellFormat);
s.write(Files.newOutputStream(Paths.get("D:/test.xlsx"), StandardOpenOption.CREATE_NEW));
s.close();

你将不得不做一些调整,但我希望你明白(使用适当的 Interface 的)

关于java - SXSSF 无法创建 Font 和 DateFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48189390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com