Winform中使用NPOI实现Excel导入并赋值给DataTable
生活随笔
收集整理的這篇文章主要介紹了
Winform中使用NPOI实现Excel导入并赋值给DataTable
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景
首先打開一個excel文件,然后獲取其路徑,獲取第一行作為DataTable的標題欄。
然后從第二行到最后一行作為顯示的數據。
參考Excel的導出
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100063457
NPOI相關Lib中各種dll文件下載
https://download.csdn.net/download/badao_liumang_qizhi/11608830
示例代碼下載
https://download.csdn.net/download/badao_liumang_qizhi/11612098
實現
在上面進行Excel的導出時,只添加了NPOI的引用,在進行導入時還要添加如下引用。
?
然后添加一個按鈕,用來打開要導入的excel文件。
在其點擊事件中
private void button3_Click(object sender, EventArgs e){OpenFileDialog fileDialog = new OpenFileDialog();fileDialog.Multiselect = true;fileDialog.Title = "請選擇文件";fileDialog.Filter = "所有文件(*xls*)|*.xls*"; //設置要選擇的文件的類型if (fileDialog.ShowDialog() == DialogResult.OK){localFilePath = fileDialog.FileName;//返回文件的完整路徑???????????????}MessageBox.Show("打開成功要導入的文件路徑為:"+localFilePath);}其中localFilePath 是全局變量用來存儲要導入的文件路徑。
string localFilePath = "";要導入的文件內容
?
效果
?
然后在下面導入Excel的按鈕的點擊事件中
private void button2_Click(object sender, EventArgs e){ISheet sheet = null;DataTable data = new DataTable();IWorkbook workbook = null;int startRow = 0;try{//獲取文件名,不帶路徑string fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1);//以文件流的形式打開文件fs = new FileStream(localFilePath, FileMode.Open, FileAccess.Read);// 2007版本if (fileNameExt.IndexOf(".xlsx") > 0)workbook = new XSSFWorkbook(fs);// 2003版本else if (fileNameExt.IndexOf(".xls") > 0)workbook = new HSSFWorkbook(fs);if (fileNameExt != null){sheet = workbook.GetSheet("sheet1");//如果沒有找到指定的sheetName對應的sheet,則嘗試獲取第一個sheetif (sheet == null){sheet = workbook.GetSheetAt(0);}}else{sheet = workbook.GetSheetAt(0);}if (sheet != null){IRow firstRow = sheet.GetRow(0);//第一行最后一個cell的編號 即第一行總的列數int cellCount = firstRow.LastCellNum;for (int i = firstRow.FirstCellNum; i < cellCount; ++i){ICell cell = firstRow.GetCell(i);if (cell != null){string cellValue = cell.StringCellValue;if (!string.IsNullOrEmpty(cellValue)){//設置DataTable的第一行的顯示內容即標題行DataColumn column = new DataColumn(cellValue);data.Columns.Add(column);}}}//excel表格中的第一行作為dataTable的標題//所以從第二行開始startRow = sheet.FirstRowNum+1;//獲取最后一行的標號int rowCount = sheet.LastRowNum;for (int i = startRow; i <= rowCount; ++i){IRow row = sheet.GetRow(i);//沒有數據的行默認是null if (row == null) continue; DataRow dataRow = data.NewRow();for (int j = row.FirstCellNum; j < cellCount; ++j){//同理,沒有數據的單元格都默認是nullif (row.GetCell(j) != null)dataRow[j] = row.GetCell(j).ToString();}data.Rows.Add(dataRow);}}}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);}//設置數據源this.dataGridView1.DataSource = data;}效果
?
?
總結
以上是生活随笔為你收集整理的Winform中使用NPOI实现Excel导入并赋值给DataTable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中DataTable使用以及对行与列
- 下一篇: Winform中给DataGridVie