【发布时间】:2020-11-04 09:27:27
【问题描述】:
我想有效地遍历 Excel 表到 DataGridView。如何修改以下代码片段: (string.Format("Select * From [{0}$]", s) 以循环第一个 Excel-Sheet(Excel1.xls) 中的表?这是我的代码到目前为止。我很感激任何建议!
TextBox textBox1 = new TextBox();
TextBox textBox2 = new TextBox();
textBox1.Text = @"C:\Users\Desktop\Test\Excel1.xls";
string[] s;
s = new string[2] { "Table1", "Table2" };
String constr = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" +
textBox1.Text + " ; Extended Properties =\"Excel 8.0; HDR=Yes;\";";
OleDbConnection con = new OleDbConnection(constr);
for (int i = 0; i < s.Length; i++)
{
if (s[0] == "Table1")
{
OleDbDataAdapter sda = new OleDbDataAdapter(string.Format("Select * From [{0}$]", s), con);
DataTable data = new DataTable();
sda.Fill(data);
dataGridView1.DataSource = data;
//condition1...
}
for (int j = 0; j < s.Length; j++)
{
if (s[1] == "Table2")
{
OleDbDataAdapter sda = new OleDbDataAdapter(string.Format("Select * From [{1}$]", s), con);
DataTable data = new DataTable();
sda.Fill(data);
dataGridView1.DataSource = data;
//condition2...
}
}
}
【问题讨论】:
-
excel 中的工作表是 oleDb 库中的表格,工作表名称末尾有一个美元符号:From [" + textBox2.Text + "$]。因此,要遍历工作表,您需要将 textBox.Text 的值更改为每个工作表名称。
-
谢谢你!是否应该在 foreach 循环之前进行更改?
-
无论你如何实现,只要你得到每张纸。
-
您想做的事情似乎脱节了。对于初学者,代码似乎覆盖了
dataGridView1中先前阅读的工作簿。因此,网格将仅包含数组中的最后一个工作簿。这很尴尬,我猜您可能想将每个DataTable放入DataSet?下一个有问题的代码……textBox1.Text = @"C:\Users\Desktop\Test\" + ExcelSheet;???ExcelSheet是一个字符串数组string[]……代码不应该是……textBox1.Text = @"C:\Users\Desktop\Test\" + s;? -
嗨,jdweng 和 JohnG。对于迟到的回复,我深表歉意。它背后的想法要大得多。在 TexBox 中输入搜索词后,将在 ExcelSheets 中执行搜索。在一个或两个 ExcelSheets 中找到的搜索词应显示在 ListBox 中。我担心找到一种方法来循环遍历 Excel 表格。我不得不承认,如果它有效,我对此仍有一些疑问。但是,我要感谢您的所有评论!
标签: c# excel datagridview