2013/03/28

C# DataGridView讀入Excel

公司總是會有很多的Excel檔案,當要把這些檔案集合起來並且彙整成一個資料庫的時候
麻煩的不在於資料庫的規劃,而是在於那些Excel檔案的格式問題…

而且要將那些資料一筆一筆的key in進去資料庫又很辛苦,所以就產生這篇文章了XDDD

在進行講解前可以先去看一下這篇文章『[C#]-讀取excel檔案寫入MS SQL Server』,這篇文章我個人認為寫得比微軟MVP還要清楚;而且又附有版本對應的命令


我在這隻程式裡面使用OpenFileDialog來選擇Excel檔案,有要選擇2003或2007版本可以參考這篇文章『OpenFileDialog如何設定多個Filter



透過OleDbDataAdapter的方式將類似SQL語法丟進去執行,並且將資料寫回DataSet
DataSet暫存資料給DataGridView



要特別注意這行,dataGridView1.DataSource = dataSet.Tables[0].DefaultView;
這行是將取得到資料選擇第0個表格,並且設定成dataGridView1.DataSource

網路上還有另一種寫法是如下方
adapter.Fill(dataSet,"TABLE1");
dataGridView1.DataSource = dataSet.Tables["TABLE1"].DefaultView;

跟目前寫法差在比較好辨識,就像你的同學有那麼多個
總是有個名字比較好叫人吧,號碼隨時會換
但是名字這種就很久才換一次吧?XD


using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

namespace OpenExcelForm
{
    public partial class OpenExcelForm : Form
    {
        public OpenExcelForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel|*.xls";
            if (file.ShowDialog() == DialogResult.OK)
            {
                String path = file.FileName;
                string excelConn = "Provider = Microsoft.Jet.OLEDB.4.0 ;Data Source = " + path + ";Extended Properties = 'Excel 8.0;HDR=YES'";
                string strExcelSelect = "SELECT * FROM [Sheet1$]";
                OleDbDataAdapter adapter = new OleDbDataAdapter(strExcelSelect, excelConn);
                DataSet dataSet = new DataSet();
                adapter.Fill(dataSet);
                dataGridView1.DataSource = dataSet.Tables[0].DefaultView;
            }
        }
    }
}



參考資料:
http://chunghsien-world.blogspot.tw/2010/07/c-excelms-sql-server.html
http://blog.csdn.net/rocky69/article/details/7259697
http://www.dotblogs.com.tw/yc421206/archive/2012/03/09/70624.aspx