2016-11-18 73 views
1

我无法在Microsoft Office Excel中打开生成/导出的Excel。在Rails 4中导出Excel,无法在Microsoft Excel中打开,但在自由职业者办公室工作

但它在自由办公室工作正常。

我试着做一个简单的测试,代码如下。

控制器:

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> 

我从这个教程随后,railscasts/362-exporting-csv-and-excel

我试图用简单的HTML中图,它工作。

所以,我认为使用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由Microsoft Office Excel 2003中支持不被新版本

+0

我试过了,但仍无法在MS Excel中打开。 –

+0

xlsx是不是带xml文件的压缩文件夹? –

0

首先,延期应该是.xml,而不是.xls.xls是一种二进制格式:即使您的.xls对于.xml文件具有正确的语法,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> 
相关问题