以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- Word文件文字翻译问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187584) |
||||
-- 作者:azlm100 -- 发布时间:2023/7/28 16:53:00 -- Word文件文字翻译问题 老师们 做了一个文字翻译跟文档翻译的应用。 是调用百度翻译的API来进行翻译的。 关于文档翻译,目前已经做好了Excel的翻译功能。但是在Word的翻译上一直出问题。 各位老师能否帮忙看下 。 我使用过for each 文档的所有段落。然后每个段落拿去API上翻译回来替换上去。但是他翻译回来的内容会全部合并到一个段落去了。 如果有空白的段落还会报错。 If path.Contains(".doc") Then Dim app As New MSWord.Application Try Dim doc = app.Documents.Open(path) Dim SenCount As Integer = Doc.Sentences.Count \'取得所选内容的句子数 Dim K As Integer For k = 1 To sencount Dim strs As String = doc.paragraphs(k).range.text If strs.Length > 1 Then doc.paragraphs(k).range.text = Functions.Execute("translation_language",strs,s,r) End If strs = "" Next rpath = "c:\\reports\\test.doc" Doc.Save(rpath) Doc.Close app.Quit Catch ex As exception
msgbox(ex.message) Finally End Try End If 具体了可以查看附件 |
||||
-- 作者:有点蓝 -- 发布时间:2023/7/28 17:09:00 -- Sentences是句子不是段落:https://www.baidu.com/s?wd=Sentence%20paragraph |
||||
-- 作者:azlm100 -- 发布时间:2023/7/31 8:16:00 -- For Each k As Object In Doc.Paragraphs Dim strs As String = k.range.text If strs.Length > 1 Then k.range.text = Functions.Execute("translation_language",strs,s,r) End If strs = "" Next 我试过遍历段落。例如有4段文字,他返回的结果会把4段文字合并成了一段。 例如遍历第一段文字,正常的。 遍历第二段文字的时候会变成 第一段 & 第二段文字。最后就全部变成了一段。 所以我才试下循环句子,循环句子就不会这种情况了。但是空白的段落就会报错。 |
||||
-- 作者:有点蓝 -- 发布时间:2023/7/31 8:53:00 -- 网上搜了一下好像是替换段落文字后会取消段落的格式,需要替换前记录一下格式,然后替换后重设段落格式:https://www.656463.com/wenda/CthzfczdwbggWordzddlgshczcxj_156 |
||||
-- 作者:azlm100 -- 发布时间:2023/7/31 10:17:00 -- 非常感谢老师。 这个帮助完美的帮我解决了段落替换。 现在测试中又发现一个问题,就是Wrod里出现了单元格之类的非文字段落就会报错。 |
||||
-- 作者:有点蓝 -- 发布时间:2023/7/31 10:27:00 -- 网上搜索,说是不能使用段落遍历表格,会出错,至于解决方法没找到 |
||||
-- 作者:azlm100 -- 发布时间:2023/8/1 14:18:00 -- 老师找到方法了。 因为翻译只需要获取到文字,然后拿文字去翻译回来再覆盖。 所以不需要试用段落。 使用 content = doc.content.text 这句可以获取Word的全部文档内容。 然后再拆分成数组,循环数组去翻译。再使用查找替换。 现在还有一个小问题了,就是拿文字去翻译,需要去掉前后空格,但是翻译完成后替换也没有了前后空格,这样位置就不对了。 还要再查查
|