Axlsx基于行列号合并单元格,如Spreadsheet gem

时间:2015-12-23 19:36:40

标签: 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 似乎无法应用相同的方法,因为它使用字母&#34这样的字母数字行列名称; 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

有没有办法根据行号和列号合并Axlsx中的单元格,就像在Spreadsheet gem中完成它一样?合并单元格后也可以写入数据吗?

1 个答案:

答案 0 :(得分:6)

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

<svg width="200" height="200" viewBox="-25 -25 50 50">
    <use xlink:href="#circle"/>
</svg>

但您也可以使用Axlsx::col_ref or Axlsx::cell_r methodmerge_cells sheet.rows.last.cells[(1..2)] merge_cells sheet.rows.last.cells[(3..4)] 转换为电子表格符号:

row, column

修改

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