NPOI-从模板创建新的Excel时,条件格式无法正常工作

时间:2018-08-03 12:24:09

标签: c# excel npoi

代码:

 private static void CreateExcel(string filename)
        {

            var workbook = new XSSFWorkbook();
            try
            {
                var sourcebook = AppDomain.CurrentDomain.BaseDirectory + "" + "\\App_Data\\Copy of VHC_modified_Report.xlsx";
                using (FileStream file = new FileStream(sourcebook, FileMode.Open, FileAccess.ReadWrite))
                {
                    workbook = new XSSFWorkbook(file);
                }
                XSSFFormulaEvaluator evaluator = new XSSFFormulaEvaluator(workbook);
                // evaluator.EvaluateAll();
                string filePath = AppDomain.CurrentDomain.BaseDirectory + "" + "App_Data\\" + filename;
                using (var fileData = new FileStream(filePath, FileMode.CreateNew, FileAccess.ReadWrite))
                {
                    workbook.Write(fileData);
                    workbook.Close();
                }

            }
            catch (Exception ex)
            {
                throw new Exception("ExportToExcel: \n" + ex.Message);
            }

        }

从上面我可以从模板文件创建Excel工作表。

但是在Template Excel文件中,我有一些条件格式设置规则,并且基于应用某些格式和填充颜色的规则。

Template file conditional formatting

这些格式和颜色未显示在创建的excel文件中,但是当我签入条件格式但未应用格式时,我能够看到规则。

Created excel file

2 个答案:

答案 0 :(得分:2)

NPOI中存在一个错误,即当它写出xlsx文件的styles.xml部分时,会添加属性fillPattern="none"(而不是固定的或缺少此属性),从而导致没有空。我已经复制了此文件,并通过打开生成的xlsx文件并从适当的节点中删除该属性来手动修复。

也就是说,有一个简单的解决方法。在模板电子表格中,请勿使用“纯色”填充。选择一种图案,或创建“两种颜色”图案,然后选择相同的2种颜色。这样会使用gradientFill节点以不同的方式写出文件,该节点没有此错误。

此外,前景色规则也可以正常工作。这似乎只影响纯色背景条件格式设置规则。

enter image description here

有人应将此错误报告给NPOI团队。不幸的是,我现在无法执行此操作。

答案 1 :(得分:1)

在代码中替换以下内容

 string filePath = AppDomain.CurrentDomain.BaseDirectory + "" + "App_Data\\" + filename+ ".xlsx";  

您在创建excel文件时错过了excel扩展名。
还要使用TheSoftwareJedi解决方案。我已经测试过,可以正常工作。