ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何将文档里的多篇文章分别提取出来形成单独文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-5-18 21:49 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

如果一篇文档中有多篇文章,请教如何以标题为标志,将这些文章分别提取出来作为单独文档。(这些文章的标题均为居中对齐,所有正文内容都不是居中对齐)

TA的精华主题

TA的得分主题

发表于 2008-5-18 22:06 | 显示全部楼层

不难,先按标题格式查找分节,然后把每节另存为一个单独文件,具体得看你的文档,用VBA可完成

相关内容论坛中有

TA的精华主题

TA的得分主题

发表于 2008-5-18 22:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

Sub TEST()

    On Error Resume Next
    Dim mySec As Section
    Dim myName As String
    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchWildcards = False
    End With
    Do While Selection.Find.Execute = True
        Selection.InsertBreak Type:=wdSectionBreakNextPage
        Selection.MoveDown wdLine, 3
    Loop
    For Each mySec In ActiveDocument.Sections
        mySec.Range.Select
        Selection.Copy
        Documents.Add
        Selection.Paste
        myName = Mid(ActiveDocument.Paragraphs(1).Range.Text, 1, Len(ActiveDocument.Paragraphs(1).Range.Text) - 1)
        ActiveDocument.SaveAs "C:\" & myName & ".doc"
        ActiveDocument.Close False
    Next
End Sub

大致这个思路,可以根据自己需求更改代码,我的测试文档和生成文件在下面

JbHWOHK5.rar (21.72 KB, 下载次数: 36)

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-18 23:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢wdwc兄的代码,收藏学习!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-19 11:56 | 显示全部楼层

请教wdwc兄,如果要将生成的文档保存在自定义文件夹下,即不固定某一文件夹,而是可以自由选择文件夹。该如何修改代码?

TA的精华主题

TA的得分主题

发表于 2008-5-19 15:28 | 显示全部楼层

可以:

用inputbox 获得输入文件夹路径是一个简单办法。

Sub TEST()

    On Error Resume Next
    Dim mySec As Section
    Dim myPath, myName As String
    myPath = InputBox(prompt:="请填入欲保存文件夹路径" & Chr(13) & "如: C:\新建文件夹", Title:="填入路径") & "\"
    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchWildcards = False
    End With
    Do While Selection.Find.Execute = True
        Selection.InsertBreak Type:=wdSectionBreakNextPage
        Selection.MoveDown wdLine, 3
    Loop
    For Each mySec In ActiveDocument.Sections
        mySec.Range.Select
        Selection.Copy
        Documents.Add
        Selection.Paste
        myName = Mid(ActiveDocument.Paragraphs(1).Range.Text, 1, Len(ActiveDocument.Paragraphs(1).Range.Text) - 1)
        ActiveDocument.SaveAs myPath & myName & ".doc"
        ActiveDocument.Close False
    Next
End Sub

注意文件夹路径可以通过文件夹地址栏复制获得,填写时结尾不要带 “\”。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-19 16:53 | 显示全部楼层

谢谢wdwc兄,测试成功!

用inputbox 获得输入文件夹路径是一个好办法。

不知能否采用弹出“浏览”界面,然后选择要保存的路径的方式?

我想这可能更人性化些。

TA的精华主题

TA的得分主题

发表于 2008-5-19 19:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
利用另存对话框获得欲保存文件夹路径,在另存时建议改一下文件名,以免在后面提取文章时由于文件名相同而出错误。

歪门邪道,勉强能用,请楼主测试

Sub TEST()

    On Error Resume Next
    Dim mySec As Section
    Dim myPath, myName As String
    Dialogs(wdDialogFileSaveAs).Show
    myPath = ActiveDocument.Path & "\"
    'MsgBox myPath
    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchWildcards = False
    End With
    Do While Selection.Find.Execute = True
        Selection.InsertBreak Type:=wdSectionBreakNextPage
        Selection.MoveDown wdLine, 3
    Loop
    For Each mySec In ActiveDocument.Sections
        mySec.Range.Select
        Selection.Copy
        Documents.Add
        Selection.Paste
        myName = Mid(ActiveDocument.Paragraphs(1).Range.Text, 1, Len(ActiveDocument.Paragraphs(1).Range.Text) - 1)
        ActiveDocument.SaveAs myPath & myName & ".doc"
        ActiveDocument.Close False
    Next
End Sub

[此贴子已经被作者于2008-5-19 19:49:06编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-19 20:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用wdwc在2008-5-19 19:45:42的发言:
利用另存对话框获得欲保存文件夹路径,在另存时建议改一下文件名,以免在后面提取文章时由于文件名相同而出错误。

歪门邪道,勉强能用,请楼主测试

Sub TEST()

    On Error Resume Next
    Dim mySec As Section
    Dim myPath, myName As String
    Dialogs(wdDialogFileSaveAs).Show
    myPath = ActiveDocument.Path & "\"
    'MsgBox myPath
    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchWildcards = False
    End With
    Do While Selection.Find.Execute = True
        Selection.InsertBreak Type:=wdSectionBreakNextPage
        Selection.MoveDown wdLine, 3
    Loop
    For Each mySec In ActiveDocument.Sections
        mySec.Range.Select
        Selection.Copy
        Documents.Add
        Selection.Paste
        myName = Mid(ActiveDocument.Paragraphs(1).Range.Text, 1, Len(ActiveDocument.Paragraphs(1).Range.Text) - 1)
        ActiveDocument.SaveAs myPath & myName & ".doc"
        ActiveDocument.Close False
    Next
End Sub


谢谢wdwc兄,可惜这样会多出一个文件。

TA的精华主题

TA的得分主题

发表于 2008-5-20 07:15 | 显示全部楼层

在后边加上一个删除语句就可以了

Sub TEST()

    On Error Resume Next
    Dim mySec As Section
    Dim myPath, myName As String
lc: If Dialogs(wdDialogFileSaveAs).Show <> -1 Then
    MsgBox "请选择保存路径!"
    GoTo lc
    End If
    myPath = ActiveDocument.Path & "\"
    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchWildcards = False
    End With
    Do While Selection.Find.Execute = True
        Selection.InsertBreak Type:=wdSectionBreakNextPage
        Selection.MoveDown wdLine, 3
    Loop
    For Each mySec In ActiveDocument.Sections
        mySec.Range.Select
        Selection.Copy
        Documents.Add
        Selection.Paste
        myName = Mid(ActiveDocument.Paragraphs(1).Range.Text, 1, Len(ActiveDocument.Paragraphs(1).Range.Text) - 1)
        ActiveDocument.SaveAs myPath & myName & ".doc"
        ActiveDocument.Close False
    Next
    myName = ActiveDocument.FullName
    ActiveDocument.Close False
    Kill myName
End Sub

这回不多了。

[此贴子已经被作者于2008-5-20 7:25:35编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 10:43 , Processed in 0.025543 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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