package pwc.taxtech.atms.service.impl; import org.jxls.common.Context; import org.jxls.expression.JexlExpressionEvaluator; import org.jxls.transform.Transformer; import org.jxls.util.JxlsHelper; import org.nutz.lang.Lang; import org.nutz.lang.Streams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Component public class CommonDocumentHelper { private static final Logger logger = LoggerFactory.getLogger(CommonDocumentHelper.class); public void toXlsxFileUsingJxls(List<?> list, String excelTemplatePathInClassPath, String outputFilePath) { //InputStream is = Streams.fileIn(excelTemplatePathInClassPath); InputStream is = this.getClass().getResourceAsStream(excelTemplatePathInClassPath); OutputStream os = Streams.fileOut(outputFilePath); Context context = new Context(); context.putVar("list", list); context.putVar("REPORT_DATE", new Date()); JxlsHelper jxlsHelper = JxlsHelper.getInstance(); Transformer transformer = jxlsHelper.createTransformer(is, os); JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig() .getExpressionEvaluator(); // evaluator.getJexlEngine().setSilent(true); // 设置静默模式,不报警告 Map<String, Object> funcs = new HashMap<String, Object>(); funcs.put("myutils", new JxlsUtils()); evaluator.getJexlEngine().setFunctions(funcs); // jxlsHelper.setUseFastFormulaProcessor(false); //与统计函数有关 try { jxlsHelper.processTemplate(context, transformer); } catch (IOException e) { logger.error("error when calling processTemplate:" + e, e); throw Lang.wrapThrow(e); } finally { Streams.safeClose(is); Streams.safeClose(os); } } public OutputStream toXlsxFileUsingJxls(Object header, List<?> list, String excelTemplatePathInClassPath) { //InputStream is = Streams.fileIn(excelTemplatePathInClassPath); InputStream is = this.getClass().getResourceAsStream(excelTemplatePathInClassPath); OutputStream os = new ByteArrayOutputStream(); Context context = new Context(); context.putVar("header", header); context.putVar("list", list); context.putVar("REPORT_DATE", new Date()); JxlsHelper jxlsHelper = JxlsHelper.getInstance(); Transformer transformer = jxlsHelper.createTransformer(is, os); JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig() .getExpressionEvaluator(); // evaluator.getJexlEngine().setSilent(true); // 设置静默模式,不报警告 Map<String, Object> funcs = new HashMap<String, Object>(); funcs.put("myutils", new JxlsUtils()); evaluator.getJexlEngine().setFunctions(funcs); // jxlsHelper.setUseFastFormulaProcessor(false); //与统计函数有关 try { jxlsHelper.processTemplate(context, transformer); } catch (IOException e) { logger.error("error when calling processTemplate:" + e, e); throw Lang.wrapThrow(e); } finally { Streams.safeClose(is); Streams.safeClose(os); } return os; } public OutputStream toXlsxFileUsingJxls(List<?> list, String excelTemplatePathInClassPath) { //InputStream is = Streams.fileIn(excelTemplatePathInClassPath); InputStream is = this.getClass().getResourceAsStream(excelTemplatePathInClassPath); OutputStream os = new ByteArrayOutputStream(); Context context = new Context(); context.putVar("list", list); context.putVar("REPORT_DATE", new Date()); JxlsHelper jxlsHelper = JxlsHelper.getInstance(); Transformer transformer = jxlsHelper.createTransformer(is, os); JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig() .getExpressionEvaluator(); // evaluator.getJexlEngine().setSilent(true); // 设置静默模式,不报警告 Map<String, Object> funcs = new HashMap<String, Object>(); funcs.put("myutils", new JxlsUtils()); evaluator.getJexlEngine().setFunctions(funcs); // jxlsHelper.setUseFastFormulaProcessor(false); //与统计函数有关 try { jxlsHelper.processTemplate(context, transformer); } catch (IOException e) { logger.error("error when calling processTemplate:" + e, e); throw Lang.wrapThrow(e); } finally { Streams.safeClose(is); Streams.safeClose(os); } return os; } }