和下面的结果是基本一样的,只是下面链接是用WPS的JavaScript宏写的,这个是通过powershell调用COM来操控word和excel,语法和VBA是类似的
批量生成word模板

代码

  1. # 打开word和excel进程
  2. $word = New-Object -ComObject Word.Application
  3. $excel = New-Object -ComObject excel.application
  4. # 设置操作是否可见
  5. $excel.visible = $false
  6. $word.visible = $true
  7. # 打开测试文档
  8. #$WordFilePath = "C:\Users\Lenovo\Desktop\test.docx"
  9. $ExcelFilePath = "C:\Users\Lenovo\Desktop\test.xlsx"
  10. #$doc = $word.Documents.open($WordFilePath)
  11. $doc=$word.documents.Add()
  12. $workbook = $excel.Workbooks.open($ExcelFilePath)
  13. # excel工作簿,读取行数
  14. $worksheet = $workbook.Worksheets.item(1)
  15. $row_num = $worksheet.UsedRange.Rows.Count
  16. # 通过循环将第一列(id)输入到powershell的数组中,第二列摘要也是一样操作
  17. $id_list = @()
  18. $brief_list = @()
  19. for ($i=2; $i -le $row_num; $i++)
  20. {
  21. $tmp1 = $worksheet.Cells.item($i,1).Text
  22. $tmp2 = $worksheet.Cells.item($i,2).Text
  23. $id_list += $tmp1
  24. $brief_list += $tmp2
  25. }
  26. # 关闭工作簿退出excel程序
  27. $workbook.close()
  28. $excel.Quit()
  29. # 设置标题1,标题2,折叠,分页符
  30. $wdStyleHeading1 = -2
  31. $wdStyleHeading2 = -3
  32. $wdCollapseStart = 1
  33. $wdSectionBreakNextPage = 2
  34. for ($item=0; $item -lt $id_list.Length; $item++)
  35. {
  36. $selection=$word.Selection #光标选中内容
  37. $selection.TypeText($id_list[$item]+'序号') #输入内容
  38. $selection.Style = $wdStyleHeading1 #设置标题1
  39. $selection.TypeParagraph() #键入回车
  40. $selection.TypeText($brief_list[$item]+'序号')
  41. $selection.TypeParagraph()
  42. $selection.TypeParagraph()
  43. $selection.TypeText($id_list[$item]+"特病单议申请")
  44. $selection.Style = $wdStyleHeading2 #设置标题2
  45. $selection.TypeParagraph()
  46. $selection.TypeParagraph()
  47. $selection.TypeText($id_list[$item]+"出院记录")
  48. $selection.Style = $wdStyleHeading2
  49. $selection.TypeParagraph()
  50. $selection.TypeParagraph()
  51. $selection.TypeText($id_list[$item]+"抢救记录")
  52. $selection.Style = $wdStyleHeading2
  53. $selection.TypeParagraph()
  54. $selection.TypeParagraph()
  55. $selection.TypeText($id_list[$item]+"会诊记录")
  56. $selection.Style = $wdStyleHeading2
  57. $selection.TypeParagraph()
  58. $selection.TypeParagraph()
  59. $selection.TypeText($id_list[$item]+"手术记录")
  60. $selection.Style = $wdStyleHeading2
  61. $selection.TypeParagraph()
  62. $selection.TypeParagraph()
  63. $selection.TypeText($id_list[$item]+"特殊情况")
  64. $selection.Style = $wdStyleHeading2
  65. $selection.TypeParagraph()
  66. $selection.TypeParagraph()
  67. $selection.collapse($wdCollapseStart) #折叠避免内容被分页符替换
  68. $selection.InsertBreak($wdSectionBreakNextPage) #插入分页符
  69. }
  70. $doc.SaveAs2("C:\Users\Lenovo\Desktop\result.docx")
  71. $word.Quit()
  72. Get-Process *wps* | stop-process
  • 和上面用JavaScript写的宏比起来,在由于JavaScript宏并不完善,文档不全,不知道怎么样让word调用excel,但是在powershell中就没有这个问题,用powershell的数组为桥梁将excel的内容读取到数组中,在word中对数组的内容进行迭代操作