wb = xlsx_package.workbook # wb.use_autowidth = false wb.styles do |s| sz_all = s.add_style :sz => 10,:border => { :style => :thin, :color =>"000000"},:alignment => {wrap_text: true,:horizontal => :left} blue_cell = s.add_style :bg_color => "FAEBDC", :sz => 10,:height => 20,:b => true, :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: true,:horizontal => :left} wb.add_worksheet(:name => "统计结果") do |sheet| sheet.sheet_view.show_grid_lines = false obj_commit = polls_user_commit[:obj_commit] || [] sub_commit = polls_user_commit[:sub_commit] || [] poll_user_info = polls_user_commit[:poll_users_info] || [] user_commit = polls_user_commit[:user_commit] || [] #客观题的导出 if obj_commit&.size > 0 obj_commit.each do |obj| sheet.add_row obj[:sheet_row], :height =>15,:style => blue_cell sheet.add_row obj[:sheet_answer_row], :height =>15, :style => sz_all sheet.add_row obj[:sheet_answer_percent], :height =>15, :style => sz_all sheet.add_row obj[:sheet_answer_useful], :height =>15, :style => sz_all sheet.add_row [] end end #主观题的导出 if sub_commit&.size > 0 sub_commit.each do |sub| main_sub_title = sub[:sub_tile] main_sub_content = sub[:sub_user_votes] sheet.add_row main_sub_title,:height =>15, :style => blue_cell main_sub_content.each do |con| sheet.add_row con,:height =>15, :style => sz_all end sheet.add_row [] end end sheet.add_row poll_user_info, :height =>15, :style => blue_cell if user_commit&.size > 0 user_commit.each do |com| sheet.add_row com, :height =>15,:style => sz_all end end sheet.column_widths *([25]*sheet.column_info.count) sheet.column_info.first.width = 10 #答题用户的导出 # sheet.sheet_view.show_grid_lines = false # poll_users_info = %w(序号) # poll_ques_titles = poll_questions.pluck(:question_title).map {|k| strip_export_title(k) if k.present?} # poll_un_anony = poll.un_anonymous # if poll_un_anony #是否匿名,默认为false # user_info = %w(登陆名 真实姓名 邮箱 学号) # else # user_info = [] # end # poll_users_info = poll_users_info + user_info + poll_ques_titles # poll_questions.each do |q| # if q.question_type != 3 #问题不为主观题 # question_vote_user = q.poll_votes.find_current_vote("user_id",poll_commit_ids).size #该问题的有效填写量 # sheet_row = ["第#{q.question_number}题"] #选择题答案选项的数组 # sheet_answer_row = ["小计"] #选择题回答的答案人数,数组 # sheet_answer_percent = ["比例"] # sheet_answer_useful = ["有效填写人次",question_vote_user] # q.poll_answers.each do |a| #问卷的答案选项 # answer_users_count = a.poll_votes.find_current_vote("user_id",poll_commit_ids).size # answer_percent = number_to_percentage((answer_users_count.to_f / question_vote_user.to_f)*100,precision:1) # sheet_row.push(a.answer_text) # sheet_answer_row.push(answer_users_count) # sheet_answer_percent.push(answer_percent.to_s) # end # sheet.add_row sheet_row, :height =>15,:style => blue_cell # sheet.add_row sheet_answer_row, :height =>15, :style => sz_all # sheet.add_row sheet_answer_percent, :height =>15, :style => sz_all # sheet.add_row sheet_answer_useful, :height =>15, :style => sz_all # #合并单元格,但无法填充style # # sheet.merge_cells (Axlsx::cell_r(1,sheet.rows.last.row_index) + ':' + Axlsx::cell_r(sheet_row.count-1,sheet.rows.last.row_index)) # # sheet.rows[sheet.rows.last.row_index].style = sz_all # sheet.add_row [] # else #主观题答案 # main_show_row = ["第#{q.question_number}题",q.question_title] # sheet.add_row main_show_row,:height =>15, :style => blue_cell # q.poll_votes.each_with_index do |v,index| #主观题的答案 # sheet.add_row [(index+1),v.vote_text.present? ? v.vote_text : "--"],:height =>15, :style => sz_all # end # sheet.add_row [], :style => sz_all # end # end #each_with_index # # sheet.add_row poll_users_info, :height =>15, :style => blue_cell # poll_users.includes(user: :user_extension).each_with_index do |u,index| # u_user = u.user # user_answer_array = [] # poll_questions.each do |q| # user_poll_votes = u_user.poll_votes.find_current_vote("poll_question_id",q.id) # if user_poll_votes.present? # user_poll_answer_ids = user_poll_votes.pluck(:poll_answer_id).reject(&:blank?) # user_poll_vote_texts = user_poll_votes.pluck(:vote_text).reject(&:blank?) # if user_poll_answer_ids.count > 0 # answer_content = q.poll_answers.find_answer_by_custom("id",user_poll_answer_ids) # if user_poll_answer_ids.count >1 # u_answer = answer_content.pluck(:answer_text).join(";") # else # u_answer = answer_content.first.answer_text # end # elsif user_poll_vote_texts.count > 0 # if user_poll_vote_texts.count > 1 # u_answer = user_poll_vote_texts.join(";") # else # u_answer = user_poll_vote_texts.first # end # else # u_answer = "--" # end # else # u_answer = "--" # end # user_answer_array.push(u_answer) # end # user_cell = [index+1] # if poll_un_anony # user_login = u_user.login # user_name = u_user.real_name.present? ? u_user.real_name : "--" # user_student_id = u_user.student_id.present? ? u_user.student_id : "--" # user_cell += [user_login,user_name, u_user.mail, user_student_id] # end # all_user_cell = user_cell + user_answer_array # sheet.add_row all_user_cell, :height =>15,:style => sz_all # end # sheet.column_widths *([25]*sheet.column_info.count) # sheet.column_info.first.width = 10 end #add_worksheet end