如何隐藏某些列? - Google电子表格

时间:2017-11-29 11:31:21

标签: google-apps-script google-sheets

发布的(作为网页)Google电子表格中:

我不希望任何人看到包含敏感数据的电子表格的四列。我希望这四列仅供个人使用。

使用IMPORTRANGE功能的解决方案不适合作为解决方案。这是因为我每个月都会创建一个新的电子表格,其中包含大量数据,而我每个月只需将这四列复制到新工作表上。这些列还根据同一张纸上的数据执行一些计算。

我试图隐藏列this way。但这对我来说有点不舒服。

PS。这与this one

不是同一个问题

1 个答案:

答案 0 :(得分:1)

好吧,因为他们不需要编辑任何可以让它变得容易的东西。

这是用于在webapp上显示表格的代码。您可以选择使其可编辑,也可以将任何列留下任意列。

var SSID='';
var sheetName=''; 
function onOpen()
{
  SpreadsheetApp.getUi().createMenu('HTML Spreadsheet')
    .addItem('Run Spreadsheet in Dialog', 'htmlSpreadsheet')
    .addToUi();
}

function htmlSpreadsheet(mode,edit){
  var mode=mode||'dialog';
  var edit=edit||true;
  var br='<br />';
  var s='';
  var hdrRows=1;
  var ss=SpreadsheetApp.openById(SSID);
  var sht=ss.getSheetByName(sheetName);
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  ;
  switch(edit){
    case true:
      s+='<table>'
      for(var i=0;i<rngA.length;i++){
        s+='<tr>';
        for(var j=0;j<rngA[i].length;j++){
          if(i<hdrRows){
            s+='<th id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="10" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>';
          }else{
            s+='<td id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="10" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>';
          }
        }
        s+='</tr>';
      }
      s+='</table>';
      break;
    case false:
      s+='<table style="border: 1px solid black;">'
      for(var i=0;i<rngA.length;i++){
        s+='<tr>';
        for(var j=0;j<rngA[i].length;j++){
          if(i<hdrRows){
            s+='<th style="border: 1px solid black;">' + rngA[i][j] + '</th>';
          }else{
            s+='<td style="border: 1px solid black;">' + rngA[i][j] + '</th>';
          }
        }
        s+='</tr>';
      }
      s+='</table>';
      break;
  }

  //s+='<div id="success"></div>';
  s+='</body></html>';
  switch (mode){
    case 'dialog':
      var userInterface=HtmlService.createHtmlOutputFromFile('htmlss').setWidth(1000).setHeight(450);
      userInterface.append(s);
      SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Spreadsheet Data for ' + ss.getName() + ' Sheet: ' + sht.getName());
      break;
    case 'web':
      var userInterface=HtmlService.createHtmlOutputFromFile('htmlss').setWidth(1000).setHeight(450);
      return userInterface.append(s).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
   }
}

function updateSpreadsheet(i,j,value)
{
  var ss=SpreadsheetApp.openById(SSID);
  var sht=ss.getSheetByName(sheetName);
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  rngA[i][j]=value;
  rng.setValues(rngA);
  var data = {'message':'Cell[' + Number(i + 1) + '][' + Number(j + 1) + '] Has been updated', 'ridx': i, 'cidx': j};
  return data;
}

function doGet()
{
  var output=htmlSpreadsheet('web');
  return output;
}

这是htmlss.html页面:

<!DOCTYPE html>
<html>
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
    $(function() {

    });
    function updateSS(i,j)
    {
      var str='#txt' + String(i) + String(j);
      var value=$(str).val();
      $(str).css('background-color','#ffff00');
      google.script.run
         .withSuccessHandler(successHandler)
         .updateSpreadsheet(i,j,value)
    }
    function successHandler(data)
    {
      $('#success').text(data.message);
      $('#txt' + data.ridx + data.cidx).css('background-color','#ffffff');
    }
    console.log('My Code');
    </script>
    <style>
      th{text-align:left}
    </style>
  </head>
  <body>
  <div id="success"></div>