Visual Basic .NET (VB.NET) 实现大量数据产出.csv并转换为.xlsx格式文档

Visual Basic .NET (VB.NET) 实现大量数据查询产出.csv并转换为.xlsx格式文档

原因

使用C1FlexGrid控件查询塞值后发现对于大量数据而言不能直接转出.xls/.xlsx格式文档
(出现数据超过最大行65536的错误提示)

使用语言:VB.NET

解决办法

基础代码:数据查询,基础数据表dt,调用函数方法
(注意:“\test.csv”,这里.csv文档名称对应文档内sheetname,如果需要设置请注意一下。)

Dim dt As DataTable = New DataTable()
Dim conn As SqlConnection = New SqlConnection(cnstr)
//用于数据库连接和关闭释放资源
conn.Open()
//SqlDataAdapter用于检索和保存数据
Dim objDataAdapter As SqlDataAdapter = New SqlDataAdapter()
Dim strSql As String ="select * from table"
objDataAdapter = New SqlDataAdapter(strSql, conn)
//Fill(可更改DataSet中的数据以匹配数据源中的数据),相当于有一个dt数据表
objDataAdapter.Fill(dt)
conn.Close()
conn.Dispose()
//汇出文档系统路径
Dim savefilepath As String = System.Windows.Forms.Application.StartupPath
//使用,分别对应dt,csv路径,xlsx路径
Dim YN As Boolean = dtToxlsx(dt, savefilepath & "\test.csv", savefilepath & "\test.xlsx")
//整合下文两个方法
Public Function dtToxlsx(ByVal dt As DataTable, ByVal csvFilePath As String, ByVal xlsxFilePath As String) As Boolean
        '将数据表写入CSV文件
        dtTocsv(dt, csvFilePath)
        '将CSV文件转换为XLSX文件
        csvToxlsx(csvFilePath, xlsxFilePath)
        Return True
    End Function

把dt转为.csv文档

StringBuilder类型变量会初始化一段长度,供后续对该变量进行增加。

Public Function dtTocsv(ByVal dt As DataTable, ByVal filePath As String) As Boolean
		//strColumns里放需要设置的列名
        Dim strColumns() As String = New String() {"标题1", "标题2"}
        Using fileStream = New FileStream(filePath, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write)
            Using streamWriter = New StreamWriter(fileStream, System.Text.Encoding.Default)
                //写入列名
                streamWriter.WriteLine(String.Join(",", strColumns))
                For i As Integer = 0 To dt.Rows.Count - 1
                    Dim strRow As New StringBuilder()
                    For j As Integer = 0 To dt.Columns.Count - 1
                        Dim columnValue As String = dt.Rows(i)(j).ToString()
                        //处理包含逗号或引号的数据
                        If columnValue.Contains(",") OrElse columnValue.Contains("""") Then
                            columnValue = """" & columnValue.Replace("""", """""") & """"
                        End If
                        strRow.Append(columnValue)
                        //如果不是最后一列,添加逗号
                        If j < dt.Columns.Count - 1 Then
                            strRow.Append(",")
                        End If
                    Next
                    streamWriter.WriteLine(strRow)
                Next
            End Using
        End Using
    End Function

.csv转.xlsx格式

csvFileName :.csv路径及名称
xlsxFileName :.xlsx要存放的路径及名称

Private Sub csvToxlsx(ByVal csvFileName As String, ByVal xlsxFileName As String)
        ' 创建一个新的Excel应用程序实例
        Dim eole = CreateObject("Excel.application")
        Dim excelApp As New Excel.Application
        ' 打开CSV文件
        Dim workbook As Excel.Workbook = excelApp.Workbooks.Open(csvFileName)
        ' 保存工作簿为xlsx格式,51通用參數
        workbook.SaveAs(xlsxFileName, 51)
        ' 关闭工作簿
        workbook.Close()
        ' 退出Excel应用程序
        excelApp.Quit()
        ' 删除原始的CSV文件
        Kill(csvFileName)
        ' 释放对象
        workbook = Nothing
        excelApp = Nothing
    End Sub

总结

对于需要产出文档的大量数据dt而言,将对应数据以csv文本格式汇出,最大优势就是简单快捷。
其次只需要通过Excel实例组件另存为想要的其他文档形式即可。

Visual Basic .NET (VB.NET) 实现大量数据查询产出.csv并转换为.xlsx格式文档

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值