我们如何使用rubyXL保护纸张的某些部分?

时间:2018-07-10 09:07:33

标签: ruby excel xlsx rubyxl

我希望xlsx电子表格的用户可以编辑工作表的某些部分,但不能编辑大部分。换句话说,我只希望保护工作表的某些部分

learned如何使用rubyXL通过以下代码保护工作表:

sheetProtection = RubyXL::WorksheetProtection.new(
    password: hashedPass,
    sheet: true,
    objects: true,
    scenarios: true,
    format_cells: true,
    format_columns: true,
    insert_columns: true,
    delete_columns: true,
    insert_rows: true,
    delete_rows: true
);
wsData = workbook['data'];
wsData.sheet_protection = sheetProtection;

说,我希望用户只编辑上述表格的单元格区域C2:C13

我无法从documentation of the rubyXL找到语法,也找不到如何使用该文档的语法(请原谅我的无知)。当我单击该页面侧面的任何链接时,我很茫然,因为对我来说,似乎唯一友好的链接是主页。 Google没有帮助。在上面的代码中,我不知道它们如何使工作表的sheet_protection属性可供使用。

在我发现的closest clue中,我了解到通过单元格样式可以实现单元格的“非保护”。因此,我尝试创建一种样式并将其放入单元格中,但是由于缺乏指导,这种样式也被证明很困难。

在github仓库的cell_style.rb中,我发现了有关ProtectionCellStyle类的一些东西。

unprotected = RubyXL::Protection.new(
    locked: false,
    hidden: false
);

unprotecStyle = RubyXL::CellStyle.new(
    name: 'unprotected style'
);

我在文档中找不到如何将它们放在一起,甚至无法在单元格上应用样式:

wsData[1][2].cell_style = unprotecStyle;
# undefined method `cell_style=' for #<RubyXL::Cell(1,2): "cell-content", datatype="str", style_index=8>

我什至不确定自己是否走对了。请帮忙。

1 个答案:

答案 0 :(得分:0)

也许您已经知道了,但这对我有用...

考虑到worksheetcell,我做到了:

worksheet.
  workbook.
  cell_xfs[cell.style_index || 0].
  protection = RubyXL::Protection.new(
    locked: false,
    hidden: false
  )

然后我做了:

worksheet.sheet_protection = RubyXL::WorksheetProtection.new(
  sheet:          true,
  objects:        true,
  scenarios:      true,
  format_cells:   true,
  format_columns: true,
  insert_columns: true,
  delete_columns: true,
  insert_rows:    true,
  delete_rows:    true
)

除了worksheet以外,整个cell都受到保护。