gpt4 book ai didi

ruby - RubyZip解压缩.docx,修改和压缩备份会引发Errno::EACCESS错误

转载 作者:行者123 更新时间:2023-12-03 11:13:32 24 4
gpt4 key购买 nike

因此,我使用Nokogiri和Rubyzip解压缩.docx文件,修改其中的word/docoument.xml文件(在这种情况下,只需更改包装的每个元素都说“Dreams!”),然后再将其压缩回来。

require 'nokogiri'
require 'zip'

zip = Zip::File.open("apple.docx")
doc = zip.find_entry("word/document.xml")

xml = Nokogiri::XML.parse(doc.get_input_stream)

inputs = xml.root.xpath("//w:t")

inputs.each{|element| element.content = "DREAMS!"}

zip.get_output_stream("word/document.xml", "w") {|f| f.write(xml.to_s)}

zip.close

通过IRB逐行运行代码效果很好,并且可以根据需要对.docx文件进行更改,但是如果我从命令行运行脚本
ruby xmltodoc.rb   

我收到以下错误:
C:/Ruby193/lib/ruby/gems/1.9.1/gems/rubyzip-1.1.7/lib/zip/file.rb:416:in `rename': Permission denied - (C:/Users/Bane/De
sktop/apple.docx20150326-6016-k9ff1n, apple.docx) (Errno::EACCES)
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rubyzip-1.1.7/lib/zip/file.rb:416:in `on_success_replace'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rubyzip-1.1.7/lib/zip/file.rb:308:in `commit'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rubyzip-1.1.7/lib/zip/file.rb:332:in `close'
from ./xmltodoc.rb:15:in `<main>'

我的计算机上的所有用户均对该.docx文件具有所有权限。该文件也没有任何特殊设置-只是一个带有段落的新文件。该错误仅在Windows上显示,但该脚本在Mac和Ubuntu上可以完美运行。以Admin身份运行Powershell会引发相同的错误。有任何想法吗?

最佳答案

在我的Windows 7系统上,以下工作。

require 'nokogiri'
require 'zip'

Zip::File.open("#{File.dirname(__FILE__)}/apple.docx") do |zipfile|
doc = zipfile.read("word/document.xml")
xml = Nokogiri::XML.parse(doc)
inputs = xml.root.xpath("//w:t")
inputs.each{|element| element.content = "DREAMS!"}
zipfile.get_output_stream("word/document.xml") {|f| f.write(xml.to_s)}
end

相反,您也可以使用gem docx,这是一个示例,书签的名称是荷兰语,因为这正是我的MS Office使用的语言。
require 'docx'

# Create a Docx::Document object for our existing docx file
doc = Docx::Document.open('C:\Users\Gebruiker\test.docx'.gsub(/\\/,'/'))

# Insert a single line of text after one of our bookmarks
# p doc.bookmarks['bladwijzer1'].methods
doc.bookmarks['bladwijzer1'].insert_text_after("Hello world.")

# Insert multiple lines of text at our bookmark
doc.bookmarks['bladwijzer3'].insert_multiple_lines(['Hello', 'World', 'foo'])

# Save document to specified path
doc.save('example-edited.docx')

关于ruby - RubyZip解压缩.docx,修改和压缩备份会引发Errno::EACCESS错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com