【发布时间】:2019-07-11 20:00:35
【问题描述】:
我正在尝试将 excel 文件读取到数据表中,并且我已成功获取数据,但是在将数据读取到数据表时十进制值会被截断
所以,如果我的单元格值为 64.00,我将在数据表中得到 64 而不是 64.00。
我尝试将 excel 单元格值格式化为文本,但没有成功。
下面是我正在处理的代码。
public static DataTable GetDataTableFromCsv(string path, bool
isFirstRowHeader)
{
string header = isFirstRowHeader ? "Yes" : "No";
string pathOnly = System.IO.Path.GetDirectoryName(path);
string fileName = System.IO.Path.GetFileName(path);
string sql = @"SELECT * FROM [" + fileName + "]";
using (OleDbConnection connection = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
";Extended Properties=\"Text;HDR=" + header + "\""))
using (OleDbCommand command = new OleDbCommand(sql, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
DataTable dataTable = new DataTable();
dataTable.Locale = CultureInfo.CurrentCulture;
adapter.Fill(dataTable);
return dataTable;
}
}
【问题讨论】:
-
我没有尝试过,但您可以尝试使用列和数据类型构建数据表,而不是让适配器生成它。如果你将该列设为十进制类型,那么它可能会起作用。
-
@Steve,可以与 Excel 上的 Jet 提供程序一起使用吗?
-
@Crowcoder 是的,它是利用 schema.ini 文件的底层 TextDriver。当然使用普通文本文件(CSV 或固定格式)而不是二进制 excel 文件
标签: c# excel datatable oledb c#-3.0