标签: apache-poi-4

Apache POI - 检索 .doc 文件中关键字之间的文本内容并有条件地呈现它

我想在 .doc 文件中查找两个关键字之间的文本内容,并有条件地呈现该文本内容或隐藏它。例如:

${if condition}Lorem Ipsum 是印刷和排版行业的简单虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准虚拟文本${endif}

当我使用 Apache - POI 解析文档时,我希望能够以某种方式在文档中发现这些块引用 ${if condition} ${endif}之间的每个内容,并有条件地在我想要生成的下一个文档中呈现或不呈现它。

所以上面的文本经过我的解析后应该有以下两种不同的形式:

1) 满足条件时

Lorem Ipsum 是印刷和排版行业的简单虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准虚拟文本

或者

2)如果不满足条件

Lorem Ipsum 只是虚拟文本

我尝试通过使用XWPFParagraph对象来做到这一点,XWPFRun但是这不是可靠的方法,因为在不可预测的条件下,运行可以在单词中间随机分割。

您能否提出任何可靠的方法来实现我的用例?提前致谢。

java ms-word apache-poi xwpf apache-poi-4

5
推荐指数
1
解决办法
887
查看次数

Apache POI 4.0:来自java.awt.Color的XSSFColor

org.apache.poi 4.0删除了XSSFColor仅使用的构造函数java.awt.Color。在org.apache.poi 3.7其中,只需编写即可创建对象非常容易

Color inputColor = Color.RED;
XSSFColor test = new XSSFColor(inputColor);
Run Code Online (Sandbox Code Playgroud)

但是,此构造函数不再在4.0中工作。https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFColor.html上的文档显示了其他几个构造函数,但理想情况下,我希望更改的行数尽可能少。

所以,我的问题是,XSSFColorjava.awt.Color现在开始创建最佳方法是什么(在Apache POI 4.0中)?


根据注释中的要求,这是我使用建议的测试代码。使用style.setFillForegroundColor(new XSSFColor(java.awt.Color.RED, null)); LibreOffice 6.1打开它会产生错误(尝试修复,然后失败)。注释了正常工作的POI 3.7版本。

@Test
public void testPOI40() throws FileNotFoundException, IOException {
    Workbook workbook = new XSSFWorkbook();
    XSSFSheet fSheet = (XSSFSheet) workbook.createSheet("new Sheet");
    XSSFRow hRow = fSheet.createRow((short) 0);
    //header
    String[] astrHeaders = new String[]{"Header1", "Header2", "Header3", "Header4"};
    for (int col = 0; col < astrHeaders.length; col++) {
        XSSFCell …
Run Code Online (Sandbox Code Playgroud)

java colors apache-poi apache-poi-4

4
推荐指数
1
解决办法
1902
查看次数

为什么在 XSSFRow 中使用 copyRowFrom(...) 时出现 IllegalArgumentException?

我试图copyRowFrom(...);将电子表格的第一行复制到新 XSSFSheet 的第一行,但有些东西无法正常工作。您可以在此处找到 XSSFRow 类和方法: https://github.com/apache/poi/blob/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java#L581

IllegalArgumentException("amountToMove must not be zero")从 FormulaShifter.java 获取: https://github.com/apache/poi/blob/trunk/src/java/org/apache/poi/ss/formula/FormulaShifter.java#L80

问题似乎出在 XSSFRow 的第 623 行,其中FormulaShifter.createForRowCopy(...)使用参数调用rowDifference = 0,因为源行为 0,目标行为 0: https: //github.com/apache/poi/blob/trunk/src/ooxml/java/org /apache/poi/xssf/usermodel/XSSFRow.java#L623

我不知道,也许这是一个错误,但是当到达 FormulaShifter.java 中的第 80 行时,参数 rowDifference 对应的 amountToMove 为 0,因此它抛出 IllegalArgumentException。

copyRowFrom(...);我是否遗漏了某些内容,或者这是XSSFRow 中方法的错误?

java apache-poi apache-poi-4

3
推荐指数
1
解决办法
2088
查看次数

Apache POI - java.lang.NoClassDefFoundError:org/apache/commons/compress/utils/InputStreamStatistics

我正在尝试使用 Apache POI 读取 Word 文档 (.docx),但出现此错误...

线程“AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:org/apache/commons/compress/utils/InputStreamStatistics at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.(ZipArchiveThresholdInputStream.java:63) at org. apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:178) 在 org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:104) 在 org.apache.poi.openxml4j.opc .OPCPackage.open(OPCPackage.java:301)在gui.CryptoGUI.selectFileButtonActionPerformed(CryptoGUI.java:645)在gui.CryptoGUI.access$1100(CryptoGUI.java:27)在gui.CryptoGUI$11.actionPerformed(CryptoGUI.java: 321) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 com.jtattoo.plaf.BaseButtonListener.mouseReleased(BaseButtonListener.java:65)在 java.awt.Component.processMouseEvent(Component.java:6535) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 在 java.awt.Component.processEvent(Component.java:6300) 在 java.awt。 Container.processEvent(Container.java:2236)在java.awt.Component.dispatchEventImpl(Component.java:4891)在java.awt.Container.dispatchEventImpl(Container.java:2294)在java.awt.Component.dispatchEvent(Component) .java:4713)在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)在java.awt.Container.dispatchEventImpl(Container.java:2280)在java.awt.Window.dispatchEventImpl(Window.java:2750)在java.awt.Component.dispatchEvent(Component.java:4713)在java.awt。 EventQueue.dispatchEventImpl(EventQueue.java:758) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3。在 java.security.AccessController.doPrivileged(本机方法)处运行(EventQueue.java:703) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain. java:86) 在 java.awt.EventQueue$4.run(EventQueue.java:731) 在 java.awt.EventQueue$4.run(EventQueue.java:729) 在 java.security.AccessController.doPrivileged(Native Method) 在 java .security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 在 java.awt。EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread) .java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我的类路径中有以下库,

在此输入图像描述

这是我收到此错误的代码

private …
Run Code Online (Sandbox Code Playgroud)

java fileinputstream apache-poi java-io apache-poi-4

3
推荐指数
1
解决办法
1万
查看次数

使用 Apache POI 在 Excel 工作簿之间复制单元格

我正在尝试使用最新版本的 Apache POI (4.1.2) 将单元格从一个工作簿复制到另一个工作簿。

如果两个工作簿都是 .xlsx 文件,则一切正常。但是,如果源工作簿是(旧的).xls 文件并且目标工作簿是 .xlsx 文件,则以下代码将失败

// Copy style from old cell and apply to new cell
CellStyle newCellStyle = targetWorkbook.createCellStyle();
newCellStyle.cloneStyleFrom(sourceCell.getCellStyle());
targetCell.setCellStyle(newCellStyle);
Run Code Online (Sandbox Code Playgroud)

抛出的异常是:

java.lang.IllegalArgumentException:只能从一个 XSSFCellStyle 克隆到另一个 XSSFCellStyle,不能在 HSSFCellStyle 和 XSSFCellStyle 之间克隆

cloneStyleFrom如果当文件(或Workbook对象)具有不同类型时我们无法使用,那么我们如何将HSSFCellStyle对象转换为XSSFCellStyle

java excel apache-poi apache-poi-4

3
推荐指数
1
解决办法
4489
查看次数

如何使用 Apache POI 创建链接到长 url 的 excel 超链接

Excel 的超链接大小限制为 255

现在我正在使用 Apache POI 以编程方式填写 excel,但使用 s3 预签名 url 远长于 255 个字符,长度超过 1350 个。

当我单击在 excel 中创建的超链接时,它显示如下警报:“发生了意外错误。”

这是我对应的代码:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFHyperlink;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

  public void generateExcel(List<FunctionalTestCaseResult> data) {

      XSSFWorkbook workbook = new XSSFWorkbook();
      CreationHelper createHelper = workbook.getCreationHelper();
      XSSFSheet sheet = workbook.createSheet("Sheet1");

      int rowNum = 0;
      Row row = sheet.createRow(rowNum++);
      int cellNum = 0; …
Run Code Online (Sandbox Code Playgroud)

java excel apache-poi apache-poi-4

2
推荐指数
1
解决办法
2520
查看次数

如何使用 apache poi 4.0.1 和 java 生成可编辑的堆叠条形图?

我想使用 Apache poi 4.0.1 和 Java 语言为 Excel 创建堆积条形图

  • 输出 excel 文件的扩展名应为 .xlsx
  • 生成的图表应该有图表标题和数据标签
  • 生成的图表还应该能够在每列顶部显示所有数据的总和(您可以看到每列的总计显示在黄色框中)
  • 您可以参考下图以更清楚地了解我正在寻找的内容。

在此处输入图片说明


  • 堆积条形图的数据

Date    Category High Medium Low
10/01   3        0    3      0
10/02   3        0    2      1
10/03   3        0    2      1
10/04   4        1    2      1
10/05   11       1    7      3
10/08   14       1    10     3
10/09   15       1    11     3
10/10   15       1    11     3
10/11   15       0    11     4
10/12   8        0    6      2
Run Code Online (Sandbox Code Playgroud)

java excel apache-poi stacked-chart apache-poi-4

1
推荐指数
1
解决办法
3044
查看次数

APACHE POI 4.1:从十六进制代码设置单元格背景颜色

我尝试了在堆栈溢出上发布的不同解决方案,以将背景颜色应用于 Apache POI 生成的单元格,但没有任何效果。

我正在做类似的事情:

Workbook workbook = new XSSFWorkbook(); 
Sheet sheet = workbook.createSheet(sheetName);

XSSFCellStyle cellStyle = ((XSSFCellStyle) workbook.createCellStyle());

if (styleObject.getBgColor() != null) {
    java.awt.Color javaBdgColor = java.awt.Color.decode(voceStyle.getBgColor()); // this is #FFF000
    XSSFColor bgColor = new XSSFColor(javaBdgColor, new DefaultIndexedColorMap());
    cellStyle.setFillForegroundColor(bgColor.getIndex());
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
}

Row newRow = Rowsheet.createRow(0);
Cell newCell = newRow.createCell(0);
newCell.setCellStyle(cellStyle);

// write file
String pathFileExport = buildPathExportFile("test-export");
FileOutputStream fileOut = new FileOutputStream(pathFileExport);
workbook.write(fileOut);
fileOut.close();

//close workbook
workbook.close();

return Paths.get(pathFileExport);
Run Code Online (Sandbox Code Playgroud)

我认为我的代码中一切正常,但每个单元格样式都会导致黑色背景。 黑细胞

我对没有字段的调试结果期间的“DefaultIndexedColorMap”实例有一些疑问:

代码调试器

在这一点上,我不确定该怎么做才能解决。其他帖子中的每个人似乎都能正常工作,但我的背景仍然是深色而不是黄色。

有什么建议?提前致谢!

java spring colors apache-poi apache-poi-4

1
推荐指数
1
解决办法
7050
查看次数