我正在使用 rails 中的 'Axlsx' gem,但不知道如何保护该 excel 中的某些特殊列。
问问题
1568 次
3 回答
5
您要做的是指定一个未锁定样式并将其应用于所有不应受保护的行。我知道这有点令人费解,但规范也是如此!
p = Axlsx::Package.new
wb = p.workbook
unlocked = wb.styles.add_style { locked: false }
wb.add_worksheet(name: 'Sheet Protection') do |sheet|
sheet.sheet_protection.password = 'fish'
sheet.add_row [1, 2 ,3] # These cells will be locked
sheet.add_row [4, 5, 6], style: unlocked # these cells will not!
end
p.serialize 'dont_touch_my_headers.xlsx'
要记住的重要一点是,您需要为所有非标题行指定样式,包括
locked: false
于 2013-10-02T16:02:28.590 回答
1
您可以在样式中指定锁定,然后将该样式应用于最后的列:
locked = wb.styles.add_style :locked => true
sheet.col_style 2, locked
我没有测试过。它结合了几个例子。这是锁定单行的示例:
https://github.com/randym/axlsx/blob/master/examples/example.rb#L571
于 2013-09-30T02:27:56.943 回答
1
我的解决方案是我检查了该sheet.sheet_protection
方法并查看了一些有用的方法:
[5] pry(#<ProductsGrid>)> sheet.sheet_protection
=> #<Axlsx::SheetProtection:0x007f8a36173730
@auto_filter=true,
@delete_columns=true,
@delete_rows=true,
@format_cells=true,
@format_columns=true,
@format_rows=true,
@insert_columns=true,
@insert_hyperlinks=true,
@insert_rows=true,
@objects=false,
@password=nil,
@pivot_tables=true,
@scenarios=false,
@select_locked_cells=false,
@select_unlocked_cells=false,
@sheet=true,
@sort=true>
并使用其中之一,就像我在 Microsoft Excel 中使用的一样。下面是我的
unlocked = product_book.styles.add_style locked: false
product_sheet = product_book.add_worksheet(name: 'Product') do |sheet|
sheet.sheet_protection.password = 'password'
sheet.sheet_protection.select_locked_cells = true
sheet.add_row set_product_header, style: wrap_text
end
插入行后,unlocked
对其余行应用样式
于 2018-04-26T06:55:24.060 回答