我有下表:
<tr>
<th colspan = "18"> student info</th>
<th colspan="10">class info</th>
</tr>
<tr>
<th colspan="1">First Name</th>
<th colspan="1">Middle Name</th>
<th colspan="1">Last Name</th>
....
</tr>
<tr>
<td colspan="1"><%= link_to student.first_name,:controller => 'acme_modificationss' , :action=>'profile', :id => student.id %></td>
<td colspan="1"><%= student.middle_name %></td>
<td colspan="1"><%= student.last_name %></td>
<td colspan="1"><%= student.first_name %></td>
<td colspan="1"><%=m_first_name%></td>
.....
我需要将同一个表导出到.xls文件。所以我向控制器添加了一个新动作:
def document_xls
....
respond_to do |format|
format.xls
end
end
然后我添加了document_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">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">Student Info</Data></Cell>
<Cell><Data ss:Type="String">Class info</Data></Cell>
....
</Row>
<Row>
<Cell><Data ss:Type="String">First Name</Data></Cell>
<Cell><Data ss:Type="String">Middle Name</Data></Cell>
<Cell><Data ss:Type="String">Last Name</Data></Cell>
...
这会生成一个带有类型文件的文件。但我想生成此文件为.xls,所以我尝试将其添加到我的控制器操作:
format.xls{ send_data @students, :type => 'application/vnd.ms-excel', :filename => 'students.xls' }
但我收到了这个错误:
NoMethodError(未定义的方法`bytesize&#39; for#)
另外,我需要将excel表头合并到多个单元格中,有没有办法做到这一点?
答案 0 :(得分:2)
解决此问题的一种更简单方法是将内容作为HTML发送到Excel。 Excel能够解析它并由他自己转换,你只需要发送正确的标题。首先,让你的表在局部视图中,然后,在你的控制器中创建一个这样的方法:
def export
headers['Content-Type'] = "application/vnd.ms-excel"
headers['Content-Disposition'] = 'attachment; filename="report.xls"'
headers['Cache-Control'] = ''
@data = self.send params[:type]
render layout: false
end
3个第一行导出excel文件,因此,下一行发送接收类似方法的数据将检索数据的方法的名称转换为html和excel视图,并渲染:false显示一个空布局jus加载你的数据
在您的路线中
get 'excel/stats/:type', to: 'stats#export', as: 'excel_stat'
在这个例子中,我们有统计控制器,它有许多不同类型的统计数据,并且在视图中导出&#39;在您的控制器中,您可以像这样呈现部分视图
export.html.haml:
= render params[:type]