VB.NET NPOI快速導入導出Excel


 記得提前先使用NeGet程序包提前導出NPOI相關dll引用

DataGridView導出Excel

 1  ''' <summary>
 2     ''' 獲取EXCEL表格真正的值
 3     ''' </summary>
 4     ''' <param name="cell"></param>
 5     ''' <returns>不同的類型處理后的值</returns>
 6     ''' <remarks></remarks>
 7     Private Function GetCellValue(cell As ICell) As String
 8         If cell Is Nothing Then
 9             Return String.Empty
10         End If
11         Select Case cell.CellType
12             Case CellType.Blank
13                 '空數據類型 這里類型注意一下,不同版本NPOI大小寫可能不一樣,有的版本是Blank(首字母大寫)
14                 Return String.Empty
15             Case CellType.[Boolean]
16                 'bool類型
17                 Return cell.BooleanCellValue.ToString()
18             Case CellType.[Error]
19                 Return cell.ErrorCellValue.ToString()
20             Case CellType.Numeric
21                 '數字類型
22                 If HSSFDateUtil.IsCellDateFormatted(cell) Then
23                     '日期類型
24                     Return cell.DateCellValue.ToString("yyyy/MM/dd")    '格式下化下日期,否則會帶上時間--可以針對修改需求
25                 Else
26                     '其它數字
27                     Return cell.NumericCellValue.ToString()
28                 End If
29             Case CellType.Unknown
30                 '無法識別類型
31                 '默認類型
32                 Return cell.ToString()
33                 '
34             Case CellType.[String]
35                 'string 類型
36                 Return cell.StringCellValue
37             Case CellType.Formula
38                 '帶公式類型
39                 Try
40                     'Dim e As New HSSFFormulaEvaluator(cell.Sheet.Workbook)
41                     'e.EvaluateInCell(cell)
42                     Return cell.StringCellValue         '帶出公式會出異常,故只返回字符串--可以針對修改調試
43                 Catch
44                     Return cell.NumericCellValue.ToString()
45                 End Try
46         End Select
47     End Function

 

 1  ''' <summary>
 2     ''' 導出為Excel
 3     ''' </summary>
 4     ''' <param name="dgv"></param>參數為DataGridView
 5     ''' <remarks></remarks>
 6     Public Sub ExportExcel(ByVal dgv As System.Windows.Forms.DataGridView)
 7         Dim workbook As New HSSFWorkbook    '工作簿
 8         Dim sheet As HSSFSheet              '工作表
 9         Dim excelrow As HSSFRow             '行集
10 
11         Dim i As Integer                    '列的循環變量
12         Dim m As Integer                    '行的循環變量
13         Dim n As Integer                    '列的循環變量
14 
15         Dim saveDialog As Windows.Forms.SaveFileDialog     '保存文件的對話框
16 
17         Dim ms As MemoryStream                             '內存中的數據流
18         Dim fs As FileStream                               '文件流
19         Dim filename As String                             '保存時的文件名稱
20 
21 
22 
23         '如果DataGridView中沒有數據,則不導出Excel
24         If dgv.Rows.Count = 0 Then
25             MsgBox("無法導出為Excel!", MsgBoxStyle.Exclamation, "溫馨提示")
26             Return
27         End If
28 
29         sheet = workbook.CreateSheet                      '在工作簿中創建表
30         excelrow = sheet.CreateRow(0)                     '在工作表中創建標題行Row(0)
31 
32         '添加每列列標題
33         For i = 0 To dgv.Columns.Count - 1
34             '將可見的列的標題寫到單元格中(如果某列不可見,那么會在導出的Excel中空出這列)
35             If dgv.Columns(i).Visible = True Then
36                 excelrow.CreateCell(i).SetCellValue(dgv.Columns(i).HeaderText)
37             End If
38         Next
39         '添加其他行和列
40         For m = 1 To dgv.Rows.Count
41             excelrow = sheet.CreateRow(m)                  '每遍歷一行,則在sheet中創建一行
42             For n = 0 To dgv.Columns.Count - 1             '遍歷每一行中的所有列
43                 '如果該列可見,則導出該列單元格的值
44                 If dgv.Columns(n).Visible = True Then
45                     excelrow.CreateCell(n).SetCellValue(dgv.Rows(m - 1).Cells(n).Value.ToString)
46                 End If
47                 '如果該列不可見,則將該列設置為隱藏
48                 If dgv.Columns(n).Visible = False Then
49                     sheet.SetColumnHidden(n, True)
50                 End If
51             Next
52         Next
53 
54 
55 
56         saveDialog = New Windows.Forms.SaveFileDialog                '保存文件對話框
57         saveDialog.DefaultExt = "xls"                                '設置默認文件擴展名
58         saveDialog.Filter = "Excel文件|*.xls"                        '文件類型
59         saveDialog.ShowDialog()                                      '彈出保存文件對話框
60 
61         filename = saveDialog.FileName                               '將對話框中輸入的文件名賦給filename
62         If filename = "" Then                        '修復一個異常,如果文件名不寫,直接取消導出的話,會報錯
63             Return
64         End If
65         ms = New MemoryStream()
66         fs = New FileStream(filename, FileMode.Create)
67         workbook.Write(ms)                                           '寫入數據 
68         workbook.Write(fs)
69         fs.Close()                                                   '關閉文件
70         workbook = Nothing
71         ms.Close()
72         ms.Dispose()
73         MsgBox("導出完成")
74     End Sub

 

DataGirdview導入Excel

 1  ''' <summary>
 2     ''' 獲取excel內容
 3     ''' </summary>
 4     ''' <param name="filePath">excel文件路徑</param>
 5     ''' <returns></returns>
 6     Public Function ImportExcel(filePath As String) As DataTable
 7         Dim dt As New DataTable()
 8         Using fsRead As FileStream = System.IO.File.OpenRead(filePath)
 9             Dim wk As IWorkbook = Nothing
10             '獲取后綴名
11             Dim extension As String = filePath.Substring(filePath.LastIndexOf(".")).ToString().ToLower()
12             '判斷是否是excel文件
13             If extension = ".xlsx" OrElse extension = ".xls" Then
14                 '判斷excel的版本
15                 If extension = ".xlsx" Then
16                     wk = New XSSFWorkbook(fsRead)
17                 Else
18                     wk = New HSSFWorkbook(fsRead)
19                 End If
20 
21                 '獲取第一個sheet
22                 Dim sheet As ISheet = wk.GetSheetAt(0)
23                 '獲取第一行
24                 Dim headrow As IRow = sheet.GetRow(0)
25                 '創建列
26                 For i As Integer = headrow.FirstCellNum To headrow.Cells.Count - 1
27                     Dim datacolum = New DataColumn(headrow.GetCell(i).StringCellValue)
28                     'Dim datacolum As New DataColumn("F" + CStr(i + 1))
29                     dt.Columns.Add(datacolum)
30                 Next
31                 '讀取每行,從第二行起
32                 For r As Integer = 1 To sheet.LastRowNum
33                     Dim result As Boolean = False
34                     Dim dr As DataRow = dt.NewRow()
35                     '獲取當前行
36                     Dim row As IRow = sheet.GetRow(r)
37                     '讀取每列
38                     For j As Integer = 0 To row.Cells.Count - 1
39                         Dim cell As ICell = row.GetCell(j)
40                         '一個單元格
41                         dr(j) = GetCellValue(cell)
42                         '獲取單元格的值
43                         '全為空則不取
44                         If dr(j).ToString() <> "" Then
45                             result = True
46                         End If
47                     Next
48                     If result = True Then
49                         '把每行追加到DataTable
50                         dt.Rows.Add(dr)
51                     End If
52                 Next
53             End If
54         End Using
55         Return dt
56     End Function

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM