使用Epplus格式化特定列不保存

我正在使用EPPlus并遍历工作簿中每个工作表的所有列。 我试图用包含单词“NUMBER”作为数字格式的标题格式化每一列。 它运行,并在设置数字格式的断点处打开,但是,当我打开电子表格时,列仍被格式化为文本。 任何帮助将非常感激。

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(); } 

问题可能是您现有的Excel工作簿的数据格式为Excel“文本”。 如果是这种情况,您不可能简单地将每个单元格的格式转换为数字,因为Excel不知道如何将“文本”转换为“数字”。

相反,您可能需要迭代EPPlus中的每个列和行,并在转换每个值之后replace每个值。 下面的代码可以使用一些错误检查的演员,但给你一个概念的感觉。

//foreach row ... foreach column... ExcelRange cell = worksheet.Cells[row, col]; cell.Value = double.Parse((string)cell.Value);