Je suis en train d'utiliser EPPlus 4.1, dernière version stable (J'ai également essayé la version 4.5.0.1-beta avec le même résultat).
Je cherche à fusionner plusieurs fichiers Excel (créés à l'aide d'EPPlus) en un seul fichier Excel avec plusieurs feuilles de calcul. Certaines feuilles de calcul peuvent contenir une mise en forme conditionnelle, que j'ai définie comme ci-dessous :
'Utilisation de columnCells en tant qu'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") 'vert clair
' Dim cond2 = columnCells.ConditionalFormatting.AddLessThan()
' cond2.Formula = "0.0"
' cond2.Style.Fill.BackgroundColor.Color = ColorTranslator.FromHtml("#F1CDB1") 'rouge clair
'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") 'vert clair
Dim cfRule2 = workSheetData.ConditionalFormatting.AddLessThan(cfAddress)
cfRule2.Formula = "0.0"
cfRule2.Style.Fill.BackgroundColor.Color = ColorTranslator.FromHtml("#F1CDB1") 'rouge clair
Les deux façons produisent le même résultat et fonctionnent bien pour les fichiers sources.
Ensuite, je fusionne ces fichiers en copiant les feuilles de calcul dans un nouveau fichier comme ci-dessous
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
La ligne _pckMaster.Save()
produit une erreur. Lorsque j'ai inspecté dans le débogueur la feuille de calcul du fichier source et la feuille de calcul du fichier de destination avant que cette ligne ne soit exécutée, j'ai vu l'image suivante :
Fichier source :
Fichier de destination :
Le nœud ConditionalFormatting dans la feuille de calcul a une exception après avoir ajouté une copie dans le nouveau fichier. Si le fichier source n'a aucune mise en forme conditionnelle, ajouter une copie d'une feuille de calcul d'un classeur à un nouveau classeur et enregistrer ce fichier fonctionne comme prévu.
Quelqu'un a-t-il rencontré le même problème? S'agit-il d'un bug? ou est-ce que je fais quelque chose de mal ici?
ConditionalFormatting '(New System.Linq.SystemCore_EnumerableDebugView(Of OfficeOpenXml.ExcelWorksheet)(_pckMaster.Workbook.Worksheets).Items(1)).ConditionalFormatting' a lancé une exception de type 'System.ArgumentOutOfRangeException' OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingCollection {System.ArgumentOutOfRangeException}
StackTrace
- System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
- OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingRule..ctor(eExcelConditionalFormattingRuleType type, ExcelAddress address, Int32 priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager)
- OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingGreaterThan..ctor(ExcelAddress address, Int32 priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager)
- OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingRuleFactory.Create(eExcelConditionalFormattingRuleType type, ExcelAddress address, Int32 priority, ExcelWorksheet worksheet, XmlNode itemElementNode)
- OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingCollection..ctor(ExcelWorksheet worksheet)
- OfficeOpenXml.ExcelWorksheet.get_ConditionalFormatting()