簡體   English   中英

按單元格讀取c#.net中的excel文件

[英]Reading excel file in c#.net cell by cell

我是c#.net新手

我有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];

查看NPOI

http://npoi.codeplex.com/

它是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];
}

訪問行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();

迭代要插入的所有值並執行相應的insert命令:

    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-command的數據適配器。 然后,插入值將歸結為單行,但是,您的數據庫表必須具有與Excel表相同的結構(分別為:您在所發布的代碼中獲得的數據表)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM