设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2290|回复: 3
打印 上一主题 下一主题

[模块/函数] 【源码】VBA或VB使用二进制方式合并和拆分多个word doc文件或图片文件

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2015-6-27 10:05:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一个客户项目,需要对多个文件进行合并与拆分,研究了一番,对相关网上代码收集梳理了一下,分享给大家
注意:在Access环境,要将 App.Path 改为 Currentproject.path
VBA或VB使用二进制方式合并和拆分多个word doc文件或图片文件:
Private Sub Command1_Click()'多个word doc文件或图片文件合并
    Dim Buff() As Byte, i As Integer, Flen As Long, PicFlen As Long
    Dim DocName() As Byte, DocLen As Long
    For i = 1 To 3
        Open App.Path & "\b" & i & ".doc" For Binary Access Read As #11
            Flen = LOF(11)
            ReDim Buff(1 To Flen)
            Get #11, , Buff
        Close #11
        DocName = StrConv("b" & i & ".doc", vbFromUnicode)
        DocLen = UBound(DocName) + 1
        Open App.Path & "\AllInOne.exe" For Binary Access Write As #22
            PicFlen = LOF(22)
            Seek #22, PicFlen + 1    '设置写入点
            Put #22, , Buff    '合并数据
            Put #22, , DocName    '追加文件名数据
            Put #22, , Flen    '追加合并文件长度,4个字节
            Put #22, , DocLen    '追加合并文件名长度,4个字节
        Close #22
    Next
    MsgBox "文件合并完毕!"
End Sub

Private Sub Command2_Click()'多个word doc文件或图片文件拆分
    Dim Buff() As Byte, i As Integer, Flen As Long, PicFlen As Long
    Dim DocName() As Byte, DocLen As Long, P As Long, Pos As Long, S As String
    Open App.Path & "\AllInOne.exe" For Binary Access Read As #22
        Flen = LOF(22)
        ReDim Buff(1 To 4)
        For i = 1 To 3
            Pos = Flen - 8
            Seek #22, Pos + 1    '设置写入点
            Get #22, , Flen
            Get #22, , DocLen
            ReDim Buff(1 To DocLen)
            Pos = Pos - DocLen
            Seek #22, Pos + 1
            Get #22, , Buff
            S = App.Path & "\" & StrConv(Buff, vbUnicode)
            If Dir(S) <> "" Then Kill S
            Open S For Binary Access Write As #11
                Pos = Pos - Flen
                Seek #22, Pos + 1
                ReDim Buff(1 To Flen)
                Get #22, , Buff
                Put #11, , Buff
            Close #11
            Flen = Pos
        Next
        Seek #22, 1
        ReDim Buff(1 To Flen)
        Get #22, , Buff
    Close #22
    Kill App.Path & "\AllInOne.exe"
    Open App.Path & "\AllInOne.exe" For Binary Access Write As #11
        Put #11, , Buff
    Close #11
    MsgBox "文件拆分完毕!"

End Sub   
'原作者: ljl88900

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2015-6-27 10:09:47 | 只看该作者
记号,我的Word文件中有20150626.wav文件,双击后可以播放的,不知道这种文件在合并时有没有影响?

点击这里给我发消息

3#
 楼主| 发表于 2015-6-27 10:12:32 | 只看该作者
这个倒真没有试过,不过是二进制方式,应该还原出来还是原来的格式,不会影响。
4#
发表于 2015-6-29 11:22:27 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-26 00:52 , Processed in 0.074705 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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