1、要安裝或引用DLL;“Microsoft.Office.Interop.Excel.dll”,復制到bin/debug目錄下;
2 、在項目解決方案上引用;
網上搜到的函數 ,我建 了個通用類Excel ;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Excel { public static DataTable ReadFromExcel(string excelpath) { string sExt = System.IO.Path.GetExtension(excelpath); string sConn = null; if (sExt == ".xlsx") { sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelpath + ";" + "Extended Properties='Excel 12.0;HDR=YES'"; } else if (sExt == ".xls") { sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelpath + ";" + "Extended Properties=Excel 8.0"; } else { throw new Exception("文件格式有誤"); } OleDbConnection oledbConn = new OleDbConnection(sConn); oledbConn.Open(); /// //返回Excel的架構,包括各個sheet表的名稱,類型,創建時間和修改時間等 DataTable dtSheetName = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串數組 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } OleDbDataAdapter command = new OleDbDataAdapter("SELECT * FROM [" + strTableNames[0] + "]", oledbConn); DataSet ds = new DataSet(); command.Fill(ds); oledbConn.Close(); return ds.Tables[0]; } }
調用方法,引用 Excel.ReadFromExcel(excelpath);:
OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { string excelpath = ofd.FileName; dataGridView1.DataSource = Excel.ReadFromExcel(excelpath); }
參考1:解決 |Sheet1 名稱出錯問題
(53條消息) 'Sheet1$' 不是一個有效名稱的解決方法_心如止水-CSDN博客_不是一個有效名稱
參考2:
(53條消息) C#讀取Excel到DataGridView(兩種方式)_CSDNwhyu的博客-CSDN博客_c# datagridview excel
我試了參考2的兩種方法 ,第一種方法速度太慢