1. 程式人生 > >C# vs2017 winForm 用NOPI導入Excel文件到datagridview

C# vs2017 winForm 用NOPI導入Excel文件到datagridview

讀取 文件 灰色 show event orm .sh null xss

註:這種方法有一個問題:無法讀取不規範的Excel文件(一般是由於第三方工具自動生成的excel文件,如網頁、xml另存為的)

1.在項目引用的NuGet安裝NOPI;

2.在頭部引用

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using System.IO;

3.winForm界面(灰色的部分是datagridview1):

技術分享圖片

4.代碼:

using System;
using System.Windows.Forms;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; using System.IO; namespace InputExcelTest { public partial class Form_SelectFile : Form { public Form_SelectFile() { InitializeComponent(); } private void BtnSelectFile_Click(object sender, EventArgs e) {
//選擇文件 openFileDialog1.Filter= "XLS文件|*.xls|XLSX文件|*.xlsx";//篩選文件類型 openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { InputWorkbook(openFileDialog1.FileName);//執行導入 } openFileDialog1.Dispose(); }
private void BtnCancel_Click(object sender, EventArgs e) { Close(); } //導入工作簿 private void InputWorkbook(string filePath) { if (filePath != "") { try { string fileType = filePath.Substring(filePath.LastIndexOf(".") + 1);//取得文件後綴 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);//創建文件流 bool isXls = true;//判斷文件類型 if (fileType == "xlsx") { isXls = false; } IWorkbook workbook = CreateWorkbook(isXls, fs);//創建工作簿 ISheet sheet = workbook.GetSheetAt(0);//取得第一個工作表 int rowCount = sheet.LastRowNum + 1;//取得行數 int colCount = sheet.GetRow(0).LastCellNum;//取得列數 //初始化datagridview1 dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); for (int c = 0; c < colCount; c++)//遍歷Excel第一行,生成dataGridView1列名 { ICell cell = sheet.GetRow(0).GetCell(c); dataGridView1.Columns.Add(c.ToString() + cell.ToString(), cell.ToString()); } for (int r = 1; r < rowCount; r++)//遍歷Excel其他行,生成dataGridView1單元格內容 {//遍歷Excel行,從第二行開始 IRow row = sheet.GetRow(r); int index = dataGridView1.Rows.Add(); colCount = row.LastCellNum; for (int c = 0; c < colCount; c++) {//遍歷每個單元格,將單元格內容填入dataGridView1單元格中 ICell cell = row.GetCell(c); if (cell == null)//如果該單元格沒有內容,跳過 { continue; } dataGridView1.Rows[index].Cells[c].Value = cell.ToString(); } } } catch (Exception ex) { MessageBox.Show("導入失敗: " + ex.Message); } } else { MessageBox.Show("請選擇Excel文件"); } } //創建工作簿 private static IWorkbook CreateWorkbook(bool isXLS, FileStream fs) { if (isXLS) { return new HSSFWorkbook(fs); } else { return new XSSFWorkbook(fs); } } } }

C# vs2017 winForm 用NOPI導入Excel文件到datagridview