我有一个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扩展属性。 设置
HDR
对Yes
指一个表的第一行包含列标题。 所以,如果你使用的列标题,你应该设置HDR=Yes
。
因此,要总结下面的代码示例执行下列操作(按钮点击):
- 决定根据文件扩展名的Excel文件类型。
- 选择基于Excel文件类型来构建连接字符串正确OLEDB提供商。
- 确定包含在Excel文件中的工作表名称。
- 选择第一表,选择在称为数据表中的所有行,并且存储的行
mytable
。 - 显示一个列表框称为第一列的所有值
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#