zoukankan      html  css  js  c++  java
  • 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

    本文来自博客园,作者:云辰,转载请注明原文链接:https://www.cnblogs.com/yunchen/p/13743217.html

  • 相关阅读:
    寒假每日总结(八)
    寒假每日总结(七)
    寒假每日总结(六)
    2020-2.19
    2020-2.18
    寒假每日总结-2020.2.11
    寒假每日总结-2020.2.10
    寒假每日总结-2020.2.9
    寒假每日总结
    寒假每日总结——2020.2.6
  • 原文地址:https://www.cnblogs.com/yunchen/p/13743217.html
Copyright © 2011-2022 走看看