J'utilise EPPlus et itérer dans toutes les colonnes de chaque feuille de calcul dans un classeur. J'essaye de formater chaque colonne avec un en-tête qui contient le mot "NUMBER" comme format numérique. Il s'exécute et il atteint le point d'arrêt où je définis le format numérique mais, lorsque j'ouvre la feuille de calcul, les colonnes sont toujours formatées en tant que texte. Toute aide serait grandement appréciée.Formulation de colonnes spécifiques à l'aide d'Epplus ne pas enregistrer
private void cleanSpreadSheet(string fileName)
{
// set all columns with a header of number to numeric type
FileInfo existingFile = new FileInfo(fileName);
var package = new ExcelPackage(existingFile);
ExcelWorkbook wb = package.Workbook;
foreach (ExcelWorksheet workSheet in wb.Worksheets)
{
var start = workSheet.Dimension.Start;
var end = workSheet.Dimension.End;
for (int col = start.Column; col <= end.Column; col++)
{ // col by col
if (workSheet.Cells[1, col].Text.ToUpper().Contains("NUMBER"))
{
workSheet.Column(col).Style.Numberformat.Format = "0";
}
}
}
package.Save();
package.Dispose();
wb.Dispose();
}
Si vous devez appeler Dispose sur un objet, qui est une odeur de code. Plus probablement, vous devriez utiliser un [using statement] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement). – mason
Je crois que ce que vous voulez faire est de définir le type de données de la colonne, pas définir le format. Je crois que EPPlus détermine cela en fonction du type de l'objet que vous définissez la valeur de la ligne égale à. Voir [cette question j'ai demandé] (https://stackoverflow.com/questions/23816043/epplus-date-cell-datatype-not-working) pour un exemple. – mason
Pour développer ce que @mason a dit, si le contenu de la cellule de classeur existant est "Texte", vous devrez probablement faire un int.Parse/double.Parse et remplacer le contenu de la cellule par "Numbers" – sfm