首先需要引用程序集
或管理NuGet程序包 安裝NPOI
需引用
public ActionResult SqlBulkCopyByDatatable(string TableName) { using (FileStream fileReader = System.IO.File.OpenRead(@"C: \Users\acer\Desktop\112.xlsx")) { //創建工作簿對象接收文件流(Excel信息) IWorkbook workbook = new XSSFWorkbook(fileReader); //IWorkbook workbook = new HSSFWorkbook(fileReader); //工作簿共有幾個表 //int count = workbook.NumberOfSheets; //創建工作表讀取工作簿表信息 //ISheet sheet= workbook.GetSheet("表名稱"); ISheet sheet = workbook.GetSheetAt(0); string sql = @" insert into student(xuehao,name,sex,xueyuan,stuclass,nums,states) values (@xuehao,@name,@sex,@xueyuan,@stuclass,@nums,@states)"; int ii = 0; //r = 1,剔除表頭一行 for (int r = 1; r <= sheet.LastRowNum; r++) { //定義參數數組para SqlParameter[] para = new SqlParameter[] { new SqlParameter("xuehao",SqlDbType.NVarChar,100), new SqlParameter("name",SqlDbType.NVarChar,100), new SqlParameter("sex",SqlDbType.NVarChar,100), new SqlParameter("xueyuan",SqlDbType.NVarChar,100), new SqlParameter("stuclass",SqlDbType.NVarChar,100), new SqlParameter("nums",SqlDbType.NVarChar,100), new SqlParameter("states",SqlDbType.NVarChar,50) }; //創建一行獲取sheet行數據 IRow row = sheet.GetRow(r); //List<ICell> listcell = new List<ICell>(); //int c = 1 即不讀取自動編號的Id列 for (int c = 0; c < row.LastCellNum; c++) { //將每行每個單元格的值添加帶listcell集合中 //listcell.Add(row.GetCell(c)); //將每行的每個單元格的數據添加到para中 c-1即從0 開始記錄參數 para[c].Value = row.GetCell(c).ToString(); } //循環賦值給para //for (int i = 0; i < listcell.Count; i++) //{ // para[i].Value = listcell[i].ToString(); //} //執行添加Sql語句 ii = DBHelper.ExecuteNonQuery(sql, para); } if (ii > 0) { return Content("<script>alert('已將Excel數據插入到數據庫表')</script>"); } else { return Content("<script>alert('Excel數據插入到數據庫表失敗!')</script>"); } } }
其中甚至不需要改變什么東西,如果本機的excel版本為2007之前的 需將
改為
其次為
這里存放的是絕對路徑
再有就是根據自己的數據庫表改變Insert語句
這里我放的是DBHelper,可以根據自己需要使用幫助類或者寫ADO.net或者使用自己的方法
尤其需要注意這里,它決定行列從哪個開始
至此 一個比較簡單的Excel數據導入到數據庫就搞定了