【问题标题】:Excel cell-values are truncated by OLEDB-providerExcel 单元格值被 OLEDB-provider 截断
【发布时间】:2010-10-28 06:20:24
【问题描述】:

我正在使用 OleDbConnection 类从 Excel 2000/2003 工作簿中检索数据:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                          "Data Source=" + filename + ";" +
                          "Extended Properties=\"Excel 8.0;IMEX=1\";";

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

// code to get table name from schema omitted

var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");

现在事实证明,工作表中长度大于 255 个字符的单元格将被截断。这是 Microsoft.Jet.OLEDB 提供程序的限制,还是我可以做些什么?

有人吗?

【问题讨论】:

    标签: .net excel oledb oledbconnection


    【解决方案1】:

    Excel 的 OLEDB 提供程序将尝试根据前 8 行数据自动确定数据类型,这可以使用连接字符串中的 HDR=Yes/No 属性进行设置。此外,还有多种类型可以应用于文本列。备忘录类型包含超过 255 个字符,因此如果前 8 行都没有,那么它将错误地设置数据类型。

    更改此设置的方法是更改​​名为 TypeGuessRows 的注册表设置,如下所述:Microsoft Support

    注意:TypeGuessRows 键值的有效范围是 0 到 16。但是,如果值为 0,则扫描的源行数为 16384。因此,如果您有一个非常大的文件,请确保最大的行数是首先。

    【讨论】:

    • 谢谢。这是一个有点丑陋的解决方案,因为我的安装程序将不得不修改用户的注册表,但我希望它会起作用。只要管理员运行安装程序..
    • 我不明白这里的微软建议/如果你把它改成 16 不是只检查前 16 行吗??
    • @ooo 如果将其更改为 0,则它会扫描所有行。不过要小心,因为这可能会对较大的表产生性能影响。
    • @rmoore:我已在注册表中将其更改为 0。但是,它仍然在 255 处截断。我需要重新启动机器吗?还是其他问题?
    • 如果您不想弄乱注册表,只需在 Excel 表的开头插入一个虚拟行,该行在每列中包含超过 255 个字符,它也可以工作。在您的程序逻辑中,您在插入/更新或执行其他操作时会忽略虚拟行。
    【解决方案2】:

    试试这个OleDBAdapter Excel QA我通过堆栈溢出发布的。

    我填充了一个包含 445 个字符的工作表单元格 (Rows[0][4]),它运行良好... 将此添加到输出代码的末尾

    // DataSet:          
    Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2];
    Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4];
    
    string rowZeroColumn3 = row0Col3.ToString();
    string rowZeroColumn4 = row0Col4.ToString();
    
    Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);           
    

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2018-06-14
      • 2015-07-16
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多