zoukankan      html  css  js  c++  java
  • 分批汇出EXCEL

    EXCEL 汇出的时候,如果一时间汇出大量的数据的话,会影响服务器的性能及效率,故分批汇出,每一批50000条数据(每页EXCEL支持65536行),具体实现如下

    Public Shared Sub ExportBatch(dtSource As DataTable, strFileName As String)
    Dim workbook As New HSSFWorkbook()
    CreateFolder(strFileName.Substring(0, strFileName.LastIndexOf("")))
    Dim iCount As Integer = 0

    '每批汇出行数
    Dim sheetRows As Integer = 50000
    For c As Integer = 0 To dtSource.Rows.Count - 1 Step sheetRows
    'For c As Integer = 0 To 10
    If c = iCount * sheetRows Then
    iCount = iCount + 1
    Dim sheet As HSSFSheet = workbook.CreateSheet()

    '填充表头
    Dim dataRow As HSSFRow = sheet.CreateRow(0)
    For Each column As DataColumn In dtSource.Columns
    dataRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName)
    Next

    '填充内容
    '判断是否是最后一页,如果不是的话,取50000的倍数,如果是,则取datatable的最大条数
    Dim rowCounts As Integer = IIf(dtSource.Rows.Count > iCount * sheetRows, iCount * sheetRows, dtSource.Rows.Count)
    '每一批(第一页)都是由第一行开始
    Dim rowIndex As Integer = 1
    For i As Integer = c To rowCounts - 1
    dataRow = sheet.CreateRow(rowIndex)
    For j As Integer = 0 To dtSource.Columns.Count - 1
    dataRow.CreateCell(j).SetCellValue(dtSource.Rows(i)(j).ToString())
    Next
    rowIndex += 1
    Next

    '保存
    Using ms As New MemoryStream()
    Using fs As New FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.Write)
    workbook.Write(ms)
    ms.Flush()
    ms.Position = 0
    Dim data As Byte() = ms.ToArray()
    fs.Write(data, 0, data.Length)
    fs.Flush()
    End Using
    End Using
    End If

    System.Threading.Thread.Sleep(10000)

    Next
    End Sub

  • 相关阅读:
    win7服务器从本地粘贴的文件,粘贴卡死
    AOP面向切面编程
    静态代理和动态代理
    查询数据库中第n行数据
    记录我的成长
    路径总和,双重递归
    java Queue 常用方法(持续更新)
    对称二叉树
    Linux学习之五——Linux虚拟机文件系统
    Linux学习之四——命令运行机制及查看命令帮助
  • 原文地址:https://www.cnblogs.com/withoutaword/p/4143095.html
Copyright © 2011-2022 走看看