1. 程式人生 > 其它 >Excel工作簿匯入資料庫

Excel工作簿匯入資料庫

1、確定選中的是Excel表
2、確定Excel表有工作表(需要引用NPOI外掛)
3、確定Excel表的表頭資料是否與接收的表的欄位名稱對應(即是確定資料的準確性)
4、儲存
一、確定選中的是Excel工作簿
要想知道獲取的是不是Excel工作表,就要確認檔案的型別。判斷檔案型別的方法就是判斷檔案型別字尾。
這裡我用 Path中的GetExtension的方法,GetExtension的返回值為返回指定的路徑字串的副檔名的字尾。

 


2、確定 Excel工作簿有沒有工作表(需要引用NPOI外掛)
————————————————

//宣告二進位制陣列用於存放檔案
byte[] Bytes = new byte[file.ContentLength];
//將傳入的檔案轉化為二進位制的陣列存入Bytes
file.InputStream.Read(Bytes, 0, file.ContentLength);
//將二進位制陣列轉化為記憶體流
MemoryStream excelFileStream = new MemoryStream(Bytes);
//將記憶體流轉化為工作簿
NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);

//(2)最後確定 工作簿有沒有工作表
if (workbook.NumberOfSheets>0)
————————————————

因為控制器不能直接對Excel工作簿操作,所以先宣告二進位制陣列,然後將傳入的Excel工作簿轉化為二進位制的陣列,將其儲存到二進位制陣列中,再將二進位制陣列的Excel工作簿轉化為記憶體流再將記憶體流轉化為工作簿,最後確定 工作簿有沒有工作表。

 

 

3、確定Excel表的表頭資料是否與接收的表的欄位名稱對應(即是確定資料的準確性)
————————————————

//獲取第一個工作表
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
if (sheet.PhysicalNumberOfRows > 0) //判斷工作表中是否有資料
{
DataTable dtExcel = new DataTable();// 定義datatable
//將資料先裝到datatable中
//第一行是說明 第二行是表頭,索引為1;
NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);

//獲取表格列數
int cellCount = rowHeader.LastCellNum;
//獲取表格行數
int rowCount = sheet.LastRowNum + 1;
//建立dataTable中的列,迴圈新增標題行中各個單元格的值
for(int i=rowHeader.FirstCellNum; i < cellCount; i++)
{
//通過遍歷行中的每一個單元格,獲取標題行各個單元格的資料
DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
//將獲取到的標題行的資料放到datatable中
dtExcel.Columns.Add(dtColumn);
}
//讀取Excel中的資料
//(sheet.FirstRowNum) 第一行是說明;第二行是標題;第三行開始才是資料資訊
for(int i = (sheet.FirstRowNum)+2; i < rowCount; i++)
{
NPOI.SS.UserModel.IRow row = sheet.GetRow(i); //獲取excel的所有行
DataRow dtRow = dtExcel.NewRow(); //建立DataTable行
if (row != null) //為了輸入資料不為空
{
//遍歷excel中一行的列的資訊
for(int j=row.FirstCellNum; j<cellCount; j++)
{
if (row.GetCell(j) != null)
{
dtRow[j] = row.GetCell(j).ToString();
}
}
}
//將填入資料的dtRow添入dtExcel
dtExcel.Rows.Add(dtRow);
}
————————————————

其實上述操作目的是:工作簿workbook轉化成陣列 ,存入dtExcel

然後,在資料庫的表查詢出 學院,專業,年級,班級 的資訊:用來根據名稱獲取對應的ID

以查詢出學院為例子:

 

————————————————

//建立studentVo物件儲存每一條資料
Student student = new Student();
//獲取學院ID 和學院名稱
student.AcademeName = row["學院"].ToString().Trim();
//通過dataTable中的AcademeName到dbAcademe中查詢相應的AcademeID“”
student.AcademeID=dbAcademe.Where(p=>p.AcademeName==student.AcademeName).SingleOrDefault().AcademeID;
…………………………
//將每一條資料都新增到物件列表中
listStudentVo.Add(student);
————————————————
剩下的儲存和中間的查重、篩選,可以根據自已的實際情況寫

 

原文連結:https://blog.csdn.net/weixin_44550157/article/details/89297415