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

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


需求

如下图所示,为了生成csv文件导入数据库,需要将下图 的 1 和 2 拼接成 如下 3 所示的一行数据,

开头为 1 ,往后为 2 的换行数据 将换行符 替换为 如 3 所示的 <br> , 同时 1 和 2 用双引号 括起来,中间用 逗号 隔开。


VB.net 代码如下

vbnet 复制代码
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 & "<br>" & 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 代码如下

vbnet 复制代码
Attribute VB_Name = "模块1"
Option Explicit
Sub 宏1()
    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 & "<br>" & 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

vbnet 复制代码
msgId, msgInfo
"H220  G663","aaaaaaaaaaaaaaa1<br>bbbbbbbbbbbbbb1<br>cccccccccccccccc1"
"H220  G664","aaaaaaaaaaaaaaa2<br>bbbbbbbbbbbbbb2<br>cccccccccccccccc2"
"H220  G665","aaaaaaaaaaaaaaa3<br>bbbbbbbbbbbbbb3<br>cccccccccccccccc3"
"H220  G666","aaaaaaaaaaaaaaa4<br>bbbbbbbbbbbbbb4<br>cccccccccccccccc4"
"H220  G667","aaaaaaaaaaaaaaa5<br>bbbbbbbbbbbbbb5<br>cccccccccccccccc5"
"H220  G668","aaaaaaaaaaaaaaa6<br>bbbbbbbbbbbbbb6<br>cccccccccccccccc6"
"H220  G669","aaaaaaaaaaaaaaa7<br>bbbbbbbbbbbbbb7<br>cccccccccccccccc7"
"H220  G670","aaaaaaaaaaaaaaa8<br>bbbbbbbbbbbbbb8<br>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编程开发20年6 小时前
C#,VB.NET数组去重复,提取键名和重复键和非重复键
c#·.net·linq·取唯一键·去重复·重复数量
Full Stack Developme6 小时前
java.net 包详解
java·python·.net
假装我不帅18 小时前
wsl+vscode开发.net项目
ide·vscode·.net
CodeCraft Studio1 天前
国产化PDF处理控件Spire.PDF教程:如何在 C# 中从 HTML 和 PDF 模板生成 PDF
pdf·c#·html·.net·spire.pdf·pdf文档开发·html创建模板pdf
ysdysyn1 天前
.NET 10深度解析:性能革新与开发生态的全新篇章
c#·.net
fs哆哆2 天前
在VB.NET中,有没有 ?.这个运算符
java·开发语言·.net
荔园微风2 天前
微软ML.NET技术详解:从数据科学到生产部署的全栈解决方案
microsoft·.net
荔园微风2 天前
ML.NET机器学习框架基本流程介绍
人工智能·机器学习·.net
InCerry3 天前
为 .NET 10 GC(DATAS)做准备
性能优化·c#·.net·gc