IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> jxls的poi版本冲突 -> 正文阅读

[人工智能]jxls的poi版本冲突

0、工作上框架引入的poi版本是5.X,而jxls支持的poi版本是4.1.2,在idea中排除jxls的poi过后能正常导出excel,但是部署到测试环境就会报错:Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath

在这里插入图片描述

1、源码里面是用类名去找的系统属性,然后再通过反射生成的PoiTransformer这个类,猜测poi更新版本过后可能找不到相关的系统属性了

在这里插入图片描述

在这里插入图片描述

2、解决办法:

  • 排除jxls里面的poi

        <properties>
            <jxls.version>2.9.0</jxls.version>
        </properties>
        <dependencies>
            <!-- jxls begin -->
            <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls</artifactId>
                <version>${jxls.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls-poi</artifactId>
                <version>${jxls.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.poi</groupId>
                        <artifactId>poi-ooxml</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.poi</groupId>
                        <artifactId>poi</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls-jexcel</artifactId>
                <version>1.0.9</version>
            </dependency>
    
            <!--根据jxls-cor-1.0.6修改,支持poi4.x版本-->
            <dependency>
                <groupId>net.sf.jxls</groupId>
                <artifactId>jxls-core</artifactId>
                <version>1.8</version>
            </dependency>
    
            <!-- jxls end -->
      </dependencies>
    
  • 重写jxlshelper的createTransformer方法

	@Override
	public Transformer createTransformer(InputStream templateStream, OutputStream targetStream)
	{

		PoiTransformer transformer = PoiTransformer.createTransformer(templateStream, targetStream);

//		if (super.expressionNotationBegin != null && expressionNotationEnd != null) {
//			transformer.getTransformationConfig().buildExpressionNotation(expressionNotationBegin,
//																		  expressionNotationEnd);
//		}
		transformer.setEvaluateFormulas(false);
		return transformer;

	}

3、相关代码:

CusJxlsHelper类

public class CusJxlsHelper extends JxlsHelper
{
	private static Logger logger = LoggerFactory.getLogger(CusJxlsHelper.class);

	public static CusJxlsHelper instance()
	{
		return new CusJxlsHelper();
	}

	//重写了processTemplate这个方法
	@Override
	public void processTemplate(org.jxls.common.Context context, Transformer transformer) throws IOException
	{

		AreaBuilder areaBuilder = this.getAreaBuilder();
		boolean processFormulas = this.isProcessFormulas();

		areaBuilder.setTransformer(transformer);
		List<Area> xlsAreaList = areaBuilder.build();
		Iterator var4 = xlsAreaList.iterator();

		Area xlsArea;
		while (var4.hasNext())
		{
			xlsArea = (Area) var4.next();
			xlsArea.applyAt(new CellRef(xlsArea.getStartCellRef().getCellName()), context);
		}

		if (processFormulas)
		{
			var4 = xlsAreaList.iterator();

			while (var4.hasNext())
			{
				xlsArea = (Area) var4.next();
				this.setFormulaProcessor(xlsArea);
				xlsArea.processFormulas();
			}
		}
		//增加了删除template sheet的业务控制
		if (this.isDeleteTemplateSheet())
		{
			transformer.deleteSheet("TEMPLATE");
		}

		transformer.write();
	}

	//这里不想写的,但是不写会报错
	private Area setFormulaProcessor(Area xlsArea)
	{
		FormulaProcessor fp = this.getFormulaProcessor();
		if (fp == null)
		{
			if (this.isUseFastFormulaProcessor())
			{
				fp = new FastFormulaProcessor();
			} else
			{
				fp = new StandardFormulaProcessor();
			}
		}

		xlsArea.setFormulaProcessor(fp);
		return xlsArea;
	}

	@Override
	public Transformer createTransformer(InputStream templateStream, OutputStream targetStream)
	{

		PoiTransformer transformer = PoiTransformer.createTransformer(templateStream, targetStream);

//		if (super.expressionNotationBegin != null && expressionNotationEnd != null) {
//			transformer.getTransformationConfig().buildExpressionNotation(expressionNotationBegin,
//																		  expressionNotationEnd);
//		}
		transformer.setEvaluateFormulas(false);
		return transformer;

	}
}
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:05:07  更:2022-05-08 08:09:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:29:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码