ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 329|回复: 12

[求助] 将文本文件最一行不为空的数据写入EXCEC表格中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-10 22:22 | 显示全部楼层 |阅读模式
求老师帮忙写个VBA将文本文件d:\1.txt文件最一行不为空的数据写入EXCEC表格中(附件文本文件中有小要求)

导入数据.zip

6.53 KB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-10 22:51 | 显示全部楼层
  1. Sub test()
  2.     Dim r%, i%
  3.     Dim arr, brr(1 To 1000, 1 To 4)
  4.     Dim reg As New RegExp
  5.     Dim mypath$, myname$
  6.     With reg
  7.         .Global = True
  8.         .Pattern = "\[([^\]]+)\]"
  9.     End With
  10.     mypath = ThisWorkbook.Path & ""
  11.     myname = "1.txt"

  12.     If Dir(mypath & myname) = "" Then
  13.         MsgBox mypath & myname & "不存在!"
  14.         Exit Sub
  15.     End If

  16.     With CreateObject("Adodb.Stream")
  17.         .Type = 2
  18.         .Mode = 3
  19.         .Charset = "UTF-8"
  20.         .Open
  21.         .Position = 0
  22.         .LoadFromFile mypath & myname
  23.         ss = .ReadText
  24.         arr = Split(ss, vbCrLf)
  25.         .Close
  26.     End With
  27.     m = 0
  28.     For i = UBound(arr) To LBound(arr) Step -1
  29.         If Left(arr(i), 2) = "书名" Then
  30.             Set mh = reg.Execute(arr(i))
  31.             If mh.Count > 0 Then
  32.                 m = m + 1
  33.                 For j = 0 To mh.Count - 1
  34.                     brr(m, j + 1) = mh(j).SubMatches(0)
  35.                 Next
  36.             End If
  37.         End If
  38.     Next
  39.     With Worksheets("sheet1")
  40.         .UsedRange.Offset(1, 0).ClearContents
  41.         .Columns(3).NumberFormatLocal = "@"
  42.         If m > 0 Then
  43.             .Range("a2").Resize(m, UBound(brr, 2)) = brr
  44.         End If
  45.     End With
  46. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-10 22:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
详见附件。

1.rar

99.51 KB, 下载次数: 17

TA的精华主题

TA的得分主题

发表于 2024-9-11 07:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2024-09-11_073318.jpg

TA的精华主题

TA的得分主题

发表于 2024-9-11 09:27 | 显示全部楼层
导入TXT文件最后一行数据

导入数据.zip

18.03 KB, 下载次数: 14

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-11 09:28 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()   '//2024.9.11        提取数据
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     p = ThisWorkbook.Path & ""
  5.     f = p & "1.txt"
  6.     Set sh = ThisWorkbook.Sheets("Sheet1")
  7.     zrr = Split(ReadUTFText(f), Chr(13))
  8.     ReDim brr(1 To 1, 1 To 4)
  9.     For i = UBound(zrr) To 0 Step -1
  10.         If zrr(i) <> Empty Then
  11.             s = Trim(WorksheetFunction.Trim(zrr(i)))
  12.             s = Replace(Replace(Replace(s, "[", ""), "]", ""), Chr(10), "")
  13.             b = Split(s)
  14.             If InStr(b(0), "书名") Then
  15.                 brr(1, 1) = Replace(b(0), "书名", "")
  16.                 brr(1, 2) = Replace(b(1), "作者", "")
  17.                 brr(1, 3) = Replace(b(2), "SS号", "")
  18.                 brr(1, 4) = b(4)
  19.                 Exit For
  20.             End If
  21.         End If
  22.     Next
  23.     With sh
  24.         .UsedRange.Offset(1).ClearContents
  25.         .Columns(3).NumberFormatLocal = "@"
  26.         .[a2].Resize(1, 4) = brr
  27.     End With
  28.     Application.ScreenUpdating = True
  29.     MsgBox "OK!"
  30. End Sub

  31. Function ReadUTFText(ByVal fn As String) As String
  32.     With CreateObject("ADODB.Stream")
  33.         .Type = 2
  34.         .Mode = 3
  35.         .Open
  36.         .LoadFromFile fn
  37.         .Charset = "UTF-8"
  38.         .Position = 2
  39.         ReadUTFText = .ReadText
  40.         .Close
  41.     End With
  42. End Function

复制代码


TA的精华主题

TA的得分主题

发表于 2024-9-11 09:42 | 显示全部楼层
换一个写法,改用正则提取数据

导入数据.zip

18.25 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-11 09:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
正则提取
  1. Sub ykcbf2()   '//2024.9.11        改用正则提取数据
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Set reg = CreateObject("VBScript.Regexp")
  5.     With reg
  6.         .Global = 1
  7.         .Pattern = "\[(.*?)\]"
  8.     End With
  9.     p = ThisWorkbook.Path & ""
  10.     f = p & "1.txt"
  11.     Set sh = ThisWorkbook.Sheets("Sheet1")
  12.     zrr = Split(ReadUTFText(f), Chr(13))
  13.     ReDim brr(1 To 1, 1 To 4)
  14.     For i = UBound(zrr) To 0 Step -1
  15.         If InStr(zrr(i), "书名") Then
  16.             s = zrr(i)
  17.             If reg.test(s) Then
  18.                 Set mh = reg.Execute(s)
  19.                 For Each ma In mh
  20.                     n = n + 1
  21.                     brr(1, n) = Trim(ma.SubMatches(0))
  22.                 Next ma
  23.             End If
  24.             Exit For
  25.         End If
  26.     Next
  27.     With sh
  28.         .UsedRange.Offset(1).ClearContents
  29.         .Columns(3).NumberFormatLocal = "@"
  30.         .[a2].Resize(1, 4) = brr
  31.     End With
  32.     Application.ScreenUpdating = True
  33.     MsgBox "OK!"
  34. End Sub

  35. Function ReadUTFText(ByVal fn As String) As String
  36.     With CreateObject("ADODB.Stream")
  37.         .Type = 2
  38.         .Mode = 3
  39.         .Open
  40.         .LoadFromFile fn
  41.         .Charset = "UTF-8"
  42.         .Position = 2
  43.         ReadUTFText = .ReadText
  44.         .Close
  45.     End With
  46. End Function
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-11 16:51 | 显示全部楼层
再请老师们帮哈忙解哈惑:这个1.txt 默认是ANSI编码格式,用你们的公式需要转换为UTF-8,能不能再修改下加个转换的代码?谢谢  了!!

TA的精华主题

TA的得分主题

发表于 2024-9-12 07:15 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
零柒一 发表于 2024-9-11 16:51
再请老师们帮哈忙解哈惑:这个1.txt 默认是ANSI编码格式,用你们的公式需要转换为UTF-8,能不能再修改下加个 ...

'使用xml不转码参考

Sub xml提取txt文本()
Dim r%, s, t%, f$, hp As Object, ar, br$()

f = ThisWorkbook.Path & "\1.txt" '指定文件
Set hp = CreateObject("Microsoft.Xmlhttp")
hp.Open "GET", f, False
hp.Send

s = hp.ResponseText
ar = Split(s, vbCrLf)
r = Ubound(ar)
ar = Replace(Replace(ar(r), "[", vbCrLf), "]", vbCrLf)
ar = Split(ar, vbCrLf)
r = Ubound(ar)

[a:d].Clear
[a:d].NumberFormatLocal = "@"
ReDim br(1 To r \ 4, 1 To r \ 2)
For t = 0 To r - 1
    s = (t + 2) Mod 2 + 1
    br(s, Int((t + 2) / 2)) = Trim(ar(t))
Next

Cells(1,1).ReSize(Ubound(br), Ubound(br, 2)) = br
Set hp = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 01:39 , Processed in 0.052441 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表