1

スプレッドシートからデータを読み取っていくつかの行を変更し、更新された行/セルを同じファイルに書き込む必要があります。

Ruby 2.0.0 で Spreadsheet gem を使用しました。

結果を同じファイルに書き戻すと、xls を開くことができなくなります。エラーが発生する

「ファイル形式が無効です」

MS エクセルで。

更新が別のファイルに書き込まれると、ファイルを開くことができますが、保護されたビューになっています。この問題の解決策はありますか?

以下はサンプルコードです。

require 'rubygems'
require 'spreadsheet'

 book = Spreadsheet::open('filePath')
 sheet = book.worksheet 0

 ## have application logic in here

 book.write('filePath')
4

2 に答える 2

3

私はこの問題に数回取り組んできましたが、ログには約 1 年間問題がありました。

最初の問題は、スプレッドシートがファイルをロードするときにファイルがロックされ、それを閉じる明確な方法がないことです。ロックしないようにする唯一の方法は、このコードブロックを使用することです。それを開き、最初のワークシートを独自の変数に保存してから、ファイルを閉じます。

worksheet = nil
    Spreadsheet.open workbook_name do |inner_book|
      worksheet = inner_book.worksheet 0
    end
worksheet

すべてのワークシートが必要な場合は、同様のことができます。ファイルを開く/閉じる/問題に加えて、形式に応じてワークシートの内容をキャプチャする際に問題があります。私の目的のために、コンテンツをキャプチャするために次のことを行うことになることを知っています。残念ながら、ソース スプレッドシートにあった書式設定はすべて失われます。

rows = []
worksheet.each do |row|
  rows << row
end

次に、独自のワークブック/シートを作成し、行を反復して新しいシート/ブックに追加できます。次に、新しいブックを同じファイル名で保存します。

楽しくも効率的でもありませんが、問題を解決するための方法です。これが役に立ったことを願っています。

于 2013-05-07T18:08:18.797 に答える