所以,我使用Nokogiri和Rubyzip来解压一个.docx文件,在其中修改/ 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上完美运行。 作为pipe理员运行Powershell引发相同的错误。 有任何想法吗?
SUID许可(及其对所有权的影响)
linux权限访问链
Java SE 6和Java SE 8 JRE在Windows 7上的行为不同(文件权限)
Ubuntu上的Samba文件共享不会屏蔽或强制新文件的权限
为什么我不能使用FILE_FLAG_BACKUP_SEMANTICS为GENERIC_ALL或FILE_ALL_ACCESS打开一个文件?
Nginx / Djangofile upload权限
OSError:不允许操作
vlad部署者 – 部署与不同的用户?
在我的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:UsersGebruikertest.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')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。