Javascript 为google sheet项目的java脚本代码的变量中的当前列编制索引

Javascript 为google sheet项目的java脚本代码的变量中的当前列编制索引,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我刚刚开始学习javascript,我正在尝试这样做: function votazioni() { var spreadsheet = SpreadsheetApp.getActive(); var activeSheet= spreadsheet.getActiveSheet(); var baseDati= spreadsheet.getSheetByName("Foglio2"); var cellRange = activeSheet.getActi

我刚刚开始学习javascript,我正在尝试这样做:

function votazioni() {
  var spreadsheet = SpreadsheetApp.getActive();
  var activeSheet= spreadsheet.getActiveSheet();
  var baseDati= spreadsheet.getSheetByName("Foglio2");
  var cellRange = activeSheet.getActiveCell();
  var imput= activeSheet.getActiveCell().getValue();
  var indiceImput= cellRange.getColumn();
  var copiaDati=baseDati.getActiveRange(1,indiceImput).getValue();
        for (var i=1; i<1204; i++){
          if (imput == copiaDati) {
            for( var j=2; j<7; j++){
              var copiaValore=baseDati.getRange (j,indiceImput).getValue();
              activeSheet.getRange(j,indiceImput).setValue(copiaValore);
            }
            i=1204;          
          }    
        }
}
我有两张不同的表,表1有一些数据,而表2是空的。 Sheet1在A列中有数字,在其他列中有一些内容

当我在Sheet2的a列上输入一个整数时,我试图创建一个运行的脚本(该整数在该表中必须是唯一的,并且出现在Sheet1的a列上),如果它等于Sheet1的a列的数目,脚本必须将Sheet1的对应行复制到Sheet2

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() != "Sheet2" || range.getColumn() != 1 || range.getRow() == 1) return;
  const value = range.getValue();
  const srcSheet = e.source.getSheetByName("Sheet1");
  const srcRange = srcSheet.getRange("A2:A" + srcSheet.getLastRow()).createTextFinder(value).matchEntireCell(true).findNext();
  if (srcRange) {
    srcRange.offset(0, 1, 1, srcSheet.getLastColumn() - 1).copyTo(range.offset(0, 1));
  }
}
我所取得的成就如下:

function votazioni() {
  var spreadsheet = SpreadsheetApp.getActive();
  var activeSheet= spreadsheet.getActiveSheet();
  var baseDati= spreadsheet.getSheetByName("Foglio2");
  var cellRange = activeSheet.getActiveCell();
  var imput= activeSheet.getActiveCell().getValue();
  var indiceImput= cellRange.getColumn();
  var copiaDati=baseDati.getActiveRange(1,indiceImput).getValue();
        for (var i=1; i<1204; i++){
          if (imput == copiaDati) {
            for( var j=2; j<7; j++){
              var copiaValore=baseDati.getRange (j,indiceImput).getValue();
              activeSheet.getRange(j,indiceImput).setValue(copiaValore);
            }
            i=1204;          
          }    
        }
}
函数votazioni(){ var电子表格=SpreadsheetApp.getActive(); var activeSheet=spreadsheet.getActiveSheet(); var baseDati=电子表格.getSheetByName(“Foglio2”); var cellRange=activeSheet.getActiveCell(); var imput=activeSheet.getActiveCell().getValue(); var indicateimput=cellRange.getColumn(); var copiaDati=baseDati.getActiveRange(1,indiceInput.getValue();
对于(var i=1;i我相信您的目标如下

  • 45
    放入“Sheet2”的单元格“A2”时,您需要从“Sheet1”的列“A”中搜索
    45
    的值,并将搜索到的行复制到“Sheet2”
  • 您希望使用谷歌应用程序脚本实现这一点
修改点:
  • 在您的脚本中,
    input
    copiaDati
    进行了比较。但似乎没有扫描“Sheet1”的“A”列
  • 在这种情况下,我认为OnEdit触发器可能适合实现您的目标。当使用OnEdit触发器时,当编辑“Sheet2”的“A”列时,脚本可以自动运行。我认为这种情况可能对您的情况有用
以上几点反映到一个脚本中,如下所示

示例脚本: 请将以下脚本复制并粘贴到Google电子表格的脚本编辑器中。并且,请编辑“Sheet2”的“A”列。这样,脚本将运行,put值将从“Sheet1”的“A”列中搜索,并将行复制到“Sheet2”

  • 在这个示例脚本中,根据您的问题,使用了“Sheet1”和“Sheet2”的工作表名称。因此,如果您的实际情况与它们不同,请修改它们

  • 此脚本的流程如下所示

  • 检查是否编辑了“Sheet2”的“A”列
  • 编辑“Sheet2”的列“A”时,检索编辑的值
  • 从“Sheet1”的“A”列中搜索编辑的值。在这种情况下,使用TextFinder
  • 将行从“Sheet1”复制到“Sheet2”
注:
  • 在本脚本中,为了实现您的目标,使用了simple trigger的OnEdit触发器。因此,当您在脚本编辑器中直接运行
    OnEdit
    功能时,会发生错误。请注意这一点。运行脚本时,请编辑“Sheet2”的“A”列。

  • 如果要手动将脚本运行到活动单元格,还可以使用以下脚本。在这种情况下,可以在脚本编辑器中运行脚本

      function myFunction() {
        const ss = SpreadsheetApp.getActiveSpreadsheet();
        const sheet = ss.getActiveSheet();
        const range = sheet.getActiveCell();
        if (sheet.getSheetName() != "Sheet2" || range.getColumn() != 1 || range.getRow() == 1) return;
        const value = range.getValue();
        const srcSheet = ss.getSheetByName("Sheet1");
        const srcRange = srcSheet.getRange("A2:A" + srcSheet.getLastRow()).createTextFinder(value).matchEntireCell(true).findNext();
        if (srcRange) {
          srcRange.offset(0, 1, 1, srcSheet.getLastColumn() - 1).copyTo(range.offset(0, 1));
        }
      }
    
参考资料:
补充: 关于你的补充问题,如下所示

可以避免在表2?的A列上出现双值

示例脚本如下所示

示例脚本: 在这种情况下,
onEdit
是MOFIDID。使用此脚本时,请在“Sheet2”的“a”列中输入一个值。在这种情况下,当put值存在于“Sheet2”的“a”列中时,put值将被删除。另一方面,当put值不存在于“Sheet2”的“a”列中时,从“Sheet1”的“A”列中搜索put值并复制该行

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() != "Sheet2" || range.getColumn() != 1 || range.getRow() == 1) return;
  const value = range.getValue();
  const values = sheet.getRange("A2:A" + sheet.getLastRow()).getValues();
  values.splice(range.getRow() - 2, 1);
  if (values.flat().includes(value)) {
    range.clearContent();
    return;
  }
  const srcSheet = e.source.getSheetByName("Sheet1");
  const srcRange = srcSheet.getRange("A2:A" + srcSheet.getLastRow()).createTextFinder(value).matchEntireCell(true).findNext();
  if (srcRange) {
    srcRange.offset(0, 1, 1, srcSheet.getLastColumn() - 1).copyTo(range.offset(0, 1));
  }
}
  • 如果您不想删除“Sheet2”上存在的put值,请删除
    range.clearContent();

谢谢,效果很好。哈哈,我在过去的6个小时里写了一些根本不起作用的东西……可以避免在Sheet2的A列上出现双值吗?现在我真的不太懂你的代码,但我已经开始搜索一些东西,比如偏移量。@Toni900V谢谢你的回复。我很高兴你的回复问题已解决。关于您的其他问题,我又添加了一个示例脚本。请确认。如果这不是您期望的结果,我道歉。