使用 Epplus 格式化特定列不保存
Formating Specific Columns Using Epplus Not Saving
我正在使用 EPPlus 并循环访问工作簿中每个工作表的所有列。我正在尝试使用包含单词 "NUMBER" 的 header 将每一列格式化为数字格式。它运行并到达我设置数字格式的断点,但是当我打开电子表格时,列的格式仍然为文本。非常感谢任何帮助。
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 "Text"。如果是这种情况,您将无法简单地将每个单元格的格式转换为数字,因为 Excel 不知道如何将 "Text" 转换为 "Numbers"。
相反,您可能需要遍历 EPPlus 中的每一列和每一行,并在转换后替换每个值。下面的代码可以对转换进行一些错误检查,但可以让您了解这个概念。
//foreach row ... foreach column...
ExcelRange cell = worksheet.Cells[row, col];
cell.Value = double.Parse((string)cell.Value);
我正在使用 EPPlus 并循环访问工作簿中每个工作表的所有列。我正在尝试使用包含单词 "NUMBER" 的 header 将每一列格式化为数字格式。它运行并到达我设置数字格式的断点,但是当我打开电子表格时,列的格式仍然为文本。非常感谢任何帮助。
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 "Text"。如果是这种情况,您将无法简单地将每个单元格的格式转换为数字,因为 Excel 不知道如何将 "Text" 转换为 "Numbers"。
相反,您可能需要遍历 EPPlus 中的每一列和每一行,并在转换后替换每个值。下面的代码可以对转换进行一些错误检查,但可以让您了解这个概念。
//foreach row ... foreach column...
ExcelRange cell = worksheet.Cells[row, col];
cell.Value = double.Parse((string)cell.Value);