Ruby Spreadsheet gem 格式单元格在第三个 sheet 上停止工作

Ruby Spreadsheet gem format cell stops working on third sheet

我正在尝试为 table 设置背景颜色。它适用于此代码。但是如果我的工作簿有超过 3 sheets,set_format 将不会在第三 sheet 行 (8) 第 4 个单元格上工作。 从那以后,所有格式都将不起作用。生成的每个 xls 文件都具有相同的结果。它停在那个特定的单元格上,工作簿的所有其余部分都没有更多的样式。有什么建议吗?

请看附图。

def make_xls
      book = Spreadsheet::Workbook.new
      sheet = book.create_worksheet 
      4.times { |x| sheet.column(x).width = 30 }
      4.times { |x| sheet.row(0).set_format(x, title_format) }
      4.times { |x| sheet.row(1).set_format(x, header_format) }
      4.times { |x| sheet.row(7).set_format(x, title_format) }
      4.times { |x| sheet.row(8).set_format(x, header_format) }

      insert_values..
   end

  def title_format
    Spreadsheet::Format.new(
      weight: :bold,
      pattern: 1,
      pattern_fg_color: :silver
    )
  end

  def header_format
    Spreadsheet::Format.new(
      color: :white,
      pattern: 1,
      pattern_fg_color: :xls_color_48,
      weight: :bold
    )
  end

4th cell missing format

欢迎任何建议,我正在使用 spreadsheet (1.2.6),RoR6。

您不应创建多种格式。 而是创建一次并在需要时重复使用它们。

问题是:

4.times { |x| sheet.row(0).set_format(x, title_format) }

然后创建 4 种新格式

4.times { |x| sheet.row(7).set_format(x, title_format) }

再创建 4 个。尽管它们看起来都一样,但实际上是 8 种不同的格式。因此,仅在您发布的代码中,您就在该工作簿中创建了 16 种不同的样式。

Excel can only handle so many formats 在它真正不高兴之前(通常会导致腐败)

该站点的注释部分(在原因下)不适用于以编程方式添加样式以编程方式添加样式时,它将为每个新样式创建单独的引用,而不确定是否这种风格已经存在

试试这个:

  TITLE_FORMAT = Spreadsheet::Format.new(weight: :bold,pattern: 1,pattern_fg_color: :silver)
  HEADER_FORMAT =  Spreadsheet::Format.new(color: :white,pattern: 1,pattern_fg_color: :xls_color_48,weight: :bold)

  def make_xls
      book = Spreadsheet::Workbook.new
      sheet = book.create_worksheet 
      4.times { |x| sheet.column(x).width = 30 }
      4.times { |x| sheet.row(0).set_format(x, TITLE_FORMAT) }
      4.times { |x| sheet.row(1).set_format(x, HEADER_FORMAT ) }
      4.times { |x| sheet.row(7).set_format(x, TITLE_FORMAT) }
      4.times { |x| sheet.row(8).set_format(x, HEADER_FORMAT ) }
   end

看看是否有帮助