簡體   English   中英

將Ruby on Rails HTML表導出到.xls文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM