jxls简单导出

导入依赖

                <dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls</artifactId>
			<version>2.8.1</version>
		</dependency>
		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls-poi</artifactId>
			<version>2.8.1</version>
		</dependency>

创建Excel模板中使用的标签语句

必需批注: jx:area(lastCell="")
使用${}取值
循环批注: jx:each(items="
" var="record" varIndex="index" lastCell="
") ${record.}
横向循环: jx:each(items="
" var="record" lastCell="*" direction="RIGHT")

java代码

        /**
	 * 
	 * @param is  读取模板的输入流
	 * @param os  输出流
	 * @param model 参数
	 * @throws IOException
	 */
	public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> model) throws IOException {
		Context context = getContext(model);
		// 添加自定义语句
		// XlsCommentAreaBuilder.addCommandMapping(EachMatrixCommand.COMMAND_NAME, EachMatrixCommand.class);
		JxlsHelper jxlsHelper = JxlsHelper.getInstance();
		Transformer transformer  = jxlsHelper.createTransformer(is, os);
		//获得配置
		JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig().getExpressionEvaluator();
		Map<String, Object> funcs = new HashMap<>();
		funcs.put("utils", new JxlsUtils()); //添加自定义功能
		JexlBuilder jb = new JexlBuilder();
		jb.namespaces(funcs);
		//jb.silent(true); //设置静默模式,不报警告
		JexlEngine je = jb.create();
		evaluator.setJexlEngine(je);
		//必须要这个,否者表格函数统计会错乱
		jxlsHelper.setUseFastFormulaProcessor(false).processTemplate(context, transformer);
	}

	public static Context getContext(Map<String, Object> model) {
		Context context = PoiTransformer.createInitialContext();
		if (model != null) {
			for (String key : model.keySet()) {
				context.putVar(key, model.get(key));
			}
		}
		return context;
	}
posted @ 2022-07-14 15:20  黒马  阅读(375)  评论(0)    收藏  举报