Google sheets 保护范围,仅允许编辑**值**(即保护所有格式)

Google sheets 保护范围,仅允许编辑**值**(即保护所有格式),google-sheets,Google Sheets,我认为这在当前版本的Google Sheets中是不可能的,但我想问一下: 我希望用户能够在电子表格中输入特定范围内的值,但我希望防止他们更改格式(特别是数据验证和条件格式)。我还想阻止他们添加新行/列或删除行/列 这可能吗?您可以在新的工作表上完成。右键单击工作表名称,选择“保护工作表”,选择“除某些单元格外”,您可能会从那里得到它 您可能有一张旧图纸,因为它在某些现有图纸上不起作用。如果您单击“数据”并仅将“命名和受保护的范围”作为单个条目而不是两个单独的菜单项显示,则您所处的工作表较旧,不

我认为这在当前版本的Google Sheets中是不可能的,但我想问一下:

我希望用户能够在电子表格中输入特定范围内的值,但我希望防止他们更改格式(特别是数据验证和条件格式)。我还想阻止他们添加新行/列或删除行/列


这可能吗?

您可以在新的工作表上完成。右键单击工作表名称,选择“保护工作表”,选择“除某些单元格外”,您可能会从那里得到它


您可能有一张旧图纸,因为它在某些现有图纸上不起作用。如果您单击“数据”并仅将“命名和受保护的范围”作为单个条目而不是两个单独的菜单项显示,则您所处的工作表较旧,不允许进行保护。

最佳解决方案和最简单的方法是按住Ctrl+Shift+V键,将数据仅粘贴为值。我也一直在尝试这样做,因为我们的工作表涉及从不同来源复制/粘贴。在新数据上格式化画图既烦人又浪费时间。练习Ctrl+Shift+V进行粘贴,以避免这样做。受保护的范围仅阻止其他用户输入数据。它无助于保持格式

保护工作表选项可能会限制其他用户添加/删除行的能力,但我也花了大量时间试图解决条件格式问题。最后,我使用了一些变通方法

  • 我使用appscript进行条件格式设置。不过,这是最有效的解决方案,因为我不太精通编写代码,所以我觉得它相当麻烦。下面是部分示例
  • 我使用的更快的解决方法是对用户编辑的单元格旁边的单元格进行有条件的格式化,然后我将保护这些单元格

为了保护条件格式,我将范围设置为比需要的大一行或一列,并保护这个额外的行或列。然后,包括其范围内的受保护单元格在内的条件格式将无法再修改。

不用现成的工具,但我认为您可以使用GAS开发一个简单的OneEdit触发器,在进行更改时立即将所有“正确”格式重新应用于活动范围,就像一个样式表,只要有变化,它就会重新绘制工作表。这个问题与谷歌工作表相关的编程无关,所以它与堆栈溢出无关。在对一个类似问题的回答中,这个问题似乎有一个与编程相关的解决方法,但它并没有回答这个问题。我想保护格式,但仍然允许用户更改单元格中的数据。谢谢,但这并不能解决问题。我并不担心自己会意外地更改格式,而是希望防止其他用户这样做。试图教育他们所有人是一项艰巨的工作,是不可靠的。我希望完全不允许更改格式以避免问题。这不会阻止编辑器更改行/列中其他单元格的数据验证和格式。
if (values[i] == 'SUB') {
      sheet
      .setRowHeight(i+1, 19)
      .getRange('A'+n+':CB'+n)
      .setBackgroundColor('#b7b7b7')
      .setFontFamily("Abel").setFontSize(6).setFontColor('white').setFontWeight("bold")
      .setVerticalAlignment(DocumentApp.VerticalAlignment.MIDDLE).setHorizontalAlignment("center")
      .setBorder(null, null, true, null, null, null,'white',SpreadsheetApp.BorderStyle.SOLID_THICK)   /////// top,left,bottom,right,vertical,horizontal,color,style;

      sheet.getRange('O'+n+':O'+n).setBackgroundColor('white')
      sheet.getRange('AF'+n+':AF'+n).setBackgroundColor('white')

      sheet.getRange('AJ'+n+':AJ'+n).setBorder(null, null, null, true, null, null,'white',SpreadsheetApp.BorderStyle.SOLID_THICK)
      sheet.getRange('AN'+n+':AN'+n).setBorder(null, null, null, true, null, null,'white',SpreadsheetApp.BorderStyle.SOLID_THICK)
      sheet.getRange('AR'+n+':AR'+n).setBorder(null, null, null, true, null, null,'white',SpreadsheetApp.BorderStyle.SOLID_THICK)
      sheet.getRange('AV'+n+':AV'+n).setBorder(null, null, null, true, null, null,'white',SpreadsheetApp.BorderStyle.SOLID_THICK)