Rails 4数据表导出到excel文件正在工作,但文件不可读

Posted

技术标签:

【中文标题】Rails 4数据表导出到excel文件正在工作,但文件不可读【英文标题】:Rails 4 datatables Export to excel file is working but file is not readable 【发布时间】:2020-07-16 08:39:31 【问题描述】:

由于某种原因,使用以下代码生成的 excel 仅在开发和暂存模式下工作。在生产服务器中,使用数据表生成的 excel 文件不起作用并显示警告“Excel 无法打开 xyz.xlsx,因为某些内容不可读”,如果在生产模式下生成。我正在使用 DataTables 1.10.18。

应用程序.js

//= require datatables/datatables.min.js
//= require datatables/moment.js
//= require datatables/datetime-moment.js
//= require datatables/datatables_setup.js

html

<table id="store_orders_table" class="table table-stripped">
              <thead>
                <tr>
                  <th class="bold-detail-text">Customer</th>
                  <th class="bold-detail-text">Order Items</th>
                  <th class="bold-detail-text">Order Date</th>
                  <th class="bold-detail-text">Payment Method</th> 
                </tr>
              </thead>
              <tbody>
                <% @orders && @orders.each_with_index do |order,index| %> 
                  <tr>
                    <td class="detail-text">
                      <%= order.name rescue "" %>
                    </td>
                    <td class="detail-text" style="min-width:102px;">
                      <%= order.order_item.name %>
                    </td>
                    <td class="detail-text" data-export="<%= order.payment.payment_date.strftime("%m-%d-%Y") %>"> 
                      <%= order.payment.payment_date.strftime("%B %d, %Y") rescue ""%>
                    </td>
                    <td class="detail-text">
                      <%= order.payment.payment_method.to_s.titleize rescue "" %>
                    </td> 
                    <td class="detail-text">
                      <%=order.comments %>
                    </td>
                  </tr>
                <% end %>
              </tbody>
              <tfoot>
              </tfoot>
            </table>

JS:

$('#store_orders_table').DataTable( 
    "language": 
      "emptyTable": "<i class='detail-text'>No records found</i>"
    ,
    pageLength: 100,
    bFilter: true,
    dom: 'Brtipl',
    "order": [[ 2, "desc" ]],
    buttons: [
          
            extend: 'excelHtml5',
            filename: 'store_orders_report',
            title: "",
            footer: false,
            header: true,
            text: '<i class="fa fa-file-excel-o"></i> Export as Excel',
            titleAttr: 'Export as EXCEL',
            classAttr: 'pull-right', 
            exportOptions:  
              orthogonal: 'export', 
              columns: [0,1,2,3], 
              format: 
                  body: function ( data, row, column, node ) 
                      if( typeof $(node).data('export') !== 'undefined')
                          data = $(node).data('export');
                                       
                      return data;
                                
                
              
          
    ],
    columns: [
     data: "0",render: function (data, type, row)  return data ,
     data: "1",render: function (data, type, row)  return data ,
     data: "2",render: function (data, type, row)  return data ,
     data: "3",render: function (data, type, row)  return data , 
    ],
    "columnDefs": [
    "targets": [ 0 ], "visible": true, "searchable": true ,
    "targets": [ 1 ], "visible": true, "searchable": true ,
    "targets": [ 2 ], "visible": true, "searchable": true ,
    "targets": [ 3 ], "visible": true, "searchable": true , 
    ]
  ); 

【问题讨论】:

【参考方案1】:

在这里发布答案是因为我没有在任何地方找到它的文档。花费数小时后,它通过更改 production.rb 中的 js_compressor 来工作。在预编译资产时,数据表似乎也需要对 ES5/ES6 的支持。 excel 现在能够显示所有类型的字符,包括对其他语言字符的支持。以前由于特殊字符和一些日语内容而无法打开excel。

  # Compress javascripts
  #config.assets.js_compressor = :uglifier
  config.assets.js_compressor = Uglifier.new(harmony: true)  

【讨论】:

【参考方案2】:

你可以用data.replace(/&lt;\/?[^&gt;]+(&gt;|$)/g, "");清除html条标签

exportOptions: 
    format: 
        body: function(data, row, column, node) 
            return data.replace(/<\/?[^>]+(>|$)/g, "");
        
    

【讨论】:

以上是关于Rails 4数据表导出到excel文件正在工作,但文件不可读的主要内容,如果未能解决你的问题,请参考以下文章

如何将sql表数据导出到excel工作表中?

excel表格如何导出

ROBDC SqlSave:如何将数据导出到 Excel 工作表中?

Rails CSV 导出到 excel 会产生特殊的 Â 和 &amp 字符

将具有多个表的 Access 数据库导出到具有多个工作表的 Excel

在 Excel 工作表单元格中导出数据