0

我正在尝试使用 OLEDB 将数据从 excel 获取到数据集中,但我没有将 excel 中的所有行都获取到数据集中。我在 excel 表中有 243300 行,但在数据集表中只有 44401 行。

这是我正在使用的代码:

public DataSet GetDataSet(string SheetName)  
{
        string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath.Text + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=0;TypeGuessRows=0'";
        OleDbConnection conExcel = new OleDbConnection(connectionString);
        conExcel.Open();
        OleDbCommand cmd1 = new OleDbCommand("Select * from [" + SheetName + "$]", conExcel);
        int cnt=  cmd1.ExecuteNonQuery();
        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter(cmd1);
        conExcel.Close();
        da.Fill(ds, "Table");
        return ds;
    } 
4

1 回答 1

0

您使用数据集表的代码是什么?

为什么不尝试这样的事情(未更新以匹配您的变量名,这是我自己程序中的一个示例):

            int worksheetNumber = 1;
            var cnnStr2 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", exExcel);
            var cnn2 = new OleDbConnection(cnnStr2);

            // get schema, then data
            var dt2 = new DataTable();
            try
            {
                cnn2.Open();
                var schemaTable2 = cnn2.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                if (schemaTable2.Rows.Count < worksheetNumber)
                {
                    throw new ArgumentException("The worksheet number provided cannot be found in the spreadsheet");
                }
                string worksheet = schemaTable2.Rows[worksheetNumber - 1]["table_name"].ToString().Replace("'", "");
                string sql2 = String.Format("select * from [{0}]", worksheet);
                var da2 = new OleDbDataAdapter(sql2, cnn2);
                da2.Fill(dt2);
            }
            catch (Exception ex)
            {
                // ???
                throw ex;
            }
            finally
            {
                // free resources
                cnn2.Close();
            }

希望这至少会给您一些参考,以帮助您解决您的情况。

于 2013-06-25T18:08:19.927 回答