{"id":55836,"date":"2025-02-19T08:21:40","date_gmt":"2025-02-19T00:21:40","guid":{"rendered":"https:\/\/fwq.ai\/blog\/55836\/"},"modified":"2025-02-19T08:21:40","modified_gmt":"2025-02-19T00:21:40","slug":"%e5%9c%a8word%e4%b8%ad%e5%85%8d%e8%b4%b9%e4%bd%bf%e7%94%a8%e4%b8%90%e7%89%88copilot%ef%bc%8c%e8%be%85%e5%8a%a9%e6%96%87%e6%9c%ac%e7%bb%ad%e5%86%99","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/55836\/","title":{"rendered":"\u5728word\u4e2d\u514d\u8d39\u4f7f\u7528\u4e10\u7248copilot\uff0c\u8f85\u52a9\u6587\u672c\u7eed\u5199"},"content":{"rendered":"<p>\u5bf9\u4e8e\u4e70\u4e0d\u8d77copilot\u4f1a\u5458\u6216WPS AI\u4f1a\u5458\u7684\u670b\u53cb\uff0c\u8fd8\u60f3\u4f53\u9a8c\u5728\u6587\u6863\u4e2d\u7eed\u5199\u6587\u672c\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b8f\u4ee3\u7801\u5b9e\u73b0\u3002<\/p>\n<p>&nbsp;<\/p>\n<p> <\/p>\n<p>\u4e0b\u9762\u9488\u5bf9MacOS\u548cWindows\u63a8\u51fa\u4e24\u4e2a\u7248\u672c\uff1a<\/p>\n<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" align=\"right\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20150%20150'%3E%3C\/svg%3E\" style=\"width:150px;height:150px;margin-left:20px;border:none\" title=\"\u5728word\u4e2d\u514d\u8d39\u4f7f\u7528\u4e10\u7248copilot\uff0c\u8f85\u52a9\u6587\u672c\u7eed\u5199\u63d2\u56fe\" alt=\"\u5728word\u4e2d\u514d\u8d39\u4f7f\u7528\u4e10\u7248copilot\uff0c\u8f85\u52a9\u6587\u672c\u7eed\u5199\u63d2\u56fe\" \/><br \/>\n<img decoding=\"async\" class=\"aligncenter\" align=\"right\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/07\/99dd797026b75ad.jpg\" style=\"width:150px;height:150px;margin-left:20px;border:none\" title=\"\u5728word\u4e2d\u514d\u8d39\u4f7f\u7528\u4e10\u7248copilot\uff0c\u8f85\u52a9\u6587\u672c\u7eed\u5199\u63d2\u56fe1\" alt=\"\u5728word\u4e2d\u514d\u8d39\u4f7f\u7528\u4e10\u7248copilot\uff0c\u8f85\u52a9\u6587\u672c\u7eed\u5199\u63d2\u56fe1\" \/><br \/>\n<span style=\"font-size:18px\">\u6b64\u5904\u5185\u5bb9\u5df2\u7ecf\u88ab\u4f5c\u8005\u9690\u85cf\uff0c\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801\u67e5\u770b\u5185\u5bb9<\/span><br \/>\n<span style=\"font-size:18px;float:left\">\u9a8c\u8bc1\u7801\uff1a<\/span><br \/>\n<span style=\"color:#00BF30\">\u8bf7\u5173\u6ce8\u672c\u7ad9\u5fae\u4fe1\u516c\u4f17\u53f7\uff0c\u56de\u590d\u201c<span style=\"color:blue\">\u9a8c\u8bc1\u7801<\/span>\u201d\uff0c\u83b7\u53d6\u9a8c\u8bc1\u7801\u3002\u5728\u5fae\u4fe1\u91cc\u641c\u7d22\u201c<span style=\"color:blue\">\u9996\u5e2dAI\u5206\u4eab\u5708<\/span>\u201d\u6216\u8005\u201c<span style=\"color:blue\">Looks-AI<\/span>\u201d\u6216\u8005\u5fae\u4fe1\u626b\u63cf\u53f3\u4fa7\u4e8c\u7ef4\u7801\u90fd\u53ef\u4ee5\u5173\u6ce8\u672c\u7ad9\u5fae\u4fe1\u516c\u4f17\u53f7\u3002<\/span> <\/p>\n<p>&nbsp;<\/p>\n<p>1.\u8bf7\u4fee\u6539API\u5bc6\u94a5\uff0c\u6362\u6210\u514d\u8d39\u6a21\u578b<\/p>\n<p>2.\u57fa\u672c\u7528\u6cd5\u5c31\u662f\u5148\u9009\u4e2d\u6587\u672c\uff0c\u7136\u540e\u6309<code>Alt + F8<\/code>\u8c03\u51fa\u5b8f\u64cd\u4f5c, \u9009\u62e9&nbsp;<code><\/code>\u5373\u53ef\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u6838\u5fc3\u4ee3\u7801<\/p>\n<pre>Sub&nbsp;chatGPTWord()\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;request&nbsp;As&nbsp;Object\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;text&nbsp;As&nbsp;String,&nbsp;response&nbsp;As&nbsp;String,&nbsp;API&nbsp;As&nbsp;String,&nbsp;api_key&nbsp;As&nbsp;String,&nbsp;DisplayText&nbsp;As&nbsp;String,&nbsp;error_result&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;startPos&nbsp;As&nbsp;Long,&nbsp;status_code&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;prompt&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;selectedText&nbsp;As&nbsp;Range\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;API&nbsp;=&nbsp;\"https:\/\/open.bigmodel.cn\/api\/paas\/v4\/chat\/completions\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'Enter&nbsp;Your&nbsp;API&nbsp;Key\r\n&nbsp;&nbsp;&nbsp;&nbsp;api_key&nbsp;=&nbsp;\"\u8bf7\u5728\u667a\u8c31\u6e05\u8a00open.bigmodel.cn\u83b7\u53d6\u60a8\u81ea\u5df1\u7684&nbsp;API&nbsp;KEY\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'Model&nbsp;Name\r\n&nbsp;&nbsp;&nbsp;&nbsp;modelName&nbsp;=&nbsp;\"glm-4-plus\"\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;systemPrompt&nbsp;=&nbsp;\"You&nbsp;are&nbsp;a&nbsp;helpful&nbsp;chat&nbsp;bot&nbsp;that&nbsp;has&nbsp;expertise&nbsp;in&nbsp;WORD.&nbsp;Do&nbsp;not&nbsp;write&nbsp;explanations&nbsp;on&nbsp;replies.&nbsp;Output&nbsp;should&nbsp;be&nbsp;markdown&nbsp;format&nbsp;without&nbsp;markdown.\"\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;api_key&nbsp;=&nbsp;\"\"&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox&nbsp;\"Error:&nbsp;API&nbsp;key&nbsp;is&nbsp;blank!\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Sub\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;Prompt&nbsp;the&nbsp;user&nbsp;to&nbsp;select&nbsp;text&nbsp;in&nbsp;the&nbsp;document\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Selection.Type&nbsp;&lt;&gt;&nbsp;wdSelectionIP&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prompt&nbsp;=&nbsp;Trim(Selection.text)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;selectedText&nbsp;=&nbsp;Selection.Range\r\n&nbsp;&nbsp;&nbsp;&nbsp;Else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox \"\u8bf7\u5148\u9009\u62e9\u5185\u5bb9\uff01\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Sub\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'Cleaning\r\n&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(prompt,&nbsp;Chr(34),&nbsp;Chr(39))\r\n&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(text,&nbsp;vbLf,&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(text,&nbsp;vbCr,&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(text,&nbsp;vbCrLf,&nbsp;\"\")\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;Remove&nbsp;selection\r\n&nbsp;&nbsp;&nbsp;&nbsp;Selection.Collapse\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;'Create&nbsp;an&nbsp;HTTP&nbsp;request&nbsp;object\r\n&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;request&nbsp;=&nbsp;CreateObject(\"MSXML2.XMLHTTP\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;request\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Open&nbsp;\"POST\",&nbsp;API,&nbsp;False\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setRequestHeader&nbsp;\"Content-Type\",&nbsp;\"application\/json\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setRequestHeader&nbsp;\"Authorization\",&nbsp;\"Bearer&nbsp;\"&nbsp;&amp;&nbsp;api_key\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.send&nbsp;\"{\"\"model\"\":\"\"\"&nbsp;&amp;&nbsp;modelName&nbsp;&amp;&nbsp;\"\"\",&nbsp;&nbsp;\"\"messages\"\":&nbsp;[{\"\"content\"\":\"\"\"&nbsp;&amp;&nbsp;systemPrompt&nbsp;&amp;&nbsp;\"\"\",\"\"role\"\":\"\"system\"\"},{\"&nbsp;&amp;&nbsp;_\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"\"\"content\"\":\"\"\"&nbsp;&amp;&nbsp;text&nbsp;&amp;&nbsp;\"\"\",\"\"role\"\":\"\"user\"\"}],\"\"temperature\"\":&nbsp;1}\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status_code&nbsp;=&nbsp;.Status\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;.responseText\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;With\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Extract&nbsp;content\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;status_code&nbsp;=&nbsp;200&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisplayText&nbsp;=&nbsp;ExtractContent(response)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Insert&nbsp;response&nbsp;text&nbsp;into&nbsp;Word&nbsp;document\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectedText.InsertAfter&nbsp;vbNewLine&nbsp;&amp;&nbsp;ConvertMarkdownToWord(DisplayText)\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;Else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startPos&nbsp;=&nbsp;InStr(response,&nbsp;\"\"\"message\"\":&nbsp;\"\"\")&nbsp;+&nbsp;Len(\"\"\"message\"\":&nbsp;\"\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endPos&nbsp;=&nbsp;InStr(startPos,&nbsp;response,&nbsp;\"\"\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;startPos&nbsp;&gt;&nbsp;Len(\"\"\"message\"\":&nbsp;\"\"\")&nbsp;And&nbsp;endPos&nbsp;&gt;&nbsp;startPos&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisplayText&nbsp;=&nbsp;Mid(response,&nbsp;startPos,&nbsp;endPos&nbsp;-&nbsp;startPos)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisplayText&nbsp;=&nbsp;\"\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Insert&nbsp;error&nbsp;message&nbsp;into&nbsp;Word&nbsp;document\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDisplayText&nbsp;=&nbsp;\"Error&nbsp;:&nbsp;\"&nbsp;&amp;&nbsp;DisplayText\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectedText.InsertAfter&nbsp;vbNewLine&nbsp;&amp;&nbsp;EDisplayText\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'Clean&nbsp;up&nbsp;the&nbsp;object\r\n&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;request&nbsp;=&nbsp;Nothing\r\n\nEnd&nbsp;Sub<\/pre>\n<p>&nbsp;<\/p>\n<pre>Function&nbsp;ExtractContent(jsonString&nbsp;As&nbsp;String)&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;startPos&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;endPos&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Content&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'{\"choices\":[{\"finish_reason\":\"stop\",\"index\":0,\"message\":{\"content\":\"&lt;html&gt;\\n&lt;head&gt;\\n&lt;title&gt;Chat&nbsp;Bot&nbsp;Introduction&lt;\/title&gt;\\n&lt;\/head&gt;\\n&lt;body&gt;\\n&lt;h1&gt;Hello!&lt;\/h1&gt;\\n&lt;p&gt;I&nbsp;am&nbsp;a&nbsp;helpful&nbsp;chat&nbsp;bot&nbsp;with&nbsp;expertise&nbsp;in&nbsp;HTML.&lt;\/p&gt;\\n&lt;\/body&gt;\\n&lt;\/html&gt;\",\"role\":\"assistant\"}}],\"\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;startPos&nbsp;=&nbsp;InStr(1,&nbsp;jsonString,&nbsp;\"\"\"content\"\":\"\"\")&nbsp;+&nbsp;Len(\"\"\"content\"\":&nbsp;\"\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;endPos&nbsp;=&nbsp;InStr(startPos,&nbsp;jsonString,&nbsp;\",\"\"role\"\":\"\"\")&nbsp;-&nbsp;2\r\n&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Mid(jsonString,&nbsp;startPos,&nbsp;endPos&nbsp;-&nbsp;startPos)\r\n&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Trim(Replace(Content,&nbsp;\"\\\"\"\",&nbsp;Chr(34)))\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Replace(Content,&nbsp;vbCrLf,&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Replace(Content,&nbsp;vbLf,&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Replace(Content,&nbsp;vbCr,&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Replace(Content,&nbsp;\"\\n\",&nbsp;vbCrLf)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Right(Content,&nbsp;1)&nbsp;=&nbsp;\"\"\"\"&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;Left(Content,&nbsp;Len(Content)&nbsp;-&nbsp;1)\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ExtractContent&nbsp;=&nbsp;Content\r\n\nEnd&nbsp;Function\r\n\nFunction&nbsp;ConvertMarkdownToWord(markdownText&nbsp;As&nbsp;String)\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lines()&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;i&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;line&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;headerLevel&nbsp;As&nbsp;Integer\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;currentParagraph&nbsp;As&nbsp;Range\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;table&nbsp;As&nbsp;table\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;cellContent()&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;numRows&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;numColumns&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5c06&nbsp;Markdown&nbsp;\u6587\u672c\u6309\u884c\u5206\u5272\r\n&nbsp;&nbsp;&nbsp;&nbsp;lines&nbsp;=&nbsp;Split(markdownText,&nbsp;vbCr)\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u904d\u5386\u6bcf\u4e00\u884c\u5e76\u5904\u7406\r\n&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;0&nbsp;To&nbsp;UBound(lines)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;Trim(lines(i))\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u6807\u9898\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Left(line,&nbsp;1)&nbsp;=&nbsp;\"#\"&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerLevel&nbsp;=&nbsp;0\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do&nbsp;While&nbsp;Mid(line,&nbsp;headerLevel&nbsp;+&nbsp;1,&nbsp;1)&nbsp;=&nbsp;\"#\"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerLevel&nbsp;=&nbsp;headerLevel&nbsp;+&nbsp;1\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u521b\u5efa\u6807\u9898\u6bb5\u843d\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;Trim(Replace(line,&nbsp;\"#\",&nbsp;\"\"))&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Style&nbsp;=&nbsp;ActiveDocument.Styles(\"\u6807\u9898&nbsp;\"&nbsp;&amp;&nbsp;headerLevel)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u7c97\u4f53\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;InStr(line,&nbsp;\"**\")&nbsp;&gt;&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;Replace(line,&nbsp;\"**\",&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;line&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Font.Bold&nbsp;=&nbsp;True\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u659c\u4f53\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;InStr(line,&nbsp;\"*\")&nbsp;&gt;&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;Replace(line,&nbsp;\"*\",&nbsp;\"\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;line&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Font.Italic&nbsp;=&nbsp;True\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u65e0\u5e8f\u5217\u8868\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;Left(line,&nbsp;1)&nbsp;=&nbsp;\"-\"&nbsp;Or&nbsp;Left(line,&nbsp;1)&nbsp;=&nbsp;\"*\"&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;Trim(Mid(line,&nbsp;2))&nbsp;&amp;&nbsp;vbCrLf&nbsp;'&nbsp;\u53bb\u6389\u524d\u9762\u7684\u7b26\u53f7\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.ListFormat.ApplyBulletDefault\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u6709\u5e8f\u5217\u8868\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;IsOrderedList(line)&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;Trim(line)&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.ListFormat.ApplyNumberDefault\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u94fe\u63a5\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;InStr(line,&nbsp;\"[\")&nbsp;&gt;&nbsp;0&nbsp;And&nbsp;InStr(line,&nbsp;\"]\")&nbsp;&gt;&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;linkText&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;linkURL&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linkText&nbsp;=&nbsp;Mid(line,&nbsp;InStr(line,&nbsp;\"[\")&nbsp;+&nbsp;1,&nbsp;InStr(line,&nbsp;\"]\")&nbsp;-&nbsp;InStr(line,&nbsp;\"[\")&nbsp;-&nbsp;1)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linkURL&nbsp;=&nbsp;Mid(line,&nbsp;InStr(line,&nbsp;\"(\")&nbsp;+&nbsp;1,&nbsp;InStr(line,&nbsp;\")\")&nbsp;-&nbsp;InStr(line,&nbsp;\"(\")&nbsp;-&nbsp;1)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;linkText&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveDocument.Hyperlinks.Add&nbsp;Anchor:=currentParagraph,&nbsp;Address:=linkURL,&nbsp;TextToDisplay:=linkText\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u8868\u683c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;IsMarkdownTable(lines,&nbsp;i)&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u8868\u683c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConvertMarkdownToTable&nbsp;lines,&nbsp;i\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u8df3\u8fc7\u8868\u683c\u7684\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;CountRows(lines,&nbsp;i)&nbsp;+&nbsp;1&nbsp;'&nbsp;\u8df3\u8fc7\u8868\u5934\u548c\u5206\u9694\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5904\u7406\u666e\u901a\u6bb5\u843d\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;currentParagraph&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentParagraph.InsertAfter&nbsp;line&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;i\r\nEnd&nbsp;Function\r\n\nFunction&nbsp;IsOrderedList(line&nbsp;As&nbsp;String)&nbsp;As&nbsp;Boolean\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;parts()&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;parts&nbsp;=&nbsp;Split(line,&nbsp;\".\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u68c0\u67e5\u662f\u5426\u4ee5\u6570\u5b57\u5f00\u5934\u5e76\u4e14\u540e\u9762\u8ddf\u7740\u4e00\u4e2a\u70b9\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;UBound(parts)&nbsp;&gt;&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;IsNumeric(Trim(parts(0)))&nbsp;And&nbsp;Len(Trim(parts(0)))&nbsp;&gt;&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsOrderedList&nbsp;=&nbsp;True\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;IsOrderedList&nbsp;=&nbsp;False\r\nEnd&nbsp;Function\r\n\nFunction&nbsp;IsMarkdownTable(lines()&nbsp;As&nbsp;String,&nbsp;ByRef&nbsp;startIndex&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Boolean\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;headerLine&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;separatorLine&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u68c0\u67e5\u81f3\u5c11\u6709\u4e09\u884c\uff08\u8868\u5934\u3001\u5206\u9694\u884c\u548c\u81f3\u5c11\u4e00\u884c\u6570\u636e\uff09\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;UBound(lines)&nbsp;&lt;&nbsp;2&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsMarkdownTable&nbsp;=&nbsp;False\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;headerLine&nbsp;=&nbsp;Trim(lines(startIndex))\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;InStr(headerLine,&nbsp;\"|\")&nbsp;=&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsMarkdownTable&nbsp;=&nbsp;False\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u68c0\u67e5\u5206\u9694\u884c\u662f\u5426\u5b58\u5728\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;startIndex&nbsp;+&nbsp;1&nbsp;&gt;&nbsp;UBound(lines)&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsMarkdownTable&nbsp;=&nbsp;False\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;separatorLine&nbsp;=&nbsp;Trim(lines(startIndex&nbsp;+&nbsp;1))\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;IsMarkdownTable&nbsp;=&nbsp;True\r\nEnd&nbsp;Function\r\n\nFunction&nbsp;CountColumns(headerLine&nbsp;As&nbsp;String)&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u8ba1\u7b97\u5217\u6570\uff0c\u53bb\u6389\u7b2c\u4e00\u4e2a\u548c\u6700\u540e\u4e00\u4e2a&nbsp;|\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;columns()&nbsp;As&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;columns&nbsp;=&nbsp;Split(headerLine,&nbsp;\"|\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;CountColumns&nbsp;=&nbsp;UBound(columns)&nbsp;-&nbsp;1&nbsp;'&nbsp;\u51cf\u53bb\u7b2c\u4e00\u4e2a\u548c\u6700\u540e\u4e00\u4e2a\r\nEnd&nbsp;Function\r\n\nFunction&nbsp;CountRows(lines()&nbsp;As&nbsp;String,&nbsp;ByVal&nbsp;startIndex&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;count&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;0\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u4ece&nbsp;startIndex&nbsp;+&nbsp;2&nbsp;\u5f00\u59cb\uff0c\u8df3\u8fc7\u8868\u5934\u548c\u5206\u9694\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;currentIndex&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;currentIndex&nbsp;=&nbsp;startIndex&nbsp;+&nbsp;2&nbsp;'&nbsp;\u8df3\u8fc7\u8868\u5934\u548c\u5206\u9694\u884c\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u7ee7\u7eed\u68c0\u67e5\u76f4\u5230\u8d85\u51fa\u8fb9\u754c\r\n&nbsp;&nbsp;&nbsp;&nbsp;Do&nbsp;While&nbsp;currentIndex&nbsp;&lt;=&nbsp;UBound(lines)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u68c0\u67e5\u5f53\u524d\u884c\u662f\u5426\u4e3a\u6570\u636e\u884c\uff0c\u5ffd\u7565\u5206\u9694\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Trim(lines(currentIndex)&nbsp;&lt;&gt;&nbsp;\"\")&nbsp;And&nbsp;InStr(lines(currentIndex),&nbsp;\"|\")&nbsp;&gt;&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u5ffd\u7565\u5206\u9694\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Trim(InStr(lines(currentIndex),&nbsp;\"|---\")&nbsp;=&nbsp;0)&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;count&nbsp;+&nbsp;1\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Do&nbsp;'&nbsp;\u5982\u679c\u9047\u5230\u975e\u8868\u683c\u884c\uff0c\u9000\u51fa\u5faa\u73af\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentIndex&nbsp;=&nbsp;currentIndex&nbsp;+&nbsp;1&nbsp;'&nbsp;\u79fb\u52a8\u5230\u4e0b\u4e00\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;Loop\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;CountRows&nbsp;=&nbsp;count\r\nEnd&nbsp;Function\r\n\nSub&nbsp;ConvertMarkdownToTable(lines()&nbsp;As&nbsp;String,&nbsp;startIndex&nbsp;As&nbsp;Long)\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;i&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;j&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;table&nbsp;As&nbsp;table\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;cellContent&nbsp;As&nbsp;Variant\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;numRows&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;numColumns&nbsp;As&nbsp;Long\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u8ba1\u7b97\u884c\u6570\u548c\u5217\u6570\r\n&nbsp;&nbsp;&nbsp;&nbsp;'numRows&nbsp;=&nbsp;UBound(lines)&nbsp;-&nbsp;startIndex&nbsp;-&nbsp;1&nbsp;'&nbsp;\u51cf\u53bb\u8868\u5934\u548c\u5206\u9694\u884c\r\n&nbsp;&nbsp;&nbsp;&nbsp;numRows&nbsp;=&nbsp;CountRows(lines,&nbsp;startIndex)\r\n&nbsp;&nbsp;&nbsp;&nbsp;numColumns&nbsp;=&nbsp;CountColumns(lines(startIndex))\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u786e\u4fdd\u884c\u6570\u548c\u5217\u6570\u6709\u6548\r\n&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;numRows&nbsp;&lt;=&nbsp;0&nbsp;Or&nbsp;numColumns&nbsp;&lt;=&nbsp;0&nbsp;Then\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MsgBox \"\u8868\u683c\u884c\u6570\u6216\u5217\u6570\u65e0\u6548\u3002\", vbExclamation\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Sub\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;MyRange&nbsp;=&nbsp;ActiveDocument.Content\r\n&nbsp;&nbsp;&nbsp;&nbsp;MyRange.Collapse&nbsp;Direction:=wdCollapseEnd\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u521b\u5efa&nbsp;Word&nbsp;\u8868\u683c\r\n&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;table&nbsp;=&nbsp;ActiveDocument.Tables.Add(Range:=MyRange,&nbsp;numRows:=numRows&nbsp;+&nbsp;1,&nbsp;numColumns:=numColumns)&nbsp;'&nbsp;+1&nbsp;\u7528\u4e8e\u8868\u5934\r\n\n&nbsp;&nbsp;&nbsp;&nbsp;'currentParagraph.InsertAfter&nbsp;table&nbsp;&amp;&nbsp;vbCrLf\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u586b\u5145\u8868\u5934\r\n&nbsp;&nbsp;&nbsp;&nbsp;cellContent&nbsp;=&nbsp;Split(lines(startIndex),&nbsp;\"|\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;j&nbsp;=&nbsp;1&nbsp;To&nbsp;UBound(cellContent)&nbsp;-&nbsp;1&nbsp;'&nbsp;\u4ece&nbsp;1&nbsp;\u5f00\u59cb\uff0c\u5ffd\u7565\u7b2c\u4e00\u4e2a&nbsp;|\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;'&nbsp;\u5ffd\u7565\u53c2\u6570\u9519\u8bef\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Cell(1,&nbsp;j).Range.text&nbsp;=&nbsp;Trim(cellContent(j))&nbsp;'&nbsp;\u586b\u5145\u8868\u5934\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;GoTo&nbsp;0&nbsp;'&nbsp;\u5173\u95ed\u9519\u8bef\u5ffd\u7565\r\n&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;j\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u586b\u5145\u8868\u683c\u6570\u636e\r\n&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;startIndex&nbsp;+&nbsp;2&nbsp;To&nbsp;UBound(lines)&nbsp;'&nbsp;\u4ece\u6570\u636e\u884c\u5f00\u59cb\u586b\u5145\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cellContent&nbsp;=&nbsp;Split(lines(i),&nbsp;\"|\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;j&nbsp;=&nbsp;1&nbsp;To&nbsp;UBound(cellContent)&nbsp;-&nbsp;1&nbsp;'&nbsp;\u4ece&nbsp;1&nbsp;\u5f00\u59cb\uff0c\u5ffd\u7565\u7b2c\u4e00\u4e2a&nbsp;|\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;'&nbsp;\u5ffd\u7565\u53c2\u6570\u9519\u8bef\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Cell(i&nbsp;-&nbsp;startIndex,&nbsp;j).Range.text&nbsp;=&nbsp;Trim(cellContent(j))&nbsp;'&nbsp;\u586b\u5145\u6570\u636e\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;GoTo&nbsp;0&nbsp;'&nbsp;\u5173\u95ed\u9519\u8bef\u5ffd\u7565\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;j\r\n&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;i\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next\r\n&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;\u8bbe\u7f6e\u8868\u683c\u8fb9\u6846\u4e3a&nbsp;1\r\n&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;table.Borders\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.InsideLineStyle&nbsp;=&nbsp;wdLineStyleSingle\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.OutsideLineStyle&nbsp;=&nbsp;wdLineStyleSingle\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.InsideLineWidth&nbsp;=&nbsp;1\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.OutsideLineWidth&nbsp;=&nbsp;1\r\n&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;With\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\nEnd&nbsp;Sub<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5bf9\u4e8e\u4e70\u4e0d\u8d77copilot\u4f1a\u5458\u6216WPS AI\u4f1a\u5458\u7684\u670b\u53cb\uff0c\u8fd8\u60f3\u4f53\u9a8c\u5728\u6587\u6863\u4e2d\u7eed\u5199\u6587\u672c\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b8f\u4ee3\u7801\u5b9e\u73b0\u3002 &nbsp; \u4e0b\u9762\u9488\u5bf9MacOS\u548cWindows\u63a8\u51fa\u4e24\u4e2a\u7248\u672c\uff1a \u6b64\u5904\u5185\u5bb9\u5df2\u7ecf\u88ab\u4f5c\u8005\u9690\u85cf\uff0c\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801\u67e5\u770b\u5185\u5bb9 \u9a8c\u8bc1\u7801\uff1a \u8bf7\u5173\u6ce8\u672c\u7ad9\u5fae\u4fe1\u516c\u4f17\u53f7\uff0c\u56de\u590d\u201c\u9a8c\u8bc1\u7801\u201d\uff0c\u83b7\u53d6\u9a8c\u8bc1\u7801\u3002\u5728\u5fae\u4fe1\u91cc\u641c\u7d22\u201c\u9996\u5e2dAI\u5206\u4eab\u5708\u201d\u6216\u8005\u201cLooks-AI\u201d\u6216\u8005\u5fae\u4fe1\u626b\u63cf\u53f3\u4fa7\u4e8c\u7ef4\u7801\u90fd\u53ef\u4ee5\u5173\u6ce8\u672c\u7ad9\u5fae\u4fe1\u516c\u4f17\u53f7\u3002 &nbsp; 1.\u8bf7\u4fee\u6539API\u5bc6\u94a5\uff0c\u6362\u6210\u514d\u8d39\u6a21\u578b 2.\u57fa\u672c\u7528\u6cd5\u5c31\u662f\u5148\u9009\u4e2d\u6587\u672c\uff0c\u7136\u540e\u6309Alt + F8\u8c03\u51fa\u5b8f\u64cd\u4f5c, \u9009\u62e9&nbsp;\u5373\u53ef\u3002 &nbsp; \u6838\u5fc3\u4ee3\u7801 Sub&nbsp;chatGPTWord() &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;request&nbsp;As&nbsp;Object &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;text&nbsp;As&nbsp;String,&nbsp;response&nbsp;As&nbsp;String,&nbsp;API&nbsp;As&nbsp;String,&nbsp;api_key&nbsp;As&nbsp;String,&nbsp;DisplayText&nbsp;As&nbsp;String,&nbsp;error_result&nbsp;As&nbsp;String &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;startPos&nbsp;As&nbsp;Long,&nbsp;status_code&nbsp;As&nbsp;Long &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;prompt&nbsp;As&nbsp;String &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;selectedText&nbsp;As&nbsp;Range &nbsp;&nbsp;&nbsp;&nbsp;API&nbsp;=&nbsp;&#8220;https:\/\/open.bigmodel.cn\/api\/paas\/v4\/chat\/completions&#8221; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&#8216;Enter&nbsp;Your&nbsp;API&nbsp;Key &nbsp;&nbsp;&nbsp;&nbsp;api_key&nbsp;=&nbsp;&#8220;\u8bf7\u5728\u667a\u8c31\u6e05\u8a00open.bigmodel.cn\u83b7\u53d6\u60a8\u81ea\u5df1\u7684&nbsp;API&nbsp;KEY&#8221; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&#8216;Model&nbsp;Name &nbsp;&nbsp;&nbsp;&nbsp;modelName&nbsp;=&nbsp;&#8220;glm-4-plus&#8221; &nbsp;&nbsp;&nbsp;&nbsp;systemPrompt&nbsp;=&nbsp;&#8220;You&nbsp;are&nbsp;a&nbsp;helpful&nbsp;chat&nbsp;bot&nbsp;that&nbsp;has&nbsp;expertise&nbsp;in&nbsp;WORD.&nbsp;Do&nbsp;not&nbsp;write&nbsp;explanations&nbsp;on&nbsp;replies.&nbsp;Output&nbsp;should&nbsp;be&nbsp;markdown&nbsp;format&nbsp;without&nbsp;markdown.&#8221; &nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;api_key&nbsp;=&nbsp;&#8220;&#8221;&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox&nbsp;&#8220;Error:&nbsp;API&nbsp;key&nbsp;is&nbsp;blank!&#8221; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Sub &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&#8216;&nbsp;Prompt&nbsp;the&nbsp;user&nbsp;to&nbsp;select&nbsp;text&nbsp;in&nbsp;the&nbsp;document &nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Selection.Type&nbsp;&lt;&gt;&nbsp;wdSelectionIP&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prompt&nbsp;=&nbsp;Trim(Selection.text) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;selectedText&nbsp;=&nbsp;Selection.Range &nbsp;&nbsp;&nbsp;&nbsp;Else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox &#8220;\u8bf7\u5148\u9009\u62e9\u5185\u5bb9\uff01&#8221; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Sub &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&#8216;Cleaning &nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(prompt,&nbsp;Chr(34),&nbsp;Chr(39)) &nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(text,&nbsp;vbLf,&nbsp;&#8220;&#8221;) &nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(text,&nbsp;vbCr,&nbsp;&#8220;&#8221;) &nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Replace(text,&nbsp;vbCrLf,&nbsp;&#8220;&#8221;) &nbsp;&nbsp;&nbsp;&nbsp;&#8216;&nbsp;Remove&nbsp;selection &nbsp;&nbsp;&nbsp;&nbsp;Selection.Collapse &nbsp;&nbsp;&nbsp;&nbsp;&#8216;Create&nbsp;an&nbsp;HTTP&nbsp;request&nbsp;object &nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;request&nbsp;=&nbsp;CreateObject(&#8220;MSXML2.XMLHTTP&#8221;) &nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;request [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-55836","post","type-post","status-publish","format-standard","hentry","category-ai"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/55836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=55836"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/55836\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=55836"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=55836"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=55836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}