阅读Excel文件通过细胞
我是新来c#.net
阅读Excel文件通过细胞
我有Excel工作表,我想导入到database
。
我想逐个读取它并希望在database
中插入值。
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];
我假设在您执行问题中的代码后,您可以看到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];
}
访问在r
行细胞是微不足道的(如上面的示例,只为小区)。
编辑
我忘了描述“将值插入数据库”部分。我认为数据库是SQL Server(也可能是Express版本)。
首先:创建数据库连接。不用手动编写连接字符串,使用SqlConnectionStringBuilder
:
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = <your server instance, e.g. "localhost\sqlexpress">;
csb.InitialCatalog = <name of your database>;
csb.IntegratedSecurity = <true if you use integrated security, false otherwise>;
if (!csb.IntegratedSecurity)
{
csb.UserId = <User name>;
csb.Password = <Password>;
}
然后,创建并打开一个新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
块结束:
}
然后你走了。或者,您可以使用具有特殊插入命令的数据适配器。然后,插入这些值将会变成一行代码,但是,您的数据库表格必须具有与Excel表单相同的结构(分别为:您在发布的代码中获得的数据表格)
退房NPOI
这是Apache的POI Excel中实现的.NET版本。它可以轻松地完成您所需要的操作,并且有助于避免在使用Jet提供程序时遇到的一些问题(即Excel的本地副本,或者更糟糕的是,服务器上Excel的副本)。
通过ODBC驱动程序访问Excel工作表时,不需要安装Excel。 – 2012-02-10 10:38:52
不够公平,但有一些关于ODBC驱动程序的可怕部分,例如推断类型。 – 2012-02-10 12:08:17
最后,ODBC驱动程序是否推断类型错误或Excel是否错误并不重要 - 然而,我必须承认,使用Excel时,Microsoft已经围绕错误类型推断包装了一个相当不错的GUI。 – 2012-02-10 12:20:28
您能给关于上面的代码的一些细节,或者没有做什么?它也不是一个完整的代码示例,if块的结尾没有被提供,也没有发生任何事后发生的事情 – SpaceBison 2012-02-10 10:27:17
你已经告诉你想要什么了。 quesion? – 2012-02-10 10:27:22
只是我想要变量中的单元格值 – bkac 2012-02-10 10:28:29