gpt4 book ai didi

apache-poi - Apache POI宽度计算

转载 作者:行者123 更新时间:2023-12-04 10:18:23 24 4
gpt4 key购买 nike

我在获取我想要的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

因此,我有一个确切的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));

我认为就我而言,例子将是我的最佳答案。谢谢!

最佳答案

好吧,似乎没有人真的可以帮助我。经过反复试验,我发现一些近似的方法对我来说可行。

关于我的sheet.setColumnWidth(int columnIndex, int width);问题,我发现一个很好的近似值如下:

  • 在Excel中,转到“普通” View 。
  • 转到格式->列宽...,并记下
  • 使用以下公式来计算宽度:width = ([number from step 2] * 256) + 200

  • 这实际上似乎工作得很好。

    关于我的第二个问题应该是什么 mergedCellWidth,我发现该值可以正常工作: (float) (sheet.getColumnWidth(columnIndex) / 256 * 4)。对于较小长度的字符串,它的效果要好得多,并且随着字符串的变大,行开始会变得太大(因此我认为4的因数有点太大,但出于我的目的而起作用)。

    我也确实检查了Apache POI源中的自动调整列大小,以试图了解正在发生的事情。尽管单位的含义并没有很多指导,但我无法遵循它们的计算结果并无法在Excel模板中进行复制。

    关于apache-poi - Apache POI宽度计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259731/

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