尝试读取excel文件时缺少数据在c#中使用OleDb

时间:2017-08-10 11:15:06

标签: c# excel

当我尝试在C#中读取Excel文件时出现问题

for(int k = 0; k < number_of_l_steps; k++)
  {

    if(k == 0)
      std::ofstream out("outputk0.txt", ios::out);
    else
      std::ofstream out("outputnotk0.txt", ios::out);

    for(int i = 0; i < n_k; i++)
    {
      cout << i << endl;
      double k = exp( log(kmin1) + i*(log(kmax) - log(kmin1))/(n_k-1.));
      for(int j = 0; j < n_z; j++)
      {
         double z = zmin + j*(zmax - zmin)/(n_z-1.);
      //  cout << k << " " << z << endl;
        out << i << " " <<  j <<  " " << cv.U(z,k) << endl;
        //out << i << " " << j << " " << gsl_matrix_get(Gl,i,j) << endl;
      }
    }
    out.close();
  }

但它只显示部分数据。我附上了图片。

2 个答案:

答案 0 :(得分:1)

它读取前几条记录并确定该列是整数类型,当它找到非整数类型的数据时失败。

您需要将HDR = No设置为连接字符串中的属性并且IMEX = 1

答案 1 :(得分:0)

之前我遇到了同样类型的问题,无论连接字符串中的设置如何,我仍然缺少列数据。为了解决这个问题,我最终使用了开源ExcelDataReader.DataSet nuget包(https://github.com/ExcelDataReader/ExcelDataReader),它可以在不使用oledb驱动程序或安装了excel的情况下读取Excel文件。

以下代码应该适合您,因为我使用您的示例数据创建了.xls和.xlsx,并且返回的数据集包含所有值。 ExcelDataReader还将检测它是否为.xls或.xlsx。

       var filePath = txtExcelFile.Text;

        using (var stream = File.Open(filePath,FileMode.Open,FileAccess.Read))
        {
            using (var reader = ExcelReaderFactory.CreateReader(stream))
            {
                var ds = reader.AsDataSet();
            }

            dataGridView1.DataSource = ds.Tables[0].DefaultView;
        }