gpt4 book ai didi

java - 安卓 POI : crash when using autoSizeColumn()

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:21 27 4
gpt4 key购买 nike

POI 的

autoSizeColumn 方法抛出一个我没能解决的异常:

 "java.lang.ClassNotFoundException: Didn't find class "java.awt.font.FontRenderContext" on path:..." 

有这个错误

"java.lang.NoClassDefFoundError: Failed resolution of: Ljava/awt/font/FontRenderContext;"

这是我的代码,在将数据放入列后调用该方法:

  private boolean saveExcelFile(Context context, String fileName) {

if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) {
Log.e("ExcelLog", "Storage not available or read only");
return false;
}

boolean success = false;

Cell c;

Workbook wb = new HSSFWorkbook();

CellStyle cs = wb.createCellStyle();
cs.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

Sheet sheet1;
sheet1 = wb.createSheet("Historique du "+date);

MultiFormatWriter writer = new MultiFormatWriter();
Bitmap ImageBitmap;

CreationHelper helper = wb.getCreationHelper();

Drawing drawing = sheet1.createDrawingPatriarch();

Row row = sheet1.createRow(0);

c = row.createCell(0);
c.setCellValue("Quantité");
c.setCellStyle(cs);

c = row.createCell(1);
c.setCellValue("Code barre");
c.setCellStyle(cs);

c = row.createCell(2);
c.setCellValue("Association");
c.setCellStyle(cs);

int m = 0;
for(int k=0;k<ExpListDistribs.size();++k) {
int l = 0;
for (int n = 0; n < ExpListDistribs.get(k).getDistribs().size()*2; n++) {
while(l<ExpListDistribs.get(k).getDistribs().size()) {
if (isOdd(m)) {
row = sheet1.createRow(m + 1);
row.setHeight((short)800);
m++;
c = row.createCell(0);
c.setCellValue("");
} else {
ClientAnchor anchor = helper.createClientAnchor();
row = sheet1.createRow(m + 1);
row.setHeight((short)1200);
c = row.createCell(0);
c.setCellStyle(style);
c.setCellValue(ExpListDistribs.get(k).getDistribs().get(l).getQuantite()+" kg");
c = row.createCell(2);
c.setCellStyle(style);
c.setCellValue(ExpListDistribs.get(k).getAssociation());

l++;
int t = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
anchor.setCol1(1);
anchor.setCol2(2);
anchor.setRow1(m + 1);
anchor.setRow2(m + 2);
m++;
drawing.createPicture(anchor, t);
}
}
}
}

sheet1.setColumnWidth(0, (15 * 200));
sheet1.setColumnWidth(1, (15 * 800));
sheet1.autoSizeColumn(2);

File file = new File(context.getExternalFilesDir(null), fileName);
FileOutputStream os = null;

try {
os = new FileOutputStream(file);
wb.write(os);
Log.w("FileUtils", "Writing file" + file);
success = true;
} catch (IOException e) {
Log.w("FileUtils", "Error writing " + file, e);
} catch (Exception e) {
Log.w("FileUtils", "Failed to save file", e);
} finally {
try {
if (null != os)
os.close();
} catch (Exception ignored) {
}
}
Toast.makeText(getApplicationContext(), "Success",
Toast.LENGTH_LONG).show();
return success;
}

有人有任何线索可以帮助我吗?
提前致谢。

最佳答案

你已经标记了这个机器人。在 android 上,大多数(全部?)AWT 类不可用。但是 POI 需要一个 FontRenderContext 来计算列大小。

作为解决方法,将对 autoSizeColumn(2) 的调用替换为 setColumnWidth(2, width)width 的近似值可以通过计算该列中显示的最大字符数乘以一个因子来计算。首先为比例字体尝试大约 0.55 * fontSizeInPoints 的值。

PS:下次请提供完整的堆栈跟踪并提及您使用的 JDK 和 POI 版本。

关于java - 安卓 POI : crash when using autoSizeColumn(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37069820/

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