VBA每日一练(2),将txt 的部分/全部内容 导入到EXCEL 您所在的位置:网站首页 Excel导入TXT VBA每日一练(2),将txt 的部分/全部内容 导入到EXCEL

VBA每日一练(2),将txt 的部分/全部内容 导入到EXCEL

2023-12-18 17:06| 来源: 网络整理| 查看: 265

思路

1 最直接的办法,应该是把 TXT 文件拖入到EXCEL,或用EXCEL打开?

2先把1个TXT读入进来

3把多个TXT读入到EXCEL的多个 SHEET

 

第1版

找网上的代码学习自己魔改了一下,还有不少问题

错误1:又忘了变量赋值和对象赋值,set不应该乱用的问题1:这个版本,没解决中文读取的问题,乱码问题2:现在都是读取到一个单元格,如何分行读取呢? Sub readfromtxt1() Dim fso As Object Dim f1 Dim filepath1 '我命名经常习惯+1,避免用到系统关键字保留字等 filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '错误set filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '因为set只能用来设置对象,这种变量不需要用set,应该用let 或默认不写 Set fso = CreateObject("scripting.filesystemobject") Set f1 = fso.opentextfile(filepath1) readtext = f1.readall Sheets("sheet1").Cells(1, 1) = readtext Debug.Print "读取完成" '这个版本读内容,数字字母可以,但是中文会解码错误,可能需要设置unicode格式等 End Sub

 

解决乱码问题

最后还是从 stackoverflow和 官方doc上查到的

https://stackoverflow.com/questions/2524703/save-text-file-utf-8-encoded-with-vba

https://stackoverflow.com/questions/4143524/can-i-export-excel-data-with-utf-8-without-bom

https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/aa265018(v=vs.60)?redirectedfrom=MSDN

 

 

OpenTextFile(filename、[ iomode、[ create、[ format ]]])

根据查到的方法 format格式,是一个tristate

国内网站上找的解释: 0或默认为ASC2格式,-1为unicode,2为系统默认模式    (这是错误的)

官方doc解释: unicode    Optional. Boolean value that indicates whether the file is created as a Unicode or ASCII file. The value is True if the file is created as a Unicode file; False if it's created as an ASCII file. If omitted, an ASCII file is assumed.

也就是 unicode这个属性值。填写false 或0,或不填也认为是false ,就是用ASC2,,而填其他任意数,只要非0,非false都是Unicode的意思。也就是 1 ,-1 ,2 ,5,-666,999都是unicode

 

 1 Set f1 = fso.opentextfile(filepath1, , , tristate = 1)   语法正常

2  另外TXT文档的,点另存为,必须修改为 unicode才行,不能是utf-8,好像是因为fso不能处理utf-8

Sub readfromtxt1() Dim fso As Object Dim f1 Dim filepath1 '我命名经常习惯+1,避免用到系统关键字保留字等 filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '错误set filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '因为set只能用来设置对象,这种变量不需要用set,应该用let 或默认不写 Set fso = CreateObject("scripting.filesystemobject") Set f1 = fso.opentextfile(filepath1, , , tristate = 1) readtext = f1.readall Sheets("sheet1").Cells(1, 1) = readtext Debug.Print "读取完成" '这个版本读内容,数字字母可以,但是中文会解码错误,可能需要设置unicode格式等 End Sub

 

 

第2版: 实现读多行,和循环读取N行

现在尝试下

1 如何逐行读,而不是全部读取

2 如何把内容分别写到不同的单元格

3 如何把内容写到多个sheet里

 

逐次读取多行

下面这个只能实现读1行1行的逐次读取多行,每次读取一行后,会自动挪到下一行

Sub readfromtxt1() Dim fso As Object Dim f1 Dim filepath1 '我命名经常习惯+1,避免用到系统关键字保留字等 Dim i filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '错误set filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '因为set只能用来设置对象,这种变量不需要用set,应该用let 或默认不写 Set fso = CreateObject("scripting.filesystemobject") Set f1 = fso.opentextfile(filepath1, , , tristate = 1) Sheets("sheet1").Cells(1, 1) = f1.readline Sheets("sheet1").Cells(2, 1) = f1.readline Sheets("sheet1").Cells(3, 1) = f1.readline Debug.Print "读取完成" End Sub

 

这样可以循环读取N行,但是最大行数还是未知 Sub readfromtxt1() Dim fso As Object Dim f1 Dim filepath1 '我命名经常习惯+1,避免用到系统关键字保留字等 Dim i filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '错误set filepath1 = "C:\Users\Administrator\Desktop\test101.txt" '因为set只能用来设置对象,这种变量不需要用set,应该用let 或默认不写 Set fso = CreateObject("scripting.filesystemobject") Set f1 = fso.opentextfile(filepath1, , , tristate = 1) For i = 1 To 10 readtext = f1.readline Sheets("sheet1").Cells(i, 1) = readtext Next i Debug.Print "读取完成" End Sub

 

 

 

 

首页博客学院下载论坛问答商城活动专题招聘ITeyeGitChatAPPVIP会员续费8折 Python进阶之路 写博客 Markdown编辑器 富文本编辑器 我的主页 文章管理 评论管理 分类专栏 订阅专栏 博客搬家 博文数据统计Beta版 百度热搜词条 自定义百度统计 等级权益 订单收益 博客打赏 博客设置 博客模块管理 自定义域名 CSDN博客交流群 打开手机QQ扫码 或点击这里加入群聊 QQ客服 VBA每日一练,VBA 文件操作相关知识, 涉及 #1, eof(), lof() 45/100 文章标签: 添加标签 最多添加5个标签 分类专栏: VBA 添加新分类 最多添加3个标签,#为二级分类 资源信息: 请填写资源链接 上传资源 文章类型: * 申请原创将启用(Creative Commons )版权模板,如果不是原创文章,请选择转载或翻译 原创文章默认开启打赏, 打赏管理 发布形式: Sub richardliu1() Dim fso Dim f1 Dim str1 Dim i i = 1 str1 = 1 Set fso = CreateObject("scripting.filesystemobject") Set f1 = fso.opentextfile("C:\Users\Administrator\Desktop\test102.TXT") Do While Not Len(str1) '判断是否取到空行 str1 = f1.readline Worksheets("a").Cells(i, 3) = str1 i = i + 1 Debug.Print str1 Loop End Sub 第3版:后续思考, 实现智能读取txt的最大行?---- 没识别最大行,但能到文件尾 自动读取文档的最大行,可以识别到文档最尾  Sub jackma3() Dim str1 i = 1 Open "C:\Users\Administrator\Desktop\test102.TXT" For Input As #1 Do While Not EOF(1) Line Input #1, str1 Worksheets("a").Cells(i, 1) = str1 i = i + 1 Debug.Print str1 Loop Close #1 End Sub

 

 

额外版  封装为函数,可以在其他  过程,函数里调用

可以把这个封装为一个函数,作为自定义函数,在EXCEL直接调用

单元格里输入公式

=readtext("C:\Users\Administrator\Desktop\test101.txt")

Function readtext(filepath As String) As String Dim fso As Object Dim f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(filepath) readtext = f.ReadAll End Function

或者在其他sub内调用   

Sub testsub101() Str1 = readtext("C:\Users\Administrator\Desktop\test101.txt") Cells(1, 3) = Str1 End Sub

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有