using System.Data.OleDb;
//HRD=Yes是說要不要把Excel檔裡面的第一行資料當成資料欄位,如果是No就是當成資料了
//IMEX=1是說把Excel裡面的資料都當成文字來讀,這樣的作法才能全部資料都讀的到
//ReadOnly=0是如果你要用ADO.NET去寫資料進Excel的話,就一定要設定
//如果不設定ReadOnly的話,會出現"運作必須使用更新查詢"的錯誤喔
//MyPath是一個Excel檔案的路徑的變數,像是C:\Hello\Cool.xls這樣
string conStr = "";
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MyPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1,ReadOnly=0'";
OleDbConnection cn = new OleDbConnection(conStr);
cn.Open();
//下面這個GetOleDbSchemaTable是可以取得一個資料表,裡面有你讀的那個Excel檔的一些資料
//像是會列出裡面每個Sheet(Excel工作表)的名字
DataTable excelSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
//上面那個資料表裡面放Sheet名字的欄位是叫做TABLE_NAME
//所以下面會取出Sheet1$這個變數
string mappingSheet = excelSchema.Rows[0]["TABLE_NAME"].ToString();
---------------------------------無關的補充=.=--------------------------------
//補充一下如果要取得SQL資料表的結構的話(就是有些什麼欄位阿、型態阿..等等),就用
string[] restrictions = new string[4] { "資料庫的名字", null, "資料表的名字", null };
DataTable SqlSchema = cn.GetSchema("Columns",restrictions);
但注意這是取的Sql資料庫裡面的資料表的結構,
所以這邊的cn要用SqlConnection和相關的連資料庫的字串來產生喔
---------------------------------無關的補充=.=--------------------------------
OleDbDataAdapter DAC = new OleDbDataAdapter();
//然後就去下SQL語法取資料出來
using (OleDbCommand myCmdSe = new OleDbCommand("SELECT * FROM [" + mappingSheet + "]", cn))
{
DAC.SelectCommand = myCmdSe;
DAC.Fill(放個DataTable吧);
}
//然後上面就完成了把資料放到某個DataTable裡了
//如果要在Excel裡面創一個Sheet叫做HelloHi且裡面有三個欄位的話就用下面這個語法
注意HelloHi後面那個$符號要加,(雖然有時好像不加反而可以=.=,都試試吧)
string myStr = "CREATE TABLE [HelloHi$] ([ID] nVarChar,[Name] nVarChar,[Product] nVarChar)";
using (OleDbCommand cmd = new OleDbCommand(myStr , cn))
{
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO [" + SheetName + "$] VALUES(1,'elmer','password')";
}
//如果要新增資料到Excel裡面的話,就把myStr 改成Insert語法
myStr="INSERT INTO [HelloHi$] VALUES(22,'welkingunther','pixnet')";
如此一來,讀寫就都完成了