2

我正在尝试将 Excel 工作表数据读取到数据表以绑定到 GridView。我的 Excel 表包含如下数据,

ID    Value1                    Value2
-------------------------------------------------
1     $312976.97530297          $30790.0614862584
etc

我正在使用以下代码将值读取到数据表中。

DataTable table = new DataTable();
string filePath = @"D:\Book1.xlsx";
string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", filePath);
using (OleDbConnection dbConnection = new OleDbConnection(strConn)) 
{
using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT ID, value1,value2  FROM [Sheet1$]", dbConnection))
dbAdapter.Fill(table);
}

问题:由于 value1 和 value2 包含 $ 符号,dataAdaptor 检索两个值都没有完全精度,即。而不是 312976.97530297,它只返回 312976.9753。

Note: 
1. I cannot change the input Excel sheet since the enduser will upload it to the web site.
2. If i remove the $ symbol in the excel sheet, it will return the full precision, but $ also present in the input sheet.
3. I tried using Microsoft.Office.Interop.Excel and its working, but the performance is very low.


Or I can format all the excel cell as Text/General type before filling to the datatable, Anyone knows how to do that?

请建议一种使用 OleDbDataAdapter 的方法。

在此先感谢,威尔逊。

4

2 回答 2

0

也许你应该试试http://epplus.codeplex.com/releases/view/79802。它可以非常快速地读取数据,至少与互操作相比。此外,互操作对于 Web 服务来说不够可靠。

对于您的问题:也许有一种方法可以逃避“$”

Microsoft 建议在货币的情况下使用 double 或 float 数据类型。你使用什么格式?

于 2012-08-09T14:02:06.327 回答
0

@All,
最后我以一种复杂的方式完成了它:),
1.在使用互操作上传后将所有 excel 列格式化为通用类型
2.使用 oledbadaptor 将 excel 读取到数据表中。(现在我得到了完整的精度tatatable,因为单元格类型是通用的)
3. 现在我将数据表行类型转换为字符串,因为我需要使用 UDT 将数据表值插入 SQL 表(不转换我们也会在这里丢失精度)

无论如何,它现在工作正常(总是欢迎另一种方法:))威尔兹......

于 2012-09-07T11:14:00.607 回答