我有固定的列宽度,需要使用apache POI自动拟合行高度,但我找不到它的工作方法。我尝试了这个决定,但它不适用于此文本
列宽为33.00(236像素),表格中的单元格具有换行文本属性。只有当内容高度超过现有行高度时,我才能更改行高度。
所以,我想问一下是否有任何方法或方法可以按内容自动调整行高?
private float calculateRowLinesForText(Font cellFont, float columnWidthInPoints, String value) {
java.awt.Font currFont = new java.awt.Font(cellFont.getFontName(), 0, cellFont.getFontHeightInPoints());
FontRenderContext frc = new FontRenderContext(null, true, true);
int lineCnt = 0;
for (String partValue : value.split("\n")) {
AttributedString attrStr = new AttributedString(partValue);
attrStr.addAttribute(TextAttribute.FONT, currFont);
LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc);
while (measurer.getPosition() < partValue.length()) {
int nextPos = measurer.nextOffset(columnWidthInPoints);
lineCnt++;
measurer.setPosition(nextPos);
}
}
return lineCnt;
}
只要行不在合并区域内,如果未明确设置高度,则它将自动调整高度。因此需要将高度设置为未定义(-1)。请参见第行。设置高度:
设置行的高度或将未定义/默认高度设置为ff(-1)。
完整示例:
源代码xcel.xlsx:
代码:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellUtil;
public class CreateExcelCellWrapText {
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("./Excel.xlsx"));
Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(2);
Cell cell = row.getCell(2); // cell C3
cell.setCellValue("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua");
CellUtil.setCellStyleProperty(cell, CellUtil.WRAP_TEXT, true); // make sure wrap text is set.
row.setHeight((short)-1); // set row heigth undefined so it is auto heigth
FileOutputStream out = new FileOutputStream("./ExcelNew.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
}
结果<代码>ExcelNew。xlsx:
如果您不知道哪些行必须是自动高度,并且需要根据所需的高度来决定,那么您需要根据单元格宽度、文本和使用的字体计算所需的高度。这是一项具有挑战性的任务。有关可能的解决方案,请参阅如何使用Java获取具有定义宽度的多行富文字段(任何字体、任何字体大小)的所需高度。
我有点迷失了 我试过3.17、4.0.0和5.0.0版。 或 我无法获得没有弃用或类型错误的代码:-( 我将Eclipe与Maven和Java11一起使用。在版本发布之后,我做了“更新项目”来更新Maven。
在xlsx工作簿中,有些单元格具有一些无界的SUMIF公式,如下所示:。使用ApachePOI5.0.0对一个SUMIF函数的评估持续100ms,对给定工作簿的评估持续几分钟。 提高执行持续时间的一种方法是将公式绑定到如下内容:。在我的情况下,这不是一个解决方案,因为我不是xlsx文件的作者,系统从未知的人那里获取未知的xlsx文件(因此我不能仅仅告诉他们限制SUMIF范围)。 的当前实现迭代给定
在执行此代码时,它在线程"main"java.lang.NoClassDefFoundError: org/apache/Commons/math3/util/ArithmeticUtils在org.apache.poi.poifs.property.RootProperty.set大小(RootProperty.java:59)在org.apache.poi.poifs.property.Dir
我正在尝试用ApachePOI创建甜甜圈图,但没有任何信息或示例。我尝试使用饼图的例子,但没有成功。你能帮我解决这个问题吗?
我对POI还是新手,但是我想简单地在Excel工作簿中迭代一列。例如,在下表中,如果我只想要列A的值,即列0中的行0-3,有没有有效的方法来做到这一点?我所看到的所有POI都是基于行的。 我有一些大的电子表格,我可以成功地遍历整个表格,但我只是想找出处理这种事情的最佳实践。 提前感谢。
HTTP客户端可能发送一些协议头来告诉服务端它们已经看过了哪些资源。这在获取网页(使用HTTPGET请求)时非常常见,可以避免发送客户端已经获得的完整数据。然而,相同的协议头可用于所有HTTP方法(POST, PUT, DELETE, 以及其它)。 对于每一个Django从视图发回的页面(响应),都会提供两个HTTP协议头:ETag和Last-Modified。这些协议头在HTTP响应中是可选的。