0

モデルの WeeklyReport の各項目に対して xls ドキュメントを生成しています。ドキュメントの基本的な構造は機能していますが、小さな変更によりファイルが破損しており、Excel 2010 で開くことができなくなっていることがわかりました。その理由はよくわかりません。ここでRailscastを使用しています: http ://railscasts.com/episodes/362-exporting-csv-and-excelでこれを行う方法を見つけました。

私のモデルコントローラーには、次のものがあります。

def show
    @report=WeeklyReport.find(params[:id])
    @engagements=@report.engagements
end

def index
    @reports=WeeklyReport.all
    respond_to do |format|
        format.html
        format.xls
    end
end

そして、show.xls ファイルには、次のものがあります。

<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:x="urn:schemas-microsoft-com:office:excel"
  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  xmlns:html="http://www.w3.org/TR/REC-html40">
  <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
    <Author>OurAppName</Author>
    <Created><%= @report.created_at%> </Created>
  </DocumentProperties>
  <Worksheet ss:Name="Engagements">  
    <Table>
      <Row>
        <Cell><Data ss:Type="String">First Name</Data></Cell>
        <Cell><Data ss:Type="String">Email</Data></Cell>
        <Cell><Data ss:Type="String">Date</Data></Cell>
        <Cell><Data ss:Type="String">Version</Data></Cell>
        <Cell><Data ss:Type="String">Rating</Data></Cell>
        <Cell><Data ss:Type="String">Comment</Data></Cell>
      </Row>
      <% @engagements.each do |e| %>
      <Row>
        <Cell><Data ss:Type="String"> <%= e.user.first_name%></Data></Cell>
        <Cell><Data ss:Type="String"> <%= mail_to("#{e.user.email}")%></Data></Cell>
        <Cell><Data ss:Type="String"> <%= e.created_at.strftime("%B %d, %y")%></Data></Cell>
        <Cell><Data ss:Type="String"> <%= e.version_made %></Data></Cell>
        <Cell><Data ss:Type="String"> <%= e.rating %></Data></Cell>
        <Cell><Data ss:Type="String"> <%= e.comment %></Data></Cell>
      </Row>
      <% end %>
    </Table>
  </Worksheet>
</Workbook>

ファイルが壊れていると読み取られる理由を理解しようとしています。Excel でドキュメントを調整して、希望どおりに表示してから、リバース エンジニアリングを試みています。xlsコードをコピーしてアプリに貼り付けたところ(機能した後、戻ってデータを反復処理するように変更すると思いました)、ファイルが破損していると表示されました。あらゆる種類の小さな変更を加えると、ファイルが破損していると表示されます。ファイルが破損する原因のいくつかを次に示します。

  • 評価データのセル タイプを数値に変更する
  • Excelファイルを保存したxmlドキュメントからスタイル情報をコピーする
  • 列幅情報の追加 基本的に、ファイルが破損している理由と破損の原因がわかりません。理由もなく半分の時間で発生しているようです (明らかにそうではありません)。

管理者が自信を持ってファイルをダウンロードできるようにしたい. また、ファイルを開くときに、「開こうとしているファイルは、ファイル拡張子で指定されたものとは異なる形式です。ファイルを開く前に、ファイルが破損していないこと、および信頼できるソースからのものであることを確認してください。今すぐファイルを開きますか?」

Excel では実際には破損していない破損ファイルの処理について私が目にする回答のほとんどは、信頼できるドキュメントの保護設定を変更することに関するものです。管理者のコンピューターのセキュリティが低下するため、この問題に対する適切な解決策ではないと思います。

どうすれば安全で (技術に疎い管理者にとっては信頼でき、怖くない)、破損していない xls ファイルを作成できますか? 私がやってきたことは明らかに機能していません。

4

1 に答える 1

1

私は、ほとんどの場合、なぜこれが起こっているのかを理解しました。タイプを数値に設定した場合<%= e.rating %>、文字列であるため破損しています。レーティングは整数ですが、埋め込まれたルビは文字列を返します。残りのほとんどの場合、タグを正しく閉じていないと思います。数字の問題は、最も混乱を招く問題でした。

于 2013-08-13T00:13:43.297 に答える