Multisheet和JxlsHelper #setDeleteTemplateSheet

时间:2017-01-07 18:39:18

标签: jxls

我正在使用mutlisheet从XLSX-Template生成多个工作表。 它可以工作,但生成的Excel文件包含(除了生成的工作表)模板工作表。 我找到了方法JxlsHelper#setDeleteTemplateSheet,但它似乎没有任何影响。

代码:

try (InputStream template = ...;
    OutputStream out = ...) {

    Context context = new Context();
    context.putVar(...);
    JxlsHelper.getInstance().setDeleteTemplateSheet(true).processTemplate(template, out, context);
}

2 个答案:

答案 0 :(得分:0)

同样的问题:

JxlsHelper.getInstance().setUseFastFormulaProcessor(false).setDeleteTemplateSheet(true).processTemplate(is, os, context);

没用。找到解决方法:

Workbook templ = WorkbookFactory.create(is);
PoiTransformer transformer = PoiTransformer.createTransformer(templ);
AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
List<Area> areaList = areaBuilder.build();
Area xlsArea = areaList.get(0);
xlsArea.applyAt(new CellRef("Sheet!A1"), context);
templ.removeSheetAt(0);
templ.write(os);

答案 1 :(得分:0)

也许自定义JxlsHelper扩展了官方JxlsHelper.class并覆盖了方法JxlsHelper#processTemplate(Context context,Transformer Transformer)是一种策略, 像这样的代码:

    void Main()
{
     List<int> list = new List<int>(new int[]{ 1,2,3,4,5,6,7 });
    try
    {
        Parallel.ForEach<int>(list, i => PrintEven(i));
    }
    catch(AggregateException ex)
    {
        Console.WriteLine( ex);
    }
}

private static void PrintEven(int data)
{
    try
    {
        if(data%2 != 0)
        {
            throw new Exception($" {data} Not Even");
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
        throw;
    }
}

然后,使用自定义的jxlsHelper替换官方的JxlsHelper。它有效!