【问题标题】:Importing Excel Data to Datatable By converting Cell values to string format通过将单元格值转换为字符串格式将 Excel 数据导入数据表
【发布时间】: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


【解决方案1】:

如果您还没有这样做,您可以尝试使用 Worksheet.Cell[x,y].Text 获取单元格的内容 这会强制输出为字符串文字,因此它会在阅读时跳过截断

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2014-05-15
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多