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

news2024/12/23 22:20:15

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


需求

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

在这里插入图片描述


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 & "<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 代码如下

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 & "<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

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 ,需要引入以下依赖。
在这里插入图片描述
在这里插入图片描述



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/902968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

整理mongodb文档:批量操作

个人博客 整理mongodb文档:批量操作 个人公众号&#xff0c;求关注&#xff0c;文章如有不明&#xff0c;请指出。 文章概叙 本文讲的是关于bulkwrite的用法&#xff0c;依旧是在shell下使用。 关于批量操作 Performs multiple write operations with controls for order …

Eureka:服务注册-信息配置-自我保护机制

首先在提供者服务下&#xff0c;添加一个依赖 <!-- Eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version><…

【模块系列】AHT10温湿度模块

前言 以下是AHT10模块官网介绍原话。还有就是官网已经显示停产了&#xff0c;不过淘宝还是有小模块玩玩的。 AHT10是一款高精度&#xff0c;完全校准&#xff0c;贴片封装的温湿度传感器&#xff0c;MEMS的制作工艺&#xff0c;确保产品具有极高的可靠性与卓越的长期稳定性。传…

【网络基础】数据链路层

【网络基础】数据链路层 文章目录 【网络基础】数据链路层1、对比网络层2、以太网2.1 基本概念2.2 类似技术2.3 以太网帧 3、MAC地址对比IP地址 4、MTU4.1 对IP协议影响4.2 对UDP协议影响4.3 对TCP协议影响4.4 地址、MTU查看 5、ARP协议5.1 协议作用5.2 协议工作流程5.3 数据报…

第一章:SpringBoot基础入门

第一章&#xff1a;SpringBoot基础入门 1.1&#xff1a;Spring与SpinrBoot Spring能做什么 Spring的能力 Spring的生态 网址&#xff1a;https://spring.io/projects/spring-boot 覆盖了&#xff1a;Web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等。 …

面试题 : Top-k问题

目录 题目 示例 提示 开始解题 1.思路 2.解题代码 3.时间复杂度 4.运行结果 ​编辑 目前问题 真正的解法 1.以找前K个最大的元素为例 2.代码执行过程&&时间复杂度的计算 3.画图演示代码执行过程 4.解题代码 两种解法的比较 完结撒花✿✿ヽ(▽)ノ✿✿ …

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息

文章目录 演示CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息lookupSignalDBLookup代码问题:DBLookup(信号名).AttributeName报错问题: motorola格式的信号使用DBLookup获取信号的bitstart跟ig模块里的信息不一样演示 CAPL通过lookupSignal和DBLookup获取DBC信号的属性…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码

python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及原生安卓接入案例代码案例 源码地址:keyxh/newsapi: python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及安卓接入案例代码 (github.com) 目录 1.环境配…

全球地震分析寻找难以捉摸的前震信号

发现前震的本质可以帮助地震学家预测大地震。 2019 年里奇克莱斯特地震序列使南加州沙漠​​的道路发生偏移。图片来源&#xff1a;Ken Hudnut/USGS 小地震是否预示着大地震是地震学中长期存在的问题。 简而言之&#xff0c;答案是&#xff0c;有时他们会这样做。这是根据对全…

老胡的周刊(第104期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 whistle[2] Whistle 是基于 Node 实现的跨平…

点亮一颗LED灯

TOC LED0 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能APB2的外设时钟GPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode GPIO_Mode_Out_PP;//通用推挽输出GPIO_Initstructure.GPIO_Pin GPIO_Pin_5;GPIO_Initstructure.GPIO_Speed GPIO_S…

从LeakCanary看如何判断对象被回收了

前面已经了解了Service&#xff0c;Fragment&#xff0c;ViewModel对象的销毁时机&#xff0c;那么在触发销毁时机后&#xff0c;我们怎么判断这些对象有没有回收呢&#xff1f; 大家都知道在Java中有强引用&#xff0c;弱引用&#xff0c;软引用&#xff0c;虚引用四种引用方…

难缠客户背后的秘密:项目经理的危机处理手册

难缠的客户&#xff0c;每个项目经理都会或多或少遇到。他们可能会频繁更改需求&#xff0c;对细节吹毛求疵&#xff0c;或者在关键时刻提出与之前完全不同的意见。但是&#xff0c;难缠的客户其实并不都是坏事&#xff0c;他们也为项目经理提供了宝贵的学习机会。本文将深入探…

git拉取失败/git fatal终极解决方法

前言 被折磨不下20次总结出来的终极方案 步骤 0 首先关闭代理试试&#xff0c;不行就下一步 1 重置代理或者取消代理的方式 git config --global --unset http.proxy git config --global --unset https.proxy添加全局代理 git config --global http.proxy git config …

虚拟化 VMware sphere

一 VMware sphere用途&#xff1a; VMware vSphere 是 VMware 的虚拟化平台&#xff0c;可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理. 1. **虚拟化&#xff1a;** vSphere 的主要用途是将物理服务…

打印X型的图案

int main() {int n0;int i0;int j0;scanf("%d",&n);for(i0;i<n;i){for(j0;j<n;j){if(ij){printf("*");}else if((ij)n-1){printf("*");}elseprintf(" ");}printf("\n");}return 0; }

mapper.xml中循环执行多条语句时报错,但是单独拿SQL到数据库却可以执行

我是批量修改数据&#xff0c;用foreach标签包住update语句&#xff0c;报错信息如下&#xff1a; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the …

HCIP的VLAN实验

实验步骤&#xff1a; 1.首先&#xff0c;对交换机SW1进行操作&#xff0c;创建需要的VLAN并对接口进行划分 [SW1]vlan batch 2 to 6 [SW1]port-group group-member Ethernet 0/0/2 Ethernet 0/0/4 [SW1-port-group]port link-type access [SW1-port-group]port default vlan …