我通过计算columnWidth和我计算的行高来获得我想要的确切大小时遇到问题,因为我不懂文档.
就columnWidth而言,我使用的是代码行,sheet.setColumnWidth(int columnIndex, int width);但我不明白如何正确计算宽度.我明白了:
width = Truncate([{Number of Visible Characters} * {Maximum Digit Width} + {5 pixel padding}]/{Maximum Digit Width}*256)/256
Run Code Online (Sandbox Code Playgroud)
所以我有一个确切的Excel工作表示例我要创建的内容,当我突出显示一列并选择列宽时,它会告诉我它9.67 (94 pixels).那么这是什么意思?如何将其插入到我的等式中以获得我想要的宽度值?
我遇到的另一个问题是我正在使用我在别处找到的代码(甚至在SO上)来动态计算行高.但我的问题是我不明白mergedCellWidth下面的代码中应该是什么内容nextPos = measurer.nextOffset(mergedCellWidth).我似乎无法正确地获得这个值,并且它弄乱了它认为应该有多少行,因此我的行高度不对.
java.awt.Font currFont = new java.awt.Font("Calibri", 0, 11);
AttributedString attrStr = new AttributedString(record.getDescription());
attrStr.addAttribute(TextAttribute.FONT, currFont);
// Use LineBreakMeasurer to count number of lines needed for the text
FontRenderContext frc = new FontRenderContext(null, true, true);
LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc);
int nextPos = 0;
int lineCnt = 0;
while (measurer.getPosition() < record.getDescription().length()) {
System.out.println(measurer.getPosition());
nextPos = measurer.nextOffset(mergedCellWidth); // mergedCellWidth is the max width of each line
lineCnt++;
measurer.setPosition(nextPos);
System.out.println(measurer.getPosition());
}
row.setHeight((short)(row.getHeight() * lineCnt));
Run Code Online (Sandbox Code Playgroud)
我认为在我的情况下,例子对我来说是最好的答案.谢谢!
Jon*_*ins 13
好吧,似乎没有人真的可以帮助我.经过反复试验,我发现了一些对我有用的近似值.
关于我的sheet.setColumnWidth(int columnIndex, int width);问题,我发现一个很好的近似如下:
width = ([number from step 2] * 256) + 200这实际上似乎运作得相当好.
关于我mergedCellWidth应该做什么的第二个问题,我发现以下工作对该值有效:(float) (sheet.getColumnWidth(columnIndex) / 256 * 4).它对于较小的长度字符串效果更好,并且随着字符串变大,行开始变得有点太大(所以我假设因子4有点太多但它适用于我的目的).
我还查看了用于自动调整大小列的Apache POI源代码,以试图了解正在发生的事情.尽管单位意味着什么并没有很多方向,但是我无法按照他们的计算并在我的Excel模板中重现它们.
| 归档时间: |
|
| 查看次数: |
11558 次 |
| 最近记录: |