【发布时间】:2020-10-09 18:27:50
【问题描述】:
在 c# 中使用 ExcelDataReader 读取 excel 工作表数据时遇到问题。 我正在从 excel-sheet(.xlsm) 读取数据 其中一个单元格有一个可供选择的值列表。
例如。
5.1
5.2
5.1a
当我选择值 5.2 或 5.1a 并读取时,我在数据集中得到完全相同的值
但是当我选择 5.1 并阅读时,我在数据集中得到 5.0999999999999996
这是我用来读取c#数据的代码,
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
DataSet findingsData = excelReader.AsDataSet();
注意: 作为一种解决方法,我在单元格中的值 5.1 之后放置了一个空格。然后它读取的值与预期完全相同(5.1 而不是 5.0999999999999996)。
但我想知道,当它在不应用任何空间的情况下读取完全相同的值 5.2 时,为什么不适用于 5.1?
欢迎任何建议来解决这个问题...
谢谢,
卡提克
【问题讨论】:
-
问题是由于excel中的单元格是通用格式。 General Format 到 Excel 的界面必须猜类型,猜错。根本原因在于驱动程序。两个 excel 驱动程序是 Jet 或 ACE。
-
@jdweng 我不认为他正在使用任何这个驱动程序......而是openxml......所以根本原因是,这就是数据存储在XML中的方式
-
只需打开 7zip 中的 xlsx 文件并检查 xl\worksheets\sheet1.xml
-
@Selvin:xlsm 文件不是 Open Xml。 Jet 或 Ace 是 Excel 数据库。 Excel 是一个前端应用程序,它使用 Jet 或 Ace 作为后端数据库。
-
xlsm 是带有宏的 xlsx