【发布时间】:2017-07-13 09:27:42
【问题描述】:
我正在使用 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();
}
【问题讨论】:
-
如果您必须对对象调用 Dispose,那就是代码异味。更有可能的是,您应该使用using statement。
-
我相信您要做的是设置列的数据类型,而不是设置格式。我相信 EPPlus 会根据您将行的值设置为等于的对象的类型来确定。有关示例,请参见 this question I asked。
-
要扩展@mason 所说的内容,如果现有工作簿单元格内容是“文本”,您可能需要执行 int.Parse / double.Parse 并将单元格内容替换为“数字” "
-
@sfm - 这意味着我必须遍历行并更改列中的每个单元格,对吧?
-
@Missy - 这就是我的想法,但我还没有测试它是否是问题所在。您可能还应该使用 double.TryParse 或在每一行的每个类型转换周围使用 try/catch。