ruby-on-rails - Axlsx 基于行列号合并单元格,就像在电子表格 gem 中一样

标签 ruby-on-rails ruby excel spreadsheet axlsx

我一直在使用Spreadsheet gem 来编写xls 文件。 使用 Spreadsheet gem,可以根据行号和列号动态合并单元格,如下所示

  merge_cells(start_row, start_col, end_row, end_col)

我的代码片段

  excel_file = Spreadsheet::Workbook.new     
  sheet1 = excel_file.create_worksheet :name => 'Example'
  .
  .#code blocks
  .
  .
  start_col = 4
  end_col = 0

  wk_array_size.each_with_index do |v,i|
    end_col = start_col+((v.to_i*2)-1)
    sheet1.merge_cells(0, start_col, 0, end_col)
    start_col = (end_col+3)
  end
  .
  .#code blocks
  .
  sheet1.insert_row(0,week_names)

其中 week_array_size 是一个数组,其中包含合并单元格所依据的散列大小。

  [11, 10, 3]

合并将在遍历数组 week_array_size 时动态完成

  start_col = 4
  end_col = (4+(11*2)-1) = 25

  (0, 4, 0, 25)
  sheet1.merge_cells(0, 4, 0, 25)
  .
  .
  (0, 28, 0, 47)
  sheet1.merge_cells(0, 28, 0, 47)
  .
  .
  (0, 50, 0, 55)
  sheet1.merge_cells(0, 50, 0, 55)

合并单元格后,数据将写入合并的单元格

  sheet1.insert_row(0,week_names)
  sheet1.row(0).height = 30

但是对于 xlsx 文件,相同的方法似乎无法应用于 AXLSX gem,因为它使用像这样的字母数字行列名称 "A1:A2"。并且数据必须在合并之前用空字符串值写入,如下例所示

  p = Axlsx::Package.new


  p.workbook.add_worksheet(:name => 'Example') do |sheet|
  sheet.add_row ["Class Name", "", "", "Time"]
  merge_cells "A1:A2"
  merge_cells "A3:A4"
  end

有没有一种方法可以像在 Spreadsheet gem 中那样根据行号和列号合并 Axlsx 中的单元格?也可以合并单元格后写入数据吗?

最佳答案

可能最简单的方法是传入实际的单元格(未经测试):

merge_cells sheet.rows.last.cells[(1..2)]
merge_cells sheet.rows.last.cells[(3..4)]

但您也可以使用 Axlsx::col_ref or Axlsx::cell_r methodrow, column 转换为电子表格表示法:

merge_cells Axlsx::cell_r(0,0) + ':' + Axlsx::cell_r(1,0)
merge_cells Axlsx::cell_r(2,0) + ':' + Axlsx::cell_r(3,0)

编辑

关于您必须初始化字符串的问题,我可以合并未初始化的单元格,并在指定单元格之前指定合并。我正在使用 Axlsx 2.0.1。

关于ruby-on-rails - Axlsx 基于行列号合并单元格,就像在电子表格 gem 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442559/

相关文章:

ruby-on-rails - 在config/database.yml文件中存储生产环境的DB密码是否可以

mysql - 如何从rails中的数据库加载和制作应用程序脚手架

javascript - 使用 4 位密码的静态页面的简单例份验证

ruby-on-rails - 用户在创建时存在,但实际上不在数据库中

ruby-on-rails - 一旦浏览器关闭,销毁全局变量或将其设置为 nil

ruby-on-rails - 如何使用 assert_select 来测试给定链接的存在?

ruby-on-rails - 尝试验证日期

excel - 如何创建具有最低 80% 源数据值的数据透视表?

excel - Visual Basic Excel : Copying text as text

vba - 使用 VBA 代码在 Excel 中创建组合图表