org.apache.poi.ss.usermodel 包可以从多个模块访问:poi、poi.ooxm

Posted

技术标签:

【中文标题】org.apache.poi.ss.usermodel 包可以从多个模块访问:poi、poi.ooxm【英文标题】:The package org.apache.poi.ss.usermodel is accessible from more than one module: poi, poi.ooxm 【发布时间】:2019-01-25 09:01:22 【问题描述】:

在此问题的所有参考资料中,它已解决且不提供 maven,因为 notma​​ven 中进行操作。 错误是包org.apache.poi.ss.usermodel 可以从多个模块访问:poi, poi.ooxm 在两个错误中

我必须同时使用 poi 和 poi--ooxml,请运行此代码,我需要使用它。甚至此代码也是从互联网本身中提取的,并且有很多博客都显示了这种类型的代码,这是我的实际要求,但它不起作用。

【问题讨论】:

不要使用模块!只需将它们放在类路径上,而不是模块路径上 Apache POI does not yet fully support the Java 9 module system...as Apache POI currently uses the same package in different jar-files。但这仅仅是原因。我也没有解决办法。至少不使用 Eclipse,因为我没有使用那个 IDE。下一个apache poi 版本4.0 似乎避免了“在不同的jar 文件中使用相同的包”。 那怎么用呢。因为他们都是这个程序的强制要求。解决方案? 从 poi-ooxml - 3.17 切换到 poi-ooxml-4.1.2.jar 为我解决了这个问题。 【参考方案1】:

我遇到了同样的问题并找到了解决方案。这有点晚了,但可能会帮助其他面临同样问题的人。 在您的模块中删除“需要 poi”并保留需要 poi.ooxml;

module com.example.MyModlue 
  //other require statement goes here
   requires poi.ooxml;

现在在你的代码中

代替使用 (CellType.NUMERIC) 导入 org.apache.poi.ss.usermodel.CellType;

获取单元格类型使用 (cell.getCellTypeEnum().NUMERIC) where cell if of type XSSFCell

import org.apache.poi.xssf.usermodel.XSSFCell;

希望这会有所帮助。 :)

【讨论】:

我使用var 类型推断来避免直接引用类型。【参考方案2】:

只需在模块类中将所有库添加到要求中

module MyProjct 
    requires poi;
    requires poi.excelant;
    requires poi.ooxml;
    requires poi.ooxml.schemas;


【讨论】:

【参考方案3】:

如果有人有同样的问题,只需下载新版本的 POI,旧版本与新版本的 java 不兼容

【讨论】:

以上是关于org.apache.poi.ss.usermodel 包可以从多个模块访问:poi、poi.ooxm的主要内容,如果未能解决你的问题,请参考以下文章