第一種:C#讀取excel數據並返回datatable
1.寫一個返回datatable的excel類
public static DataTable ExcelImport(string strFileName) { DataTable dt = new DataTable(); ISheet sheet = null; using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read)) { if (strFileName.IndexOf(".xlsx") == -1)//2003 { HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); sheet = hssfworkbook.GetSheetAt(0); } else//2007 { XSSFWorkbook xssfworkbook = new XSSFWorkbook(file); sheet = xssfworkbook.GetSheetAt(0); } } System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); IRow headerRow = sheet.GetRow(0); int cellCount = headerRow.LastCellNum; for (int j = 0; j < cellCount; j++) { ICell cell = headerRow.GetCell(j); dt.Columns.Add(cell.ToString()); } for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = dt.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); } dt.Rows.Add(dataRow); } return dt; }
2.添加NPOI的引用。可以直接在NuGet包管理器中搜索下載
3.在button的雙擊事件中傳入地址即可獲取到excel表中的全部數據。
private void readData_Click(object sender, EventArgs e) { var dt = ExcelImport("ProductData.xlsx"); }
注意事項:
1.報錯“未能加載文件或程序集 ICSharpCode.SharpZipLib” 可能是因為下載的NPOI與項目版本不匹配導致,可項目右鍵“屬性-應用程序”修改目標框架即可。
2.excel名稱不能使用中文可以使用英文或數字,最好放在bin目錄下 ,否則也可能導致生成失敗。
-------------------------------------------------------------------------------------------------------------------------
方法二:C#讀取excel數據並顯示在datagrilview上
1.先來一個讀取Excel表內容返回dataset的方法。
public DataSet getData() { //打開文件 OpenFileDialog file = new OpenFileDialog(); file.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls"; file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); file.Multiselect = false; if (file.ShowDialog() == DialogResult.Cancel) return null; //判斷文件后綴 var path = file.FileName; string fileSuffix = System.IO.Path.GetExtension(path); if (string.IsNullOrEmpty(fileSuffix)) return null; using (DataSet ds = new DataSet()) { //判斷Excel文件是2003版本還是2007版本 string connString = ""; if (fileSuffix == ".xls") connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; else connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; //讀取文件 string sql_select = " SELECT * FROM [Sheet1$]"; using (OleDbConnection conn = new OleDbConnection(connString)) using (OleDbDataAdapter cmd = new OleDbDataAdapter(sql_select, conn)) { conn.Open(); cmd.Fill(ds); } if (ds == null || ds.Tables.Count <= 0) return null; return ds; } }
2.寫入button事件方法
dataGridView1.DataSource = null; //每次打開清空內容 DataTable dt = getData().Tables[0]; dataGridView1.DataSource = dt;
3.效果如圖,內容顯示在datagridview中