找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18072|回复: 5

[文本处理] 求批处理把1份复习题 自动生成试卷

[复制链接]
发表于 2022-5-4 17:24:40 | 显示全部楼层 |阅读模式
https://wwd.lanzouq.com/iCXQt049xfcj   所有文件在这里

目前有一份WORD复习题,想实现:
1、把生成一份测试试卷,把这份复习题中的每个红色字替换为4个“_”。
2、删除每题中的非红色字,仅保留红字,某题中如果有多组红字,则用一个全角空格隔开。前面的题号与第1步中对应不变。
3、将第2步中生成的内容追加到第1步的文件尾部,追加前插入“试题答案”字样,占一行。
PS:至此试卷部分题号是1-90题,答案部分题号也是1-90。
4、对项目编号进行文本化处理,即试卷和答案的题号都调整为普通文字。
Sub 项目编号文本化()
ActiveDocument.Content.ListFormat.ConvertNumbersToText
End Sub
  我用这个 但是之后会有一个“制表符”得替换删除,参考。
5、生成的文件名,和原文件名相同在后加“_试卷”。


就是把一份复习题,生成一份试卷,后面追加答案。

谢谢师兄,辛苦。
发表于 2022-5-5 11:31:37 | 显示全部楼层
Module1.bas
这是vba模块,导入就行
  1. Attribute VB_Name = "Module1"
  2. Sub NewExam2()
  3. Attribute NewExam2.VB_Description = "生成试题和答案,在同一文档docx"
  4. Attribute NewExam2.VB_ProcData.VB_Invoke_Func = "Normal.Module1.NewExam2"
  5. ' 宏
  6. ' 生成新试题和答案
  7. '
  8. On Error Resume Next
  9. Const ExamName As String = "_试卷.docx"

  10. Dim docSrc As Document, docExam As Document
  11. Dim i As Long, oRange As range, oRange2 As range, itempara As Paragraph
  12. Dim fso, examPath As String
  13. Set fso = CreateObject("Scripting.FileSystemObject")

  14. Set docSrc = ActiveDocument
  15. If docSrc Is Nothing Then Exit Sub
  16. examPath = fso.BuildPath(docSrc.Path, fso.GetBaseName(docSrc.Name) & ExamName)
  17. If fso.FileExists(examPath) Then fso.DeleteFile examPath, True
  18. If Err.Number <> 0 Then Exit Sub
  19. docSrc.SaveAs2 examPath
  20. Set docExam = ActiveDocument

  21. Application.ScreenUpdating = False

  22. docExam.ConvertNumbersToText

  23. Set oRange = docExam.Content
  24. oRange.SetRange oRange.Paragraphs(2).range.Start, oRange.End - 1
  25. With oRange.Find
  26.     .ClearFormatting
  27.     .Text = "(^t{1,})"
  28.     .MatchWildcards = True
  29.     With .Replacement
  30.         .ClearFormatting
  31.         .Text = ""
  32.     End With
  33.     .Execute Replace:=wdReplaceAll
  34. End With
  35. oRange.Copy

  36. Selection.EndKey wdStory
  37. Selection.InsertNewPage
  38. Selection.EndKey wdStory
  39. Selection.InsertAfter "试题答案:"
  40. Selection.InsertParagraphAfter
  41. Selection.EndKey wdStory
  42. Set oRange2 = Selection.range
  43. oRange2.Paste

  44. With oRange.Find
  45.     .ClearFormatting
  46.     .Font.ColorIndex = wdRed
  47.     .Format = True
  48.     .Text = "*"
  49.     .MatchWildcards = True
  50.     With .Replacement
  51.         .ClearFormatting
  52.         .Font.ColorIndex = wdAuto
  53.         .Text = "____"
  54.     End With
  55.     .Execute Replace:=wdReplaceAll
  56. End With
  57. For Each itempara In oRange2.Paragraphs
  58.     With itempara.range
  59.         .MoveStartUntil "."
  60.         .MoveStart wdCharacter, 1
  61.         .MoveEnd wdCharacter, -1
  62.         With .Find
  63.             .ClearFormatting
  64.             .Font.ColorIndex = wdAuto
  65.             .Format = True
  66.             .Text = "*"
  67.             .MatchWildcards = True
  68.             With .Replacement
  69.                 .ClearFormatting
  70.                 .Text = " "
  71.             End With
  72.             .Execute Replace:=wdReplaceAll
  73.             .ClearFormatting
  74.             .Format = False
  75.             .Text = "( {1,})"
  76.             .MatchWildcards = True
  77.             With .Replacement
  78.                 .Text = " "
  79.             End With
  80.             .Execute Replace:=wdReplaceAll
  81.         End With
  82.         .Font.ColorIndex = wdRed
  83.         .Text = Trim$(.Text)
  84.     End With
  85. Next
  86. docExam.Save
  87. 'docExam.Close
  88. Set fso = Nothing
  89. Application.ScreenUpdating = True
  90. MsgBox "生成试题和答案完成."

  91. End Sub

复制代码

评分

参与人数 2技术 +2 收起 理由
5i365 + 1 技术牛X, 乐于分享
for_flr + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-5-5 12:23:30 | 显示全部楼层
回复 2# flashercs


    测试成功 感谢
 楼主| 发表于 2022-5-5 12:30:12 | 显示全部楼层
本帖最后由 sf2022 于 2022-5-5 12:32 编辑

回复 2# flashercs

为什么生成的文件关闭后,就再也打不开了

能把代码改成VBS吗?或其他的,运行后 对当前目录下的所有WROD生效

谢谢
发表于 2022-5-5 15:14:39 | 显示全部楼层
请教大佬,如果用powershell,如何匹配到颜色字体
发表于 2022-5-5 22:03:08 | 显示全部楼层
回复 2# flashercs


   感谢大侠分享, 要是能改成ps代码,就更好了, vba 看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 00:51 , Processed in 0.024281 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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