モデルの 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 ファイルを作成できますか? 私がやってきたことは明らかに機能していません。