DataSet ds = new DataSet();//宣告DataSet ds
//**********開啟EXCEL檔**********
OpenFileDialog openfile = new OpenFileDialog();//開啟檔案資料夾視窗
openfile.Filter = "Excel files(*.xls)|*.xls";//設定開啟EXCEL格式
if (openfile.ShowDialog() == DialogResult.OK)
{
string text = openfile.FileName;//開啟的檔案名稱
// 設定EXCEL連線字串
string ExcelCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + text + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text'";
/*說明
Provider:
Microsoft.Jet.OLEDB.4.0用於2003以前版本 Microsoft.Jet.OLEDB.12.0用於2007以後版本
Data Source: 檔案位置
Extended Properties:Excel版本 97~2003都適用
HDR:Yes-首欄為標題列,No-首欄為資料列
IMEX:IMEX=0-匯出模式,IMEX=1-匯入模式,IMEX=2-連結模式
TypeGuessRows=0:預設為8 代表會先讀取前8列資料,判斷格式是否固定,0會將所有資料讀出在判斷
ImportMixedTypes=Text:當每一列格式不同預設將自動轉為文字格式
p.s.經過測試 TypeGuessRows設為8或0在我的客戶這邊都會出現資料格式判斷有問題,所以第一行本來應該是標題列在此還是把他設定成資料列以利後面格式判斷
*/
OleDbConnection GetXLS = new OleDbConnection(ExcelCon);
GetXLS.Open();//開啟EXCEL連線
DataTable Sheet = GetXLS.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
string SelectSheet = "";
//讀取每個SHEET內容至DATASET
foreach (DataRow row in Sheet.Rows)
{
SelectSheet = (string)row["TABLE_NAME"].ToString();
if (SelectSheet.Substring(SelectSheet.Length - 2) != "$'")
{
}
else
{
//MessageBox.Show(SelectSheet.ToString());
OleDbCommand excel_cmd = new OleDbCommand("SELECT * FROM [" + SelectSheet + "];", GetXLS);
OleDbDataAdapter xlsDa = new OleDbDataAdapter(excel_cmd);
xlsDa.Fill(ds, "data");
}
}
GetXLS.Close();//關閉EXCEL連線
//因為客戶端檔案資料格式無法統一故在此下判斷標題列並刪除
for (int x = 0; x < ds.Tables["data"].Rows.Count; x++)
{
if (ds.Tables["data"].Rows[x].ItemArray[0].ToString() == "idno")
{
ds.Tables["data"].Rows[x].Delete();//刪除DATASET資料行
ds.Tables["data"].AcceptChanges();//允許DATASET資料變更
da.Update(ds, "data");//更新DATASET
}
}
沒有留言:
張貼留言