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

stephen · July 07, 2024 · Last by stephen replied at July 08, 2024 · 316 hits

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 文件嗎?

Reply to mizuhashi

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

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

Reply to crella95

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

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

Reply to 528070506
/opt/apps/xsscrm/releases/20240708021821/public/files/a.docx

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

Reply to stephen

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

rails console 里面尝试

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

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

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

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

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

You need to Sign in before reply, if you don't have an account, please Sign up first.