使用OLEDB讀取Excel的資料到程式的DataSet內

使用OLEDB讀取Excel的資料到程式的DataSet內

之前有大概Post了一篇怎麼將資料匯出為Excel檔,同樣的,也會有可能需要讀取Excel內的資料到程式內.

尤其是部份的資料交換格式仍未使用XML,有的還是使用Excel檔在做資料交換.

那麼就需要用程式碼去讀取檔案,將資料讀進來做運用.

以下的程式碼可以適用在Visual Studio 2002/2003/2005

採的用語言是C#

 


using System.IO;

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    FileInfo fi = new FileInfo(openFileDialog1.FileName);
    if (!fi.Exists)
    {
        MessageBox.Show("匯入檔案並不存在", "注意", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }

    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFileDialog1.FileName + ";Extended Properties='Excel 8.0;IMEX=1;'";
    OleDbConnection Conn = new OleDbConnection(strConn);
    try
    {
        Conn.Open();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        return;
    }

    try
    {
        DataSet ds = new DataSet();

        DataTable dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
        if (dt.Rows[0]["TABLE_Name"].ToString().IndexOf("$") < 0)
        {
            dt.Rows[0]["TABLE_Name"] += "$";
        }
        string strSelect = "Select * From [" + dt.Rows[0]["TABLE_Name"].ToString() + "] ";
        OleDbDataAdapter da = new OleDbDataAdapter(strSelect, strConn);

        da.Fill(ds, dt.Rows[0]["TABLE_Name"].ToString());
        da.Dispose();

        ds.Tables[dt.Rows[0]["TABLE_Name"].ToString()].Rows.RemoveAt(0);

        dataGridView1.DataSource = ds.Tables[dt.Rows[0]["TABLE_Name"].ToString()];
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        Conn.Close();
        Conn.Dispose();
    }
}