ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎样用代码读取一个zip文件内的一个文本类文件的内容,参看附件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-1 10:00 | 显示全部楼层 |阅读模式
怎样用代码读取一个zip文件内的一个文本类文件的内容

1、需要用代码读取一个zip文件内的一个文本类文件的内容。调用外部7zip等程序也行;
2、需要读取这个文本文件的固定字段后面的内容:


请看附件,这个文本文件只是被改名为bookinfo.dat
内容是:


[General Information]
书名=粒状材料水力学
作者=Д.М.明滋  С.А.舒别尔特
页数=108
SS号=10254107
DX号=
出版日期=1957年11月第1版
出版社=水利出版社


需要读取“页数=”,后面的页码数字,赋值给变量。
“页数=”所在的行数不固定,但形式一定是““页数=”数字”,而且这个“页数=”在文本里是唯一的。


实在是个大难题,求老师帮忙!!


10254107.zip (31.23 KB, 下载次数: 43)


TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-1 11:05 | 显示全部楼层
最好是在内存中提取,不要解压的磁盘,因为太多了。

TA的精华主题

TA的得分主题

发表于 2016-1-1 11:37 | 显示全部楼层
weist123 发表于 2016-1-1 11:05
最好是在内存中提取,不要解压的磁盘,因为太多了。

在哪里读应该都会解压吧。
与其等待不如用这段时间解压,然后读普通文本

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-1 11:52 | 显示全部楼层
这个我查了很多资料,要用zip,winrar等软件,恐怕要解压。
但现在csdn上也有人开发不少dll,说是可以在内存中直接读取,我就是不会用。

比如:QuickZip、SharpZipLib

http://blog.csdn.net/ZIP_xG/article/details/5764299
http://blog.csdn.net/ZIP_xG/article/details/5761592

希望老师们参考。

TA的精华主题

TA的得分主题

发表于 2016-1-1 12:35 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
weist123 发表于 2016-1-1 11:52
这个我查了很多资料,要用zip,winrar等软件,恐怕要解压。
但现在csdn上也有人开发不少dll,说是可以在内 ...

是在内存中解压,不是直接可以提取的…

TA的精华主题

TA的得分主题

发表于 2016-1-5 09:19 | 显示全部楼层
Example.rar (100.74 KB, 下载次数: 160)
请查看附件,打开.xlsm文件前需要先运行install.bat

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-25 13:50 | 显示全部楼层
小fisher 发表于 2016-1-5 09:19
请查看附件,打开.xlsm文件前需要先运行install.bat

谢谢老师指导!

但是您的附件里面没有.xlsm文件啊,没有VBA程序。怎样用呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-8 09:58 | 显示全部楼层
希望有老师能解决!!查遍了网络了!

TA的精华主题

TA的得分主题

发表于 2019-1-9 11:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不使用压缩DLL在内的压缩工具,以下程序可以枚举ZIP文件中的文件信息。
Option Explicit

Private mintCnt As Integer

Private Function IsFolder(ByVal SrcPath As String) As Boolean
  IsFolder = CreateObject("Scripting.FileSystemObject").FolderExists(SrcPath)
End Function

Sub sListZipFile()
  psListZipFile "F:\Demo.zip"
End Sub

Sub psListZipFile(ByVal ivrtSPath As Variant, Optional ByVal ivrtTPath As Variant = "")
  Dim pobjSrc As Object
  Dim pbytTmp As Byte
  
  With CreateObject("Scripting.FileSystemObject")
    If .FileExists(ivrtSPath) = False Then Exit Sub
    If LCase(.GetExtensionName(ivrtSPath)) <> "zip" Then Exit Sub
    If IsFolder(ivrtTPath) = False Then ivrtTPath = .GetFile(ivrtSPath).ParentFolder.Path
  End With
  
  Application.ScreenUpdating = False
  With Me
    .Range(.UsedRange.Address).Delete
    With CreateObject("Shell.Application")
      Set pobjSrc = .Namespace(ivrtSPath)
      For pbytTmp = 0 To 8
        DoEvents
        Me.Cells(1, pbytTmp + 2) = pobjSrc.GetDetailsOf(, pbytTmp)
      Next
      mintCnt = 0
      psReadFileInfo pobjSrc
    End With
    .Columns.AutoFit
  End With
  Application.ScreenUpdating = True
  Set pobjSrc = Nothing
End Sub

Private Sub psReadFileInfo(objSrc As Object)
  Dim pobjTmp As Object
  Dim pbytTmp As Byte
  Dim pobjTnp As Object
  
  For Each pobjTmp In objSrc.items
    DoEvents
    If pobjTmp.IsFolder Then
      Set pobjTnp = pobjTmp.GetFolder
      psReadFileInfo pobjTnp
      Set pobjTnp = Nothing
    Else
      mintCnt = mintCnt + 1
      Me.Cells(mintCnt + 1, 1) = mintCnt
      For pbytTmp = 0 To 8
        DoEvents
        Me.Cells(mintCnt + 1, pbytTmp + 2) = objSrc.GetDetailsOf(pobjTmp, pbytTmp)
      Next
    End If
  Next
  Set pobjTmp = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 09:55 , Processed in 0.048240 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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