[英]Export Ruby on Rails HTML table to .xls file
我有下表:
<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>
...
這將生成文件類型為file的文件。 但是我想將此文件生成為.xls,因此我嘗試將其添加到控制器操作中:
format.xls{ send_data @students, :type => 'application/vnd.ms-excel', :filename => 'students.xls' }
但是我得到了這個錯誤:
NoMethodError(#的未定義方法“ bytesize”)
另外,我需要將excel表標題合並到多個單元格中,有沒有辦法做到這一點?
解決此問題的一種簡便方法是將內容作為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
前三行輸出excel文件,因此,下一行將接收到的數據(如type method)發送到html和excel視圖,然后將其檢索數據的方法的名稱發送給html和excel視圖,然后進行渲染:false向您顯示一個空布局,表示正在加載數據。
在您的路線中,類似
get 'excel/stats/:type', to: 'stats#export', as: 'excel_stat'
在此示例中,我們的stats控制器具有許多不同類型的stats,並且在控制器的“導出”視圖中,您可以像這樣呈現部分視圖
export.html.haml:
= render params[:type]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.