代码之家  ›  专栏  ›  技术社区  ›  Tor Haugen

Excel单元格值被OLEDB提供程序截断

  •  13
  • Tor Haugen  · 技术社区  · 17 年前

    我正在使用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-provider中的一个限制,还是我可以对此做些什么?

    任何人

    2 回复  |  直到 17 年前
        1
  •  20
  •   Community Mohan Dere    13 年前

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

    Microsoft Support

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

        2
  •  2
  •   Community Mohan Dere    9 年前

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

    我填充了一个包含445个字符的工作表单元格(行[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);           
    
    推荐文章