如何从Excel的一列数据导入使用C#列表框(How to import data from one

2019-07-29 02:25发布

我有一个OpenFileDialog工具。 我会选择我的电脑上的Excel文件和我的程序读取列(例如A柱),写我的GUI列表框。 如何通过OLEDB做到这一点? 我在C#新。 如果您讲解详细,我会很高兴的一点。 谢谢您的帮助。

Answer 1:

为了使用OLEDB提供商成功,我们必须要考虑的几点。

  • 为Excel 2003文件的OLEDB提供者是从使用用于Excel 2007/2010文件的不同。 所以,我们要做的就是确定Excel文件格式,以便首先要选择正确的供应商。 在代码示例下面我简单地检查文件,以确定Excel文件格式的扩展。 请注意,有比较详细的方法来确定Excel文件格式(例如,通过神奇的字节)。

  • 要选择一个Excel工作表中的所有行,我们需要知道的Excel工作表的名称。 标准工作表名称是语言相关的,并且可以由用户进行重命名。 所以,我们需要一种方法来确定包含在Excel文件中的表是独立的(当然,独立改名张)语言的名称。 幸运的是, OleDbConnection类提供了一个名为方法GetOleDbSchemaTable这使我们能够得到一个Excel文件中的所有工作表名称。

  • 为Excel的OLEDB提供程序支持一种称为HDR扩展属性。 设置HDRYes指一个表的第一行包含列标题。 所以,如果你使用的列标题,你应该设置HDR=Yes

因此,要总结下面的代码示例执行下列操作(按钮点击):

  1. 决定根据文件扩展名的Excel文件类型。
  2. 选择基于Excel文件类型来构建连接字符串正确OLEDB提供商。
  3. 确定包含在Excel文件中的工作表名称。
  4. 选择第一表,选择在称为数据表中的所有行,并且存储的行mytable
  5. 显示一个列表框称为第一列的所有值listbox1

代码示例:

private static bool IsExcelXmlFileFormat(string fileName)
{
  return fileName.EndsWith("xlsx", StringComparison.OrdinalIgnoreCase);
}

private void button1_Click(object sender, EventArgs e)
{
  // Open your FileOpenDialog and let the user select a file...

  string fileName = "c:\\temp\\myexcelfile.xlsx";      

  OleDbConnectionStringBuilder connStringBuilder =
    new OleDbConnectionStringBuilder();

  connStringBuilder.DataSource = fileName;
  if (IsExcelXmlFileFormat(fileName))
  {
    // Set HDR=Yes if first row contains column titles.        
    connStringBuilder.Provider = "Microsoft.ACE.OLEDB.12.0";
    connStringBuilder.Add("Extended Properties", "Excel 8.0;HDR=NO;");        
  }
  else
  {
    connStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0";
    connStringBuilder.Add("Extended Properties", "Excel 8.0;");        
  }

  DataSet data = new DataSet();
  using (OleDbConnection dbConn = new OleDbConnection(connStringBuilder.ConnectionString))
  {
    dbConn.Open();

    DataTable sheets = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                

    using (OleDbCommand selectCmd = new OleDbCommand(
      String.Format("SELECT * FROM [{0}]", sheets.Rows[0]["TABLE_NAME"]), dbConn))
    {
      using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter())
      {
        dbAdapter.SelectCommand = selectCmd;           
        dbAdapter.Fill(data, "mytable");                       
      }
    }
  }

  // To enumerate all rows use the following code.
  // foreach (DataRow row in data.Tables["mytable"].Rows)
  // {
  //   Console.Out.WriteLine(row[0]);
  // }

  // Display the values of column 0 in a listbox called listBox1.
  listBox1.ValueMember = data.Tables["mytable"].Columns[0].ColumnName;
  listBox1.DisplayMember = data.Tables["mytable"].Columns[0].ColumnName;
  listBox1.DataSource = data.Tables["mytable"];             
}


文章来源: How to import data from one column of Excel to listbox using C#