Ruby ruby-docx 这个 gem 在打开文档时报错 undefined method `close' for nil:NilClass @zip.close

stephen · 2024年07月07日 · 最后由 stephen 回复于 2024年07月08日 · 294 次阅读

ruby-docx 这个 gem 在 open 时报错 undefined method `close' for nil:NilClass @zip.close ,这个 gem 的 issue 里面有相关报错,说是只支持 docx,但是我改为了 docx 也一样报错。请问有人用过,解决过吗?或者有没有其他更好用的操作 word 的 gem

doc = Docx::Document.open("https://xsscrm.mform.cn/files/供水服务协议.docx")

doc.bookmarks['user_name'].insert_text_after("#{@water_installation.name}")

具体需求

通过word文档的书签功能,插入字符

確定 open 支持遠端 https 文件嗎?

mizuhashi 回复

本地的也试过了,还是报一样的错,只不过我只贴了远程文件的代码

.docx 是 zip 压缩形式而.doc 是微软二进制形式,文件格式不同的话打开方式也不同 可以抄袭隔壁 Python 代码

crella95 回复

他有 issue 说是非标准 docx 所以报错,但是我重新用 wps 保存的 docx 文件都还不行,一样的报错

我试了一下,只要路径对就没啥问题,路径不对报这个错误,你给一个绝对路径看看

528070506 回复
/opt/apps/xsscrm/releases/20240708021821/public/files/a.docx

这是给我的路径 服务器上是有这个文件的,我试试放在其他目录下看看

stephen 回复

有没有可能没有权限呢?给一个权限 chmod 644 /opt/apps ....../新兴.docx

rails console 里面尝试

File.read("path/to/file")

如果报错那么就是路径或访问权限问题。

@Rei @528070506 不是权限,是路径问题,放在

/opt/apps/xsscrm/releases/xxxxxxxxx/public

里面是不行的,放在其他地方就可以了,谢谢两位

需要 登录 后方可回复, 如果你还没有账号请 注册新账号