ruby - 使用 Ruby-Roo 访问合并的单元格

标签 ruby ruby-roo

根据下面的示例:值仅存储在 A1 中,其他单元格返回 nil。 如何从其他合并的单元格中获取 A1'a 值,或者只是检查 A1 单元格的范围?

example

最佳答案

这是我的看法,如果所有合并字段都与上一个相同——那么非合并字段应该变成数组

  xlsx = Roo::Excelx.new(__dir__ + "/output.xlsx", { expand_merged_ranges: true })

  parsed = xlsx.sheet(0).parse(headers: true).drop(1)

  parsed_merged = []
    .tap do |parsed_merged|
      parsed.each do |x|
        if parsed_merged.empty?
          parsed_merged << {
            "field_non_merged1" => x["field_non_merged1"],
            "field_merged1"     => [x["field_merged1"]],
            "field_merged2"     => [x["field_merged2"]],
            "field_merged3"     => [x["field_merged3"]],
            "field_merged4"     => [x["field_merged4"]],
            "field_non_merged2" => x["field_non_merged2"],
            "field_non_merged3" => x["field_non_merged3"],
          }
        else
          field_merged1_is_same_as_prev = x["field_non_merged1"] == parsed_merged.last["field_non_merged1"]
          field_merged2_is_same_as_prev = x["field_non_merged2"] == parsed_merged.last["field_non_merged2"]
          field_merged3_is_same_as_prev = x["field_non_merged3"] == parsed_merged.last["field_non_merged3"]

          merged_rows_are_all_same_as_prev = field_non_merged1_is_same_as_prev && field_merged2_is_same_as_prev && field_merged3_is_same_as_prev

          if merged_rows_are_all_same_as_prev
            parsed_merged.last["field_merged1"].push x["field_merged1"]
            parsed_merged.last["field_merged2"].push x["field_merged2"]
            parsed_merged.last["field_merged3"].push x["field_merged3"]
            parsed_merged.last["field_merged4"].push x["field_merged4"]
          else
            parsed_merged << {
              "field_non_merged1" => x["field_non_merged1"],
              "field_merged1"     => [x["field_merged1"]],
              "field_merged2"     => [x["field_merged2"]],
              "field_merged3"     => [x["field_merged3"]],
              "field_merged4"     => [x["field_merged4"]],
              "field_non_merged2" => x["field_non_merged2"],
              "field_non_merged3" => x["field_non_merged3"],
            }
          end
        end
      end
    end
    .map do |x|
      {
        "field_non_merged1" => x["field_non_merged1"],
        "field_merged1"     => x["field_merged1"].compact.uniq,
        "field_merged2"     => x["field_merged2"].compact.uniq,
        "field_merged3"     => x["field_merged3"].compact.uniq,
        "field_merged4"     => x["field_merged4"].compact.uniq,
        "field_non_merged2" => x["field_non_merged2"],
        "field_non_merged3" => x["field_non_merged3"],
      }
    end

关于ruby - 使用 Ruby-Roo 访问合并的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405215/

相关文章:

ruby - GC.start 似乎并没有真正收集垃圾

ruby - 删除 `puts()` 参数中变量后的换行符

Ruby 类方法调用它两次?

ruby - 无法使用 Roo 将 .xls 转换为 .csv

ruby - 有没有办法让 Roo 接受 StringIO 对象来代替文件?

ruby roo 从解析中删除列

ruby-on-rails - Rails 返回 JSON 序列化属性 with_indifferent_access

ruby-on-rails - Cloud9 警告我可以忽略吗?