C# NPOI-从模板创建新excel时条件格式不起作用

C# NPOI-从模板创建新excel时条件格式不起作用,c#,excel,npoi,C#,Excel,Npoi,代码: 从上面我可以从模板文件创建excel工作表 但是对于模板Excel文件,我有一些条件格式规则,并根据这些规则应用一些格式和填充颜色 这些格式和颜色不会出现在创建的excel文件中,但我可以在签入条件格式但未应用格式时看到规则 NPOI中存在一个缺陷,即当它写出xlsx文件的style.xml部分时,会添加属性fillPattern=“none”(而不是实心,或缺少此属性),这导致没有填充。我已经复制了这一点,并通过打开生成的xlsx文件并从相应节点中删除该属性手动修复 也就是说,有一个

代码:

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

但是对于模板Excel文件,我有一些条件格式规则,并根据这些规则应用一些格式和填充颜色

这些格式和颜色不会出现在创建的excel文件中,但我可以在签入条件格式但未应用格式时看到规则


NPOI中存在一个缺陷,即当它写出xlsx文件的style.xml部分时,会添加属性
fillPattern=“none”
(而不是实心,或缺少此属性),这导致没有填充。我已经复制了这一点,并通过打开生成的xlsx文件并从相应节点中删除该属性手动修复

也就是说,有一个简单的解决办法。在模板电子表格中,不要使用“纯色”填充。选择一个图案,或者创建一个“双色”图案并选择相同的两种颜色。这将以不同的方式写入文件,使用
gradientFill
节点,该节点没有此错误

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


应该有人向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文件时缺少excel扩展名。

也可以使用SoftwareJEDI解决方案。我已经测试过了,正在工作。

是打算对电子表格的内容做些什么,还是只是复制它?工作表就像一个报告,我们已经将公式应用到电子表格单元格。因此,当复制公式时,应该将公式应用到新文件中。感谢您的努力,刚才注意到,我今天早上会试试,然后告诉你。再次感谢。文件名是该方法的一个参数,此输入是带有扩展名的文件名。谢谢
 string filePath = AppDomain.CurrentDomain.BaseDirectory + "" + "App_Data\\" + filename+ ".xlsx";