【问题标题】:How to convert data into an Excel file如何将数据转换为 Excel 文件
【发布时间】:2023-03-25 03:36:01
【问题描述】:

我正在使用 CSV 类将数据转换为基于 http://railscasts.com/episodes/362-exporting-csv-and-excel 的 Excel 文件。

下载 Excel 文件后,它不会使用我使用过滤器在我的网页上看到的最新数据进行更新。我的 Excel 文件包含页面首次加载时显示的数据。

我尝试调试问题并尝试了 xlsx_writer 等其他 gem,得到了相同的结果:

def commission_report
   today = Date.today
   if params[:from_date].present?
     from_date = params[:from_date]
     to_date = params[:to_date]
   elsif params[:filter] == 'monthly'
     to_date = today
     from_date = today - 30
   else
     to_date = today
     from_date = today - 7
   end
   @commissions_report = UserOrderHistory.select("user_order_histories.*,SUM(user_order_histories.revenue_sharing) as revenue_total, restaurants.restaurant_name, managers.username,revenue_sharings.revenue").joins("LEFT JOIN revenue_sharings ON revenue_sharings.restaurant_id = user_order_histories.restaurant_id").joins("LEFT JOIN restaurants ON restaurants.id = user_order_histories.restaurant_id").joins("LEFT JOIN managers ON managers.id =   restaurants.manager_id").where("user_order_histories.status != ''").where("revenue_sharing > 0").group("user_order_histories.restaurant_id,user_order_histories.deduction_date").where("user_order_histories.deduction_date BETWEEN ? AND ?",from_date,to_date).order(sort_column + " " + sort_direction)
   @commissions_report = @commissions_report.as_json
   @commissions_report = Kaminari.paginate_array(@commissions_report).page(params[:page]).per(10)
  #  raise @commissions.inspect
   respond_to do |format|
     format.html
     format.csv { send_data @commissions_report.to_csv }
     format.xls #{ send_data @commissions_report.to_csv(col_sep:     "\t") }
   end

 end

【问题讨论】:

  • 数据导出似乎没有应用相同的过滤器。检查:)

标签: ruby-on-rails ruby excel csv xls


【解决方案1】:

当您发出过滤后的 CSV 下载请求时,不会解析参数:

<%= link_to 'Download CSV', your_path(from_date: params[:from_date], to_date: params[:to_date], filter: params[:filter]) %>

这样您的参数将再次发送回您的控制器。

【讨论】:

  • =link_to 'Monthly',commission_report_path(filter: 'monthly'),class:'btn btn-secondary-outline add_hotel_btn' =link_to 'Weekly',commission_report_path(filter: 'weekly'),class :'btn btn-secondary-outline add_hotel_btn' 。它甚至不适用于每周或每月过滤我只传递这些参数
  • @bhupinder 您是否在过滤器中获得了正确的参数?你有像prybyebug 这样的调试器吗?
【解决方案2】:

这是因为当你点击:

link_to "CSV", products_path(format: "csv")

它转到 products 控制器中的 index 方法,在该方法中您再次从数据库中获取所有记录:

@products = Product.order(:name)

因此,您只需将过滤后的产品集合传递给 CSV 格式的响应。像这样的:

format.csv { send_data @filtered_products.to_csv }

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2022-10-01
    • 2019-06-03
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多