GVKun编程网logo

Apache POI autoSizeColumn调整大小不正确(autosizecolumnsmode)

14

如果您对ApachePOIautoSizeColumn调整大小不正确和autosizecolumnsmode感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解ApachePOIautoSizeCo

如果您对Apache POI autoSizeColumn调整大小不正确autosizecolumnsmode感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Apache POI autoSizeColumn调整大小不正确的各种细节,并对autosizecolumnsmode进行深入的分析,此外还有关于.ipsproject-File 中的 maxTableColumnSize、Android POI:使用autoSizeColumn()时崩溃、Apache POI autoSizeColumn不正确resize、Apache POI autoSizeColumn()不能正常工作的实用技巧。

本文目录一览:

Apache POI autoSizeColumn调整大小不正确(autosizecolumnsmode)

Apache POI autoSizeColumn调整大小不正确(autosizecolumnsmode)

我在Java中使用Apache POI创建一个Excel文件。我填写了数据,然后尝试自动调整每列的大小,但是大小总是错误的(我 认为是
一致的)。前两行始终(?)完全折叠。当我在excel中自动调整列的大小时,它可以完美运行。

(我相信)没有空白单元被写入,并且调整大小是我要做的 最后一 件事。

这是相关的代码: 这是一个精简的版本,没有错误处理等。

public static synchronized String storeResults(ArrayList<String> resultList, String file) {    if (resultList == null || resultList.size() == 0) {        return file;    }    FileOutputStream stream = new FileOutputStream(file);    //Create workbook and result sheet    XSSFWorkbook book = new XSSFWorkbook();    Sheet results = book.createSheet("Results");    //Write results to workbook    for (int x = 0; x < resultList.size(); x++) {        String[] items = resultList.get(x).split(PRIM_DELIM);        Row row = results.createRow(x);        for (int i = 0; i < items.length; i++) {            row.createCell(i).setCellValue(items[i]);        }    }    //Auto size all the columns    for (x = 0; x < results.getRow(0).getPhysicalNumberOfCells(); x++) {        results.autoSizeColumn(x);    }    //Write the book and close the stream    book.write(stream);    stream.flush();    stream.close();    return file;}

我知道那里有一些类似的问题,但是其中大多数只是在填写数据之前进行大小调整的情况。还有一些不是更复杂/没有答案。

编辑: 我尝试使用几种不同的字体,但没有用。这并不奇怪,因为无论什么字体,所有列都应完全折叠或不折叠。

另外,由于出现字体问题,因此我正在Windows 7上运行该程序。

已解决: 这是一个字体问题。我发现唯一起作用的字体是Serif。

答案1

小编典典

只是为了回答我的评论。行的大小无法正确调整,因为Java并未意识到您尝试使用此链接的字体,如果您想将新字体安装到Java中,则可以使用更新颖的字体。它还具有Java知道的默认字体的列表。

很高兴提供了帮助,您的问题得到了解决!

.ipsproject-File 中的 maxTableColumnSize

.ipsproject-File 中的 maxTableColumnSize

如何解决.ipsproject-File 中的 maxTableColumnSize?

我需要在数据库中存储至少 2000 个字符的字符串,但我在 Faktor-IPS 中收到以下验证消息:

Spalten-Size erreicht das Limit [1..255]

我在 .ipsproject-File 和属性 maxTableColumnSize 中找到了 PersistenceOptions - 设置为 255。如果我将此值更改为 2000,一切似乎都很好。如果更改此值是否有其他影响或此属性仅用于验证?

解决方法

''maxTableColumnSize'' 仅用于此验证,应根据您的数据库实现进行设置。可在此处找到典型值:https://blog.faktorzehn.de/2021/06/faktor-ips-persistenz-optionen/?lang=en

Android POI:使用autoSizeColumn()时崩溃

Android POI:使用autoSizeColumn()时崩溃

autoSizeColumn POI方法引发了一个我无法解决的异常:

 "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;}

有人对此有任何帮助的线索吗?
提前致谢。

答案1

小编典典

您已标记此android。在android上,大多数(所有?)AWT类都不可用。但是POI需要a FontRenderContext来计算列大小。

作为一种变通方法,代替您的来电autoSizeColumn(2)通过setColumnWidth(2,width)width可以通过将该列中显示的最大字符数乘以一个因子来计算的近似值。首先尝试0.55 *fontSizeInPoints为比例字体设置大约的值。

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

Apache POI autoSizeColumn不正确resize

Apache POI autoSizeColumn不正确resize

我在Java中使用Apache POI创build一个Excel文件。 我填写数据然后尝试自动化每列,但大小总是错误的(我认为一致)。 前两行总是(?)完全折叠。 当我在Excel中自动调整列时,它完美的工作。

没有空白单元格正在写(我相信),resize是我做的最后一件事情。

下面是相关的代码:这是一个没有error handling等的简化版本

public static synchronized String storeResults(ArrayList<String> resultList,String file) { if (resultList == null || resultList.size() == 0) { return file; } FileOutputStream stream = new FileOutputStream(file); //Create workbook and result sheet XSSFWorkbook book = new XSSFWorkbook(); Sheet results = book.createSheet("Results"); //Write results to workbook for (int x = 0; x < resultList.size(); x++) { String[] items = resultList.get(x).split(PRIM_DELIM); Row row = results.createRow(x); for (int i = 0; i < items.length; i++) { row.createCell(i).setCellValue(items[i]); } } //Auto size all the columns for (x = 0; x < results.getRow(0).getPhysicalNumberOfCells(); x++) { results.autoSizeColumn(x); } //Write the book and close the stream book.write(stream); stream.flush(); stream.close(); return file; }

我知道这里有几个类似的问题,但其中大多数只是填充数据之前的大小的一个例子。 而less数不是更复杂/没有答案。

PHP执行shell命令权限被拒绝

本地开发,Apache与开发人员 – 文件权限

使用Apache Wsgi通过DJANGO_SETTINGS_MODULE环境variables设置Django设置文件

通过Apache上的IP地址限制请求?

使用Apache列入白名单的CORS

编辑:我尝试使用几个不同的字体,它没有工作。 这并不令人感到意外,因为不pipe字体是什么字体,都应该完全崩溃或不应该是。

另外,由于字体问题出现,我在Windows 7上运行该程序。

解决:这是一个字体问题。 我发现的唯一字体是Serif。

.htaccess规则:多个域到一个ssl域

PHP致命错误:require():无法解锁pthread锁

RewriteCond里的%N反向引用

URL缩短网站

mod-rewrite从url中删除文件夹名称

只是为了回应我的意见。 由于Java并不知道你想要使用这个链接的字体,因此如果你想把新的字体安装到Java中,你可以使用一些更好的东西。 它也有Java知道的默认字体的列表。

很高兴这有助于你解决了你的问题!

这可能与这个与Java Bug JDK-8013716相关的POI Bug相关:Calibri和Cambria字体的渲染器自更新45以来失败 。

在这种情况下,更改字体或使用6u45 / 7u21以上的JRE应该可以解决问题。

你也可以通过使用这样的代码来弥补这个问题,并避免列被完全折叠sheet.autoSizeColumn(x); if (sheet.getColumnWidth(x) == 0) { // autosize Failed use MIN_WIDTH sheet.setColumnWidth(x,MIN_WIDTH); } sheet.autoSizeColumn(x); if (sheet.getColumnWidth(x) == 0) { // autosize Failed use MIN_WIDTH sheet.setColumnWidth(x,MIN_WIDTH); }

我也遇到这个问题,这是我的解决方案。

脚步:

创建工作簿

创建电子表格

创建行

创建/设置字体“Arial”

用字体创建/设置样式

用值和样式创建/设置单元格

autoSizeColumn

创建文件

码:

// initialize objects XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet(sheetName); XSSFRow row = spreadsheet.createRow(0); XSSFCell cell; // font/style XSSFFont font = workbook.createFont(); font.setFontName("Arial"); XSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); // create/set cell & style cell = row.createCell(0); cell.setCellValue("New Cell"); cell.setCellStyle(style); // auto size spreadsheet.autoSizeColumn(0); // create file File aFile = new File("Your Filename"); FileOutputStream out = new FileOutputStream(aFile); workbook.write(out);

资源:

http://www.tutorialspoint.com/apache_poi/index.htm

我在Windows 7上有类似的问题。

我使用Calibri字体(在我的JVM中支持)。 使用该字体时, autoSizeColumn() POI方法使用的java.awt.font.TextLayout的getBounds().getWidth()将返回0。

更改字体为Calibri-Regular解决了我的情况下的问题。

这是我的2美分 –

我使用默认的字体(在我的情况下宋体)使用它来使某些字段在XLS粗体。 像在Windows中的魅力一样工作,autoSizeColumn()函数。

Linux不是那么宽容。 自动调整大小是不合适的。 通过这个线程和其他我想出了以下解决方案。

我将Arial字体的.tff文件复制到JAVA / jre / lib / fonts目录中,然后重新运行该应用程序。 工作得很好。

我用Helvetica字体尝试替换Arial字体(实际上,Helvetica与Arial类似)。

XSSFFont font = wb.createFont(); font.setFontName("Helvetica");

当最宽的字符串以空格开始时,我发现自动调整大小没有使列宽足够,例如

cell.setCellValue(" New Cell");

这可以通过使用缩进来解决,例如

// font/style XSSFFont font = workbook.createFont(); font.setFontName("Arial"); XSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); style.setIndention((short)2); // create/set cell & style cell = row.createCell(0); cell.setCellValue("New Cell"); cell.setCellStyle(style); // auto size spreadsheet.autoSizeColumn(0);

Apache POI autoSizeColumn()不能正常工作

Apache POI autoSizeColumn()不能正常工作

我正在创build一个使用apache poi将信息写入excel文件的程序。 将所有数据input到文件后,我在文件的每一列调用autoSizeColumn方法。 但是它将列的大小调整为最后input的单元格的宽度,有时不像列中的其他单元格那么大。 我知道我正在使用它,不幸的是我现在没有互联网来发布任何代码,但我会尽快更新。

好吧,我希望我正在使用的代码标签,但这里是:

public void writeFile() { Workbook wb = new hssfWorkbook(); Sheet s = wb.createSheet(); try { FileOutputStream out = new FileOutputStream( this.getSelectedFile()); // create a new workbook // create a new sheet // declare a row object reference Row r = null; // declare a cell object reference Cell c = null; // in case of plain ascii wb.setSheetName(0,"Street Light Report"); // create a sheet with 30 rows (0-29) // int rownum; // short rownum; // PrintWriter printOut = new PrintWriter( // this.getSelectedFile()); String[] colName = { "Light Id","Flagged","Malfunction","Comments","Location","Date" }; // printOut.println("Light Id,Flagged,Malfunction,Comments,Location,Date"); Connections.connect(); String[][] data = Connections.searchForFlagged(); for (int i = 0; i < data.length; i++) { r = s.createRow(i); } r.setRowNum(0); for (int j = 0; j < 6; j++) { c = r.createCell(j); switch (j) { case 0: c.setCellValue(colName[j]); break; case 1: c.setCellValue(colName[j]); break; case 2: c.setCellValue(colName[j]); break; case 3: c.setCellValue(colName[j]); break; case 4: c.setCellValue(colName[j]); break; case 5: c.setCellValue(colName[j]); break; } } for (int i = 0; i < data.length; i++) { r.setRowNum(i + 1); for (int j = 0; j < data[i].length; j++) { c = r.createCell(j); // System.out.println(data[i][j]); switch (j) { case 0: c.setCellType(Cell.CELL_TYPE_NUMERIC); c.setCellValue(Integer.parseInt(data[i][j])); break; case 1: if (data[i][j].equals("true")) c.setCellValue("Yes"); else c.setCellValue("No"); break; case 2: if (data[i][j].equals("I")) c.setCellValue("Intermittent"); else c.setCellValue("Not Functional"); break; case 3: c.setCellValue(data[i][j]); break; case 4: c.setCellValue(data[i][j]); break; case 5: c.setCellValue(data[i][j]); break; } } } wb.getSheetAt(0).setPrintGridlines(true); for (int j = 0; j < 6; j++) { s.autoSizeColumn(j); } wb.write(out); out.close(); } catch (Exception ex) { } };

我会在这里张贴图片,但我需要代表。 点,我刚从这里开始。

**请注意,Connections类是JDBC类,以便java可以从MysqL数据库中获取信息,并返回string的二维数组**

jQuery.get没有收到服务器上的最新版本的文件

无法访问复制到/ var / www /或其他文件夹的PHP文件

添加过期标题没有mod_expires?

如果用户是移动的,如何重写到mobile.myUrl.com? (使用Apache或Webapp内?)

在docker文件中编辑conf文件

用户目录中的Apache CGI“报头之前的脚本输出结束”

Xampp – 安装sql Server和Visual Studio后无法启动Apache

如何在.htaccess文件中阻止来自多个引用者和子域的引荐stream量?

在linux中获取网站的状态码

将文件夹redirect到包含文件夹的子域

你只需要移动电话

sheet.autoSizeColumn(columnNumber);

数据添加完成后,在代码中添加一个点。

这里是一个API的链接

这是做到这一点的唯一方法。 我有同样的问题,我在输入数据之前调用方法autoSizeColumn() 。 跳它帮助

请注意,如果您正在生成巨大的报告s.autoSizeColumn(j); 会减慢性能。

移动for循环:

for (int j = 0; j < 6; j++) { s.autoSizeColumn(j); }

就在您写入工作簿并关闭您的外部对象之前。

wb.write(out);

总结

以上是小编为你收集整理的Apache POI autoSizeColumn()不能正常工作全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

我们今天的关于Apache POI autoSizeColumn调整大小不正确autosizecolumnsmode的分享已经告一段落,感谢您的关注,如果您想了解更多关于.ipsproject-File 中的 maxTableColumnSize、Android POI:使用autoSizeColumn()时崩溃、Apache POI autoSizeColumn不正确resize、Apache POI autoSizeColumn()不能正常工作的相关信息,请在本站查询。

本文标签: