【发布时间】:2016-08-10 11:43:19
【问题描述】:
背景
我有一个 Excel 文件 (xlxs),其中包含许多日期时间和小数,我想将其转换为二维字符串数组。数组中的字符串应该与用户在 Excel 中输入的字符串完全相同。为此,我将 NPOI 2.2.1 版与 C# 结合使用。
请注意,示例中的 A 列在 Excel 中被格式化为日期!
COLUMN A COLUMN B
2016-07-20 -46,95
2016-07-20 283,59
2016-07-20 -46,95
2016-07-20 52194,64
我有一个通用方法 ConvertCellToString() 可以将单元格转换为正确的字符串表示形式:
private string GetCellAsString(ICell cell)
{
switch (cell.CellType)
{
case CellType.Boolean:
return cell.BooleanCellValue.ToString();
case CellType.Error:
return cell.ErrorCellValue.ToString();
case CellType.Formula:
return cell.CellFormula.ToString();
//ALL CELLS IN THE EXEMPEL ARE NUMERIC AND GOES HERE
case CellType.Numeric:
return cell.NumericCellValue.ToString();
case CellType.String:
return cell.StringCellValue.ToString();
case CellType.Blank:
case CellType.Unknown:
default:
return "";
}
}
但是,由于即使是日期时间单元格也是数字单元格,此解决方案会导致以下所有日期错误地表示为数字而不是日期(“21672”而不是“2016-07-20”等)
下面的方法需要区分带有日期时间的数字单元格和带有数字的单元格。有没有办法用 NPOI 做到这一点?我宁愿不求助于解析字符串,特别是因为 NPIOs cell.ToString() 如果它是日期,则返回可怕的“2016-jan-20”格式。
我几乎被困在这里,非常感谢您的帮助!必须有一些明显的最佳实践,我只是找不到!
【问题讨论】:
-
应该注意的是,我无法控制 Excel 的格式。它们是从不同的客户发送给我们的,其中一些使用不同的格式,上述方法来自我们用来对所有 excel 进行字符串化的通用库。
-
DateUtils 有一个
public static bool IsCellDateFormatted(Cell cell)如果单元格是日期格式,则返回 true。我从未使用过 NPOI,但这也是使用 apache poi 执行此任务的方法。 -
谢谢,我去看看!
-
似乎成功了!如果您发布答案,我可以将其标记为正确的!
-
我无法发布 C# 代码,因为我从未编写过 C#。;-)。但是您可以使用解决此问题的确切代码来回答您自己的问题。这是一个常见的问题。所以这会有很大帮助。
标签: c# excel datetime npoi cell-formatting