2015-12-23 24 views
2

我一直在使用电子表格宝石编写xls文件。 与电子表格宝石,合并的细胞可以被动态地进行基于这样Axlsx根据行列号合并单元格,就像在电子表格中一样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 

有没有办法合并基础上的行数和列数喜欢它是如何在电子表格宝石做过Axlsx细胞之前,空字符串值写的?也可以在合并单元格后写入数据?

回答

3

也许最简单的方法是在实际的细胞传递(未经测试):

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。

+0

第一种方法马上工作,我必须构建一个初始和最终列单元格值的数组,像这样* sheet.merge_cells sheet.rows [0] .cells [(4 ..(v-1))] * (((tmp_arry4 [i-1] + 3)-1)...(v-1))] *。也会尝试第二种方法。 – Yuge

+0

关于初始化字符串,我无法合并空单元格,除非使用空字符串值填充它。我不得不建立一个数组,其行构成了axlsx表的行,这些行有空字符串值。 – Yuge

相关问题