在c#.net中逐单元格读取excel文件
我是在c#.net中逐单元格读取excel文件,c#,database,excel,import,C#,Database,Excel,Import,我是c#net的新手 我有excel工作表,我想导入数据库 this.openFileDialog1.FileName = "*.xls"; DialogResult dr = this.openFileDialog1.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { string path = openFileDi
c#net的新手
我有excel工作表,我想导入数据库
this.openFileDialog1.FileName = "*.xls";
DialogResult dr = this.openFileDialog1.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
string path = openFileDialog1.FileName;
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
string query = String.Format("select * from [{0}$]", "Sheet3");
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
dataGridView1.DataSource = dataSet.Tables[0];
我想一个单元格一个单元格地读取它,并想在数据库中插入值
this.openFileDialog1.FileName = "*.xls";
DialogResult dr = this.openFileDialog1.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
string path = openFileDialog1.FileName;
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
string query = String.Format("select * from [{0}$]", "Sheet3");
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
dataGridView1.DataSource = dataSet.Tables[0];
查看NPOI
它是Apache的POI Excel实现的.NET版本。它可以轻松完成您需要它完成的任务,并有助于避免您在使用Jet提供程序时遇到的一些问题(即Excel的本地副本,或者更糟的是,服务器上的Excel副本)。我假设在您执行问题中的代码后,您可以看到dataGridView1
中的值
调用dataAdapter.Fill
时,将完成对excel工作表的实际读取。因此,在您的例子中,读取单元格归结为对dataSet.Tables[0]
中的列和行进行索引
例如:
for (int row = 0; row < dataSet.Tables[0].Rows.Count; row++)
{
DataRow r = dataSet.Tables[0].Rows[row];
}
然后,使用连接字符串创建并打开一个新的SqlConnection
:
using (SqlConnection conn = new SqlConnection(csb.ConnectionString))
{
conn.Open();
迭代所有要插入的值并执行相应的插入命令:
for (...)
{
SqlCommand cmd = new SqlCommand("INSERT INTO ... VALUES (@param1, ..., @paramn)", conn);
cmd.Parameters.AddWithValue("@param1", value1);
...
cmd.Parameters.AddWithValue("@paramn", valuen);
cmd.ExecuteNonQuery();
}
当using
块结束时,这将关闭连接:
}
就这样。或者,您可以使用带有特殊insert命令的数据适配器。然后,插入值将归结为一行,但是,数据库表必须具有与Excel表相同的结构(分别是:作为您在发布的代码中获得的数据表。您能否提供一些关于上述代码的详细信息?它也不是一个完整的代码示例,没有提供if块的结尾,也没有后面发生的任何事情。您已经告诉了您想要什么。现在问题是什么?您有数据集,只需列举b行即可按y行和单元格逐个计算,并执行所需操作遍历数据集所需的操作。表[0]并获取每行中每个单元格的值以查找值,然后您可以通过编写另一个insert函数将其放入数据库。这是您想要的吗?若需要,我可以提供代码。在这种情况下,您可能应该学习c的教程,当通过ODBC驱动程序访问Excel表时,不需要安装Excel。公平够了,但是ODBC驱动程序有一些非常糟糕的部分,比如类型推断。最终,ODBC驱动程序推断类型是否错误或者Excel是否错误并不重要,但是我必须承认,有了Excel,微软已经在错误的类型推断上包装了一个非常好的GUIRTA真正的问题是:您在问题中发布的代码是否在DataGridView
中显示了任何内容?如果是,请按照我在回答中所说的做,并在行和列之间进行迭代。DataGridView它仅用于我的引用您可以通过行[cellIndex]访问DataRow
中单个列的值
或行[“columnName”]
。请参阅文档: