0

我正在尝试为表格设置背景颜色。它适用于此代码。但是,如果我的工作簿有 3 张以上的工作表,则 set_format 将无法在第三张工作表行(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

第 4 个单元格缺失格式

任何建议表示赞赏,我正在使用电子表格(1.2.6),RoR6。

4

1 回答 1

0

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

问题是:

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 只能处理这么多格式,然后才真正感到不安(通常会导致损坏)

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

而是试试这个:

  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

看看是否有帮助

于 2020-06-05T20:13:14.733 回答