ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 一键批量提取所有WORD中所有表格与段落的内容

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-11-23 13:49 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 考试加油站 于 2020-11-24 11:18 编辑

提取表格内容部分
  1. Sub 批量提取多个WORD内容正文按表格()
  2.     Dim NEWD As Object, wddct As Object
  3.     Dim f, arr, brr, i&, j&
  4.     f = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
  5.     If TypeName(f) = "Boolean" Then
  6.         Exit Sub
  7.     Else
  8.         FPATH = Replace(f(1), Dir(f(1)), "")
  9.     End If
  10.     f = Dir(FPATH & "*.doc*")
  11.     Set NEWD = CreateObject("Word.Application")
  12.     i = 2
  13.     Do Until f = ""                                   '只要文件名存在
  14.         f = FPATH & f
  15.         Set Wd = NEWD.Documents.Open(filename:=f)
  16.         With Wd
  17.             m = 1
  18.             On Error Resume Next
  19.             '提取每个表格内容
  20.             For b = 1 To Wd.Tables.Count
  21.                 For z = 1 To .Tables(b).Range.Cells.Count    '个单元格
  22.                     st = .Tables(b).Range.Cells(z)
  23.                     m = m + 1
  24.                     Cells(i, m) = Trim(left(st, Len(st) - 2))
  25.                     Cells(i, 1) = Wd
  26.                 Next
  27.             Next
  28.         End With
  29.         Set Wd = Nothing
  30.         f = Dir
  31.         i = i + 1
  32.     Loop
  33.     NEWD.Quit
  34.     Set NEWD = Nothing
  35.     Application.ScreenUpdating = True
  36. End Sub
复制代码

测试文件.rar (41.93 KB, 下载次数: 201)

提取段落内容部分
  1. Sub 批量提取多个WORD内容正文段落()
  2.     Dim NEWD As Object, wddct As Object
  3.     Dim f, arr, brr, i&, j&
  4.     '选择文档开始
  5.     f = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
  6.     If TypeName(f) = "Boolean" Then
  7.         Exit Sub
  8.     Else
  9.         FPATH = Replace(f(1), Dir(f(1)), "")
  10.     End If
  11.     f = Dir(FPATH & "*.doc*")

  12.     Set NEWD = CreateObject("Word.Application")
  13.     i = 2
  14.     Do Until f = ""                                   '只要文件名存在
  15.         f = FPATH & f
  16.         Set Wd = NEWD.Documents.Open(Filename:=f)
  17.         With Wd
  18.             '横列提取每个段落内容
  19.             On Error Resume Next
  20.             For d = 1 To .Paragraphs.Count
  21.                 st = .Paragraphs(d).Range.Text
  22.                 Cells(i, d + 1) = Trim(Left(st, Len(st) - 2))    '横列提取
  23.                 Cells(1, d + 1) = "第" & d & "段内容"
  24.                 Cells(i, 1) = Wd
  25.             Next
  26.         End With
  27.         Set Wd = Nothing
  28.         f = Dir
  29.         i = i + 1
  30.     Loop
  31.     NEWD.Quit
  32.     Set NEWD = Nothing
  33.     Application.ScreenUpdating = True
  34. End Sub




复制代码

评分

7

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-11-23 16:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 考试加油站 于 2020-12-17 08:17 编辑

Sub 批量修改文件夹下WORD字体大小等()
    Dim strFileName As String, Fld
    Dim strPath As String
    Dim wApp As Object
    Dim wDoc As Object
    Set Fld = CreateObject("shell.application").BrowseForFolder(0, "请选择文件夹", 0)
    If Not Fld Is Nothing Then strPath = Fld.Self.path & "\"
    strFileName = Dir(strPath & "*.doc*")
    Set wApp = CreateObject("Word.Application")
    Do While strFileName <> ""
        Set wDoc = wApp.Documents.Open(strPath & strFileName)
        With wApp.Selection
            .WholeStory
            .Font.Bold = True                         '加粗
            .Font.Italic = True                       '斜体
            .Font.Underline = True                    '下划线
            .Range.HighlightColorIndex = 3            '高亮颜色
            .Font.Color = vbRed                       '字体颜色
            .Font.Size = 30                           '字体大小
        End With
        wDoc.Save
        wDoc.Close
        strFileName = Dir
    Loop
    Set wDoc = Nothing
    wApp.Quit
    Set wApp = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-16 20:52 | 显示全部楼层
Sub 原表格原位置提取到一张表()
    Dim tim2 As Date: tim1 = Timer
    Cells.ClearContents
    Cells.ClearContents
    Dim NEWD As Object, wddct As Object
    Dim F, arr, brr, i&, j&
    F = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
    If TypeName(F) = "Boolean" Then
        Exit Sub
    Else
        FPATH = Replace(F(1), Dir(F(1)), "")
    End If
    F = Dir(FPATH & "*.doc*")
    Set NEWD = CreateObject("Word.Application")
    Do Until F = ""                                   '只要文件名存在
        F = FPATH & F
        Set WD = NEWD.Documents.Open(Filename:=F)
        With WD
            On Error Resume Next
            '提取每个表格内容
            For b = 1 To WD.Tables.Count
                With .Tables(b)
                    r = WD.Tables(b).Rows.Count
                    C = WD.Tables(b).Columns.Count
                    ReDim arr(1 To r, 1 To C)
                    For i = 1 To r
                        For j = 1 To C
                            arr(i, j) = Application.Clean(WD.Tables(b).Cell(i, j).Range)
                        Next
                    Next
                End With
                X = Sheet1.UsedRange.Rows.Count + 1
                Sheet1.Cells(X, 2).Resize(r, C) = arr
                Sheet1.Cells(X, 1) = WD
            Next
            .Close False
        End With
        Set WD = Nothing
        F = Dir
    Loop
    NEWD.Quit
    Set NEWD = Nothing
    Application.ScreenUpdating = True
    tim2 = Timer
    MsgBox Format(tim2 - tim1, "提取完成,共耗时:0.00秒"), 64, "时间统计"
End Sub
测试文件.rar (45.76 KB, 下载次数: 177)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-16 20:59 | 显示全部楼层
WORD中一张表格复制到一个EXCELL中
  1. Sub 批量复制WORD表格EXCELL的多个表格中()

  2.     Dim tim2 As Date: tim1 = Timer
  3.     Cells.ClearContents
  4.     Cells.NumberFormat = "@"

  5.     Dim NEWD As Object, wddct As Object
  6.     Dim F, arr, brr, i&, j&
  7.     F = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
  8.     If TypeName(F) = "Boolean" Then
  9.         Exit Sub
  10.     Else
  11.         FPATH = Replace(F(1), Dir(F(1)), "")
  12.     End If
  13.     F = Dir(FPATH & "*.doc*")
  14.     Set NEWD = CreateObject("Word.Application")
  15.     i = 2
  16.     Do Until F = ""                                   '只要文件名存在
  17.         F = FPATH & F
  18.         Set WD = NEWD.Documents.Open(Filename:=F)
  19.         With WD
  20.             WDN = Split(WD, ".")(0)
  21.             On Error Resume Next
  22.             '提取每个表格内容
  23.             For Each TB In .Tables
  24.                 N = N + 1
  25.                 If N = 1 Then
  26.                     Sheet1.Range("A1").Activate
  27.                     TB.Range.Copy
  28.                     Sheet1.Paste
  29.                 Else
  30.                     K = K + 1
  31.                     Sheets.Add After:=Sheets(Sheets.Count)
  32.                     Sheets(Sheets.Count).Name = WDN & "-" & K
  33.                     TB.Range.Copy
  34.                     Sheets(Sheets.Count).Paste
  35.                 End If
  36.                
  37.             Next
  38.         End With
  39.         Set WD = Nothing
  40.         F = Dir
  41.         i = i + 1
  42.     Loop
  43.     NEWD.Quit
  44.     Set NEWD = Nothing
  45.     Application.ScreenUpdating = True
  46.     tim2 = Timer
  47.     MsgBox Format(tim2 - tim1, "提取完成,共耗时:0.00秒"), 64, "时间统计"
  48. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-16 21:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 考试加油站 于 2020-12-17 10:25 编辑

Sub 批量复制WORD表格到本表()
'更多下载www.15161218108.ys168.com
    Dim tim2 As Date: tim1 = Timer
    Cells.ClearContents
    Dim NEWD As Object, wddct As Object
    Dim F, arr, brr, i&, j&
    F = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
    If TypeName(F) = "Boolean" Then
        Exit Sub
    Else
        FPATH = Replace(F(1), Dir(F(1)), "")
    End If
    F = Dir(FPATH & "*.doc*")
    Set NEWD = CreateObject("Word.Application")
    i = 2
    Do Until F = ""                                   '只要文件名存在
        F = FPATH & F
        Set WD = NEWD.Documents.Open(filename:=F)
        With WD
            WDN = Split(WD, ".")(0)
            On Error Resume Next
            '提取每个表格内容
            For Each TB In .Tables
                N = N + 1
                If N = 1 Then
                    Range("B1").Activate
                    TB.Range.Copy
                    Sheet1.Paste
                Else
                    r = Sheet1.UsedRange.SpecialCells(11).Row + 1
                    Range("B" & r).Activate
                    TB.Range.Copy
                   Sheet1.Paste
                  ' Sheet1.PasteSpecial Format:="文本", Link:=False, DisplayAsIcon:=False
                   Sheet1.Selection.Borders.LineStyle = xlContinuous
                End If
                With Selection
                    BT = .Columns(1).Offset(, -1 * (.Column - 1)).Address
                    Range(BT) = WDN
                End With
            Next
        End With
        Set WD = Nothing
        F = Dir
        i = i + 1
    Loop
    NEWD.Quit
    Set NEWD = Nothing
    Application.ScreenUpdating = True
    tim2 = Timer
    MsgBox Format(tim2 - tim1, "提取完成,共耗时:0.00秒"), 64, "时间统计"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-16 21:12 | 显示全部楼层
Sub 批量转换WORD为PDF格式()   
'如不成功,可引用WORD控件
    Dim tim2 As Date: tim1 = Timer
    Dim F, myName, myName1 As String
    Dim SaveAsPDF As String
    Dim arr() As String
    Dim WD As Object
    Application.ScreenUpdating = False
    F = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
    If TypeName(F) = "Boolean" Then
        Exit Sub
    Else
        FPATH = Replace(F(1), Dir(F(1)), "")
    End If
    F = Dir(FPATH & "*.doc*")
    Set NEWD = CreateObject("Word.Application")
    Do Until F = ""                                   '只要文件名存在
        F = FPATH & F
        Set WD = NEWD.Documents.Open(filename:=F)
        With WD
            On Error Resume Next
            '取得每个word文档对象,以下命令可根据实际情况调整,此处为另存pdf
            arr = Split(F, ".")
            SaveAsPDF = arr(0) & Int(Rnd() * 1000) & ".pdf"
            WD.ExportAsFixedFormat outputfilename:=SaveAsPDF, exportformat:=wdExportFormatPDF
        End With
        Set WD = Nothing
        F = Dir
    Loop
    NEWD.Quit
    Set NEWD = Nothing
    Application.ScreenUpdating = True
    tim2 = Timer
    MsgBox Format(tim2 - tim1, "提取完成,共耗时:0.00秒"), 64, "时间统计"
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-16 21:15 | 显示全部楼层
只复制WORD中其中一张表格内容

  1. Sub 提取WORD中木一个表格到EXCELL中()
  2. '更多下载www.15161218108.ys168.com
  3.     Dim tim2 As Date: tim1 = Timer
  4.     Dim JJ As Integer
  5.     JJ = Application.InputBox("请输入想复制的工作是WORD中的第几个表!", "提示", , , , , , 1)
  6.     Cells.ClearContents
  7.    
  8.     Dim NEWD As Object, wddct As Object
  9.     Dim F, arr, brr, i&, j&
  10.     F = Application.GetOpenFilename(fileFilter:="Word文件(*.doc*),*.doc*", Title:="选择Word文件", MultiSelect:=True)
  11.     If TypeName(F) = "Boolean" Then
  12.         Exit Sub
  13.     Else
  14.         FPATH = Replace(F(1), Dir(F(1)), "")
  15.     End If
  16.     F = Dir(FPATH & "*.doc*")
  17.     Set NEWD = CreateObject("Word.Application")
  18.     i = 2
  19.     Do Until F = ""                                   '只要文件名存在
  20.         F = FPATH & F
  21.         Set WD = NEWD.Documents.Open(filename:=F)
  22.         With WD
  23.             WDN = Split(WD, ".")(0)
  24.             On Error Resume Next
  25.             '提取每个表格内容
  26.             'x = Application.InputBox("请输入想复制的工作是WORD中的第几个表!", "提示", , , , , , 1)
  27.             On Error Resume Next
  28.             With .Tables(JJ)
  29.                 N = N + 1
  30.                 If N = 1 Then
  31.                     Range("B1").Activate
  32.                     .Range.Copy
  33.                     Sheet1.Paste
  34.                 Else
  35.                     r = Sheet1.UsedRange.SpecialCells(11).Row + 1
  36.                     Range("B" & r).Activate
  37.                     .Range.Copy
  38.                     Sheet1.Paste
  39.                 End If
  40.                 With Selection
  41.                     BT = .Columns(1).Offset(, -1 * (.Column - 1)).Address
  42.                     Range(BT) = WDN
  43.                 End With
  44.             End With
  45.         End With
  46.         Set WD = Nothing
  47.         F = Dir
  48.         i = i + 1
  49.     Loop
  50.     NEWD.Quit
  51.     Set NEWD = Nothing
  52.     Application.ScreenUpdating = True
  53.     tim2 = Timer
  54.     MsgBox Format(tim2 - tim1, "提取完成,共耗时:0.00秒"), 64, "时间统计"
  55. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-17 16:27 | 显示全部楼层
本帖最后由 考试加油站 于 2020-12-18 09:29 编辑

QQ截图20201217162931.jpg

测试文件.rar (68.02 KB, 下载次数: 277)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-11-23 14:30 | 显示全部楼层
感谢分享,但是死机了
“excel 正在等待其它某个应用程序以完成对象链接与嵌入操作”

TA的精华主题

TA的得分主题

发表于 2020-11-23 17:17 | 显示全部楼层
对word的对象属性一直不了解。
如果要提前某一段话,或者搜索某个字符串,怎么处理呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-11-23 18:34 | 显示全部楼层
本帖最后由 考试加油站 于 2020-11-27 15:46 编辑

此处删除,合并到首页贴

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-11-23 18:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
f8b1987 发表于 2020-11-23 17:17
对word的对象属性一直不了解。
如果要提前某一段话,或者搜索某个字符串,怎么处理呢

WORD我也不是很了解,也是学习中,觉得不错,分享一下

TA的精华主题

TA的得分主题

发表于 2020-11-23 21:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
两个程序都挺好用,适应性广,多谢了。

TA的精华主题

TA的得分主题

发表于 2020-11-23 22:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
能否保留WORD中 表格的格式 呢?

TA的精华主题

TA的得分主题

发表于 2020-11-23 22:04 | 显示全部楼层
WORD的还没接触过,感谢分享

TA的精华主题

TA的得分主题

发表于 2020-11-24 08:08 | 显示全部楼层
f8b1987 发表于 2020-11-23 17:17
对word的对象属性一直不了解。
如果要提前某一段话,或者搜索某个字符串,怎么处理呢

如果是一个段落 那就遍历段落,如果只是当中的一段内容,查找
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 10:21 , Processed in 0.058808 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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