2016-11-18 7 views
1

Microsoft Office Excelで生成/エクスポートされたExcelを開くのに問題があります。ExcelをRails 4でエクスポートすると、Microsoft Excelで開くことはできませんが、Libre Officeで動作します

しかし、Libre Officeではうまく動作します。

以下のコードで簡単なテストを試みました。

コントローラー:

respond_to do |format| 
    format.html 
    format.xls do 
     headers['Content-Type'] ||= 'text/xls' 
     headers['Content-Disposition'] = "attachment; filename='Report.xls'" 
    end 
    end 

ビューコード:

<?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"> 
    <Worksheet ss:Name="Sheet1"> 
     <Table> 
     <Row> 
      <Cell><Data ss:Type="String">ID</Data></Cell> 
      <Cell><Data ss:Type="String">Name</Data></Cell> 
      <Cell><Data ss:Type="String">Release Date</Data></Cell> 
      <Cell><Data ss:Type="String">Price</Data></Cell> 
     </Row> 
     <% 5.times do |product| %> 
     <Row> 
      <Cell><Data ss:Type="Number"><%= product %></Data></Cell> 
      <Cell><Data ss:Type="String"><%= product %></Data></Cell> 
      <Cell><Data ss:Type="String"><%= product %></Data></Cell> 
      <Cell><Data ss:Type="Number"><%= product %></Data></Cell> 
     </Row> 
     <% end %> 
     </Table> 
    </Worksheet> 
    </Workbook> 

私はビューで単純なHTMLを使用しようとし、このチュートリアルからrailscasts/362-exporting-csv-and-excel

をその後、それ働いた。

私はテンプレートとしてXMLを使用することに問題があると思います。

問題のトラブルシューティングをお手伝いください。

Here is a sample generated excel file.

+0

結果の.xlsファイルを添付できますか。 –

+0

[axlsx gem](https://github.com/randym/axlsx) –

+0

@MikhailMalovを使用する方が信頼性が高くなります。はい、私はaxlsx gemに移行しました。 しかし、私はまだエラーの原因を知りたいです。 –

答えて

0

XML spredsheetない新しいバージョン

+0

私は試しましたが、それでもMS Excelで開くことができません。 –

+0

xlsxはxmlファイルが入ったzipフォルダではありませんか? –

0

。まずMicrosoft Office Excel 2003でサポートされ、拡張子が.xml、およびない.xlsでなければなりません。 .xlsはバイナリ形式です。.xmlファイルに対して正しい.xlsの構文があっても、Excelは起動時にエラーとなります。

.xlsxであってはなりません。 xlsxはXMLに基づいていますが、全体的なジップ構造です。あなたはそれを行うことができますが、より複雑なコードとrubyzipが必要になります。

私の助言は、普通の.csvというファイルを書くことです。簡単に書くことができ、読みやすく、Excel/OpenOfficeで簡単に開くことができます。

実際にMicrosoft Office XML formatを書きたい場合は、 OpenOfficeで提供したxlsファイルを開きました。 OpenOfficeからxlsxとして保存し、Excelで開き、xml(2003バージョン)として保存し、すべてのオプションの属性を削除しました。ここにあります:

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 
<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"> 
<Styles> 
    <Style ss:ID="Default" ss:Name="Normal"> 
    <Font ss:FontName="Arial" x:Family="Swiss"/> 
    </Style> 
    <Style ss:ID="titleStyle"> 
    <Alignment ss:Vertical="Center"/> 
    <Borders> 
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/> 
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/> 
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/> 
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> 
    </Borders> 
    <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="15" ss:Color="#FFFFFF" 
    ss:Bold="1"/> 
    <Interior ss:Color="#E22828" ss:Pattern="Solid"/> 
    </Style> 
    <Style ss:ID="dataStyle"> 
    <Alignment ss:Vertical="Center" ss:WrapText="1"/> 
    <Borders> 
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/> 
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/> 
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/> 
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> 
    </Borders> 
    <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/> 
    </Style> 
</Styles> 
<Worksheet ss:Name="Applicant Data"> 
    <Table> 
    <Row> 
    <Cell ss:StyleID="titleStyle"><Data ss:Type="String">Code No.</Data></Cell> 
    <Cell ss:StyleID="titleStyle"><Data ss:Type="String">Country</Data></Cell> 
    <Cell ss:StyleID="titleStyle"><Data ss:Type="String">Name</Data></Cell> 
    <Cell ss:StyleID="titleStyle"><Data ss:Type="String">Email</Data></Cell> 
    <Cell ss:StyleID="titleStyle"><Data ss:Type="String">Address</Data></Cell> 
    </Row> 
    <Row> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">0</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">0</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">0</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">0</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">0</Data></Cell> 
    </Row> 
    <Row> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">1</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">1</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">1</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">1</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">1</Data></Cell> 
    </Row> 
    <Row> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">2</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">2</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">2</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">2</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">2</Data></Cell> 
    </Row> 
    <Row> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">3</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">3</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">3</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">3</Data></Cell> 
    <Cell ss:StyleID="dataStyle"><Data ss:Type="String">3</Data></Cell> 
    </Row> 
    </Table> 
</Worksheet> 
</Workbook> 
関連する問題