從Excel表格中將數據讀入到DataTable數據類型中,我是經過使用OLEDB來實現的ide
(OLEDB是Object Linking and Embedding Database的縮寫)spa
現有一個擴展名爲xlsx的工做簿文件「節氣表.xlsx」,在工做表Sheet1中有24個節氣的信息code
本文中的示例程序(代碼將在後面給出)讀取這個數據表後的效果以下圖:orm
能夠看出:OleDb讀入一個Excel工做表(Sheet)的數據後,工做表的第一行會變成標題,第二行起,逐行變爲DataTable的一個數據行(Row)string
示例程序控件說明:it
程序代碼:io
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ExcelReader { public partial class FormMain : Form { public FormMain() { InitializeComponent(); } private void FormMain_Load(object sender, EventArgs e) { txtXlsxPath.Text = @"節氣表.xlsx"; txtSheetName.Text = @"Sheet1"; } /// <summary> /// 按鈕:從EXCEL工做簿中讀取信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRead_Click(object sender, EventArgs e) { dgvTable.DataSource = ReadFromExcel(txtXlsxPath.Text, txtSheetName.Text); } /// <summary> /// 從EXCEL工做簿中讀取信息到DataTable(須要System.Data.OleDb) /// </summary> /// <param name="sXlsxPath">EXCEL工做簿文件地址</param> /// <param name="sSheetName">工做表名稱</param> private DataTable ReadFromExcel(string sXlsxPath, string sSheetName) { string sExt = System.IO.Path.GetExtension(sXlsxPath); string sConn = ""; if (sExt == ".xlsx") //Excel2007 { sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + sXlsxPath + ";" + "Extended Properties='Excel 12.0;HDR=YES'"; } else if (sExt == ".xls") //Excel2003 { sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + sXlsxPath + ";" + "Extended Properties=Excel 8.0"; } else { throw new Exception("未知的文件類型"); } OleDbConnection oledbConn = new OleDbConnection(sConn); oledbConn.Open(); OleDbDataAdapter command = new OleDbDataAdapter( "SELECT * FROM [" + sSheetName + "$]", oledbConn); DataSet ds = new DataSet(); command.Fill(ds, sSheetName); oledbConn.Close(); return ds.Tables[sSheetName]; } } }
編寫這個程序的時候遇到過兩個異常,解決方法以下:class
1)異常「外部表不是預期的格式」:擴展
寫鏈接表達式時(上面代碼中的sConn),要對擴展名爲.xlsx和.xls分類討論object
2)異常:「找不到可安裝的ISAM」:
讀取.xlsx格式的Excel表格時,鏈接表達式的Extended Properties部分,等於號後面的字符是用單引號括起來的,若是漏寫單引號引發的,補上就行了
END