我使用 EPPlus 4.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
行_pckMaster.Save()
产生错误。
当我在调试器中检查源文件的工作表和目标文件的工作表之前执行该行时,我看到了以下图片:
源文件:
目标文件:
在我们将副本添加到新文件后,工作表中的ConditionalFormatting节点有一个例外。如果源文件没有任何条件格式,请将一个工作簿的精简表副本添加到新工作簿,并保存该文件按预期工作。
有没有人有同样的问题?这是一个错误吗?或者我在这里做错了什么?
ConditionalFormatting'(New System.Linq.SystemCore_EnumerableDebugView(Of OfficeOpenXml.ExcelWorksheet)(_ pckMaster.Workbook.Worksheets).Items(1))。ConditionalFormatting'抛出了类型' System.ArgumentOutOfRangeException' OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingCollection {System.ArgumentOutOfRangeException}
栈跟踪
答案 0 :(得分:0)
对于感兴趣的任何人,我已经在最新的EPPlus版本中对此进行了更正。参见Github上的第464期。也被称为问题266。