用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件

用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件


需求

如下图所示,为了生成csv文件导入数据库,需要将下图 的 1 和 2 拼接成 如下 3 所示的一行数据,
开头为 1 ,往后为 2 的换行数据 将换行符 替换为 如 3 所示的
, 同时 1 和 2 用双引号 括起来,中间用 逗号 隔开。

用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件_第1张图片


VB.net 代码如下

Imports System.IO

Class MainWindow

    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)

        Dim AppXls As Microsoft.Office.Interop.Excel.Application        '声明Excel对象
        Dim AppWokBook As Microsoft.Office.Interop.Excel.Workbook       '声明工作簿对象
        Dim AppSheet As Microsoft.Office.Interop.Excel.Worksheet    '声明工作表对象

        AppXls = New Microsoft.Office.Interop.Excel.Application         '实例化Excel对象
        AppXls.Workbooks.Open("C:\wang\VB_family\VBA\tool\ReadExcelTest.xlsx") '打开已经存在的EXCEL文件
        AppXls.Visible = False                                          '使Excel不可见

        AppWokBook = AppXls.Workbooks(1) 'AppWokBook对象指向工作簿"C:\wang\VB系列\VBA\tool\ReadExcelTest.xlsx"
        AppSheet = AppWokBook.Sheets("Sheet1") 'AppSheet对象指向AppWokBook对象中的表“Sheet1”,即:"C:\wang\VB系列\VBA\tool\ReadExcelTest.xlsx"中的表“Sheet1”

        ' CSV文件路径
        Dim i, t
        Dim str As String
        Dim str_Tmp As String = ""
        Dim arr = AppSheet.UsedRange.Value
        Dim csvFilePath As String = "C:\wang\VB_family\VBA\tool\file.csv"

        ' 创建CSV文件并写入数据
        Using writer As New StreamWriter(csvFilePath)
            ' 写入标题行
            writer.WriteLine("msgId, msgInfo")

            ' 写入数据行
            For i = 5 To 12
                For Each t In Split(arr(i, 8), Chr(10)) '拆分第8列,如果第8列是单行,循环只执行一次
                    If str_Tmp = "" Then
                        str_Tmp = t
                    Else
                        str_Tmp = str_Tmp & "
"
& t End If Next t '生成第i行数据 str = """" & arr(i, 7) & """," & """" & str_Tmp & """" writer.WriteLine(str) '写入第i行数据 str = "" '初始化数据 str_Tmp = "" '初始化数据 Next i End Using MsgBox("CSV file generated successfully.") Console.WriteLine("CSV file generated successfully.") Console.ReadLine() '使用完毕必须关闭EXCEL,并退出 AppXls.ActiveWorkbook.Close(SaveChanges:=True) AppXls.Quit() End Sub End Class

VBA 代码如下

Attribute VB_Name = "模块1"
Option Explicit
Sub1()
    Dim arr, i, t
    Dim rowData_tmp As String
    Dim rowData As String
    Dim fileNumber As Integer
    Dim csvFilePath As String

    arr = activesheet.usedrange
    rowData_tmp = ""
    csvFilePath = "C:\wang\VB_family\VBA\tool\file_vba.csv"

    ' 打开CSV文件以进行写入
    fileNumber = FreeFile
    Open csvFilePath For Output As #fileNumber

    ' 写入数据行
    rowData = "msgId, msgInfo" ' CSV文件的列标题
    Print #fileNumber, rowData

    For i = 5 To 12
        For Each t In Split(arr(i, 8), Chr(10)) '拆分第8列,如果第8列是单行,循环只执行一次
            If rowData_tmp = "" Then
                rowData_tmp = t
            Else
                rowData_tmp = rowData_tmp & "
"
& t End If Next t '生成第i行数据 rowData = """" & arr(i, 7) & """," & """" & rowData_tmp & """" Print #fileNumber, rowData '写入第i行数据 rowData = "" '初始化数据 rowData_tmp = "" '初始化数据 Next i ' 关闭CSV文件 Close #fileNumber MsgBox "CSV文件已创建成功!" End Sub

生成文件如下

file_vba.csv

msgId, msgInfo
"H220  G663","aaaaaaaaaaaaaaa1
bbbbbbbbbbbbbb1
cccccccccccccccc1"
"H220 G664","aaaaaaaaaaaaaaa2
bbbbbbbbbbbbbb2
cccccccccccccccc2"
"H220 G665","aaaaaaaaaaaaaaa3
bbbbbbbbbbbbbb3
cccccccccccccccc3"
"H220 G666","aaaaaaaaaaaaaaa4
bbbbbbbbbbbbbb4
cccccccccccccccc4"
"H220 G667","aaaaaaaaaaaaaaa5
bbbbbbbbbbbbbb5
cccccccccccccccc5"
"H220 G668","aaaaaaaaaaaaaaa6
bbbbbbbbbbbbbb6
cccccccccccccccc6"
"H220 G669","aaaaaaaaaaaaaaa7
bbbbbbbbbbbbbb7
cccccccccccccccc7"
"H220 G670","aaaaaaaaaaaaaaa8
bbbbbbbbbbbbbb8
cccccccccccccccc8"

总结

1 VB.NET Core WPF是一种用于开发Windows Presentation Foundation(WPF)应用程序的框架。它是基于VB.NET语言的.NET Core平台上的一个开发框架。

WPF是一种用于创建图形用户界面(GUI)的技术,它提供了许多丰富的可视化和交互功能。通过使用VB.NET语言和WPF,开发人员可以创建现代化和可定制的桌面应用程序。

在使用VB.NET Core WPF时,您可以利用.NET Core平台的许多优势,例如跨平台开发和高性能。您可以使用Visual Studio等集成开发环境来创建、调试和发布您的VB.NET Core WPF应用程序。


2 由于用到了 Microsoft.Office.Interop.Excel ,需要引入以下依赖。
用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件_第2张图片
用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件_第3张图片



你可能感兴趣的:(VBA,VB.net,.net,.net,VB.net,VBA)