.net EPPlus-使用条件格式复制工作表时出错

.net EPPlus-使用条件格式复制工作表时出错,.net,epplus,conditional-formatting,worksheet,.net,Epplus,Conditional Formatting,Worksheet,我正在使用最后一个稳定的版本&epplus4.1(也尝试了4.5.0.1-beta版,结果相同) 我正在尝试将几个excel文件(使用EPPlus创建)合并到一个包含多个工作表的excel文件中。一些工作表可能包含条件格式,我设置如下: 'Using columnCells As ExcelRange = workSheetData.Cells(headerLevels + 2, c + 1, workSheetData.Dimension.End.Row + 1, c + 1) 'header

我正在使用最后一个稳定的版本&epplus4.1(也尝试了4.5.0.1-beta版,结果相同)

我正在尝试将几个excel文件(使用EPPlus创建)合并到一个包含多个工作表的excel文件中。一些工作表可能包含条件格式,我设置如下:

'Using columnCells As ExcelRange = workSheetData.Cells(headerLevels + 2, c + 1, workSheetData.Dimension.End.Row + 1, c + 1) 'headerLevels + 2
'    Dim cond1 = columnCells.ConditionalFormatting.AddGreaterThan()
'    cond1.Formula = "0.0"
'    cond1.Style.Fill.BackgroundColor.Color = ColorTranslator.FromHtml("#CBDEB7") 'light green

'    Dim cond2 = columnCells.ConditionalFormatting.AddLessThan()
'    cond2.Formula = "0.0"
'    cond2.Style.Fill.BackgroundColor.Color = ColorTranslator.FromHtml("#F1CDB1") 'light red
'End Using

Dim cfAddress As New ExcelAddress(headerLevels + 2, c + 1, workSheetData.Dimension.End.Row + 1, c + 1)
Dim cfRule1 = workSheetData.ConditionalFormatting.AddGreaterThan(cfAddress)
cfRule1.Formula = "0.0"
cfRule1.Style.Fill.BackgroundColor.Color = ColorTranslator.FromHtml("#CBDEB7") 'light green

Dim cfRule2 = workSheetData.ConditionalFormatting.AddLessThan(cfAddress)
cfRule2.Formula = "0.0"
cfRule2.Style.Fill.BackgroundColor.Color = ColorTranslator.FromHtml("#F1CDB1") 'light red
这两种方法都会产生相同的结果,并且对源文件来说效果很好

然后,我通过将工作表复制到新文件中来合并这些文件,如下所示

Dim fileInfoMaster As New System.IO.FileInfo(filePath)
Using _pckMaster As New ExcelPackage(fileInfoMaster)

    For i As Integer = 0 To masterWorkbookParams.ListOfFileNames.Count() - 1
        filePath = folderPath & masterWorkbookParams.ListOfFileNames(i) & ".xlsx"
        If System.IO.File.Exists(filePath) Then
            Dim fileInfo As New System.IO.FileInfo(filePath)
            Using _pck As New ExcelPackage(fileInfo)

                Dim NewWorksheet As ExcelWorksheet = _pckMaster.Workbook.Worksheets.Add(masterWorkbookParams.ListOfSheetNames(i), _pck.Workbook.Worksheets(1))

            End Using
        End If
    Next i

    _pckMaster.Save()
End Using
\u pckMaster.Save()
产生错误。 在执行该行之前,当我在调试器中检查源文件的工作表和目标文件的工作表时,我看到以下图片:

源文件:

目标文件:

将副本添加到新文件后,工作表中的条件格式节点出现异常。如果源文件没有任何条件格式,请将工作表副本从一个工作簿添加到新工作簿,并按预期保存该文件

有人有同样的问题吗?是虫子吗?还是我做错了什么

ConditionalFormat'(New System.Linq.SystemCore_EnumerableDebugView(OfficeOpenXml.EXCELWORKEM)(_pckMaster.Workbook.Worksheets).Items(1))。ConditionalFormat'引发了类型为'System.ArgumentOutOfRangeException'OfficeOpenXml.ConditionalFormat.ExcelConditionalFormattingCollection{System.ArgumentOutOfRangeException}的异常

堆栈跟踪

  • System.ThrowHelper.ThrowArgumentOutOfRangeException(异常参数,异常资源)
  • OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingRule..ctor(EEExcelConditionalFormattingRuleType、ExcelAddress地址、Int32优先级、ExcelWorksheet工作表、XmlNode itemElementNode、XmlNamespaceManager namespaceManager)
  • OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingGreaterThan..ctor(ExcelAddress地址、Int32优先级、ExcelWorket工作表、XmlNode itemElementNode、XmlNamespaceManager namespaceManager)
  • OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingRuleFactory.Create(eExcelConditionalFormattingRuleType,ExcelAddress地址,Int32优先级,ExcelWorket工作表,XmlNode itemElementNode)
  • OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingCollection..ctor(Excel工作表)
  • OfficeOpenXml.ExcelWorksheet.get_条件格式()

对于任何感兴趣的人,我已经在最新的EPPlus版本中对此进行了更正。参见Github上的第464期。也被称为问题#266。

您可能需要检查您是否正在复制重复的条件格式rules@YahyaHussein是的,我还尝试使用一个条件规则为单个单元格设置条件格式。结果是一样的,将此工作表复制到新工作簿后,保存该文件时出错。@AlexeyPolyanichko找到解决方案了吗?“我现在也有同样的问题,似乎找不到解决的办法。”凯文:不,问题仍然存在(