从Google电子表格中的某个范围访问特定单元格

时间:2014-05-12 15:33:27

标签: google-docs-api

我在Google文档中有一个电子表格。它有两张表" projectList"和" projectListCompleted"。当我将特定列的内容更改为"已完成"我已经将代码从projectList移动​​到projectListCompleted。如果我去"已完成"选择并将同一列更改为ANYTHING ELSE然后将该行移回我的工作项目表。好吧,我正在尝试使代码更健壮。我正在创建一个名为' projectMover'我想打电话给它,并告诉它要采取的行动......已完成,已取消,有效等等,并让它根据此做出决定。

我用来将项目(即Active ROW)从一个工作表移动到另一个工作表的代码在这里:

function moveToNewSheet( myActiveSpreadsheet, myActiveSheet, myActiveRange, myTargetSheet )
{
  var row = myActiveRange.getRow();
  var numColumns = myActiveSheet.getLastColumn();
  var targetSheet = myActiveSpreadsheet.getSheetByName( myTargetSheet );
  var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  myActiveSheet.getRange(row, 1, 1, numColumns).moveTo(target);
  myActiveSheet.deleteRow(row);
  // targetSheet.sort(1);
  return target;
};

此代码效果很好。没问题。

但是我开始使用我的projectMover功能并且出现故障,因为我不了解API以及我想要的。我想要做的是拥有' projectMover'拨打' moveToNewSheet'码。这段代码传回了移动项目的范围应该是什么。我想访问该范围内的COLUMN G并插入当前日期,以便项目具有完成日期。但是,正如您在我的代码中所看到的,我并不十分了解如何访问该单元格。

有人有什么想法吗?

function projectMover( myActiveSpreadsheet, myActiveSheet, myActiveRange, myAction )
{

  switch ( myAction )
  {
    case "Completed":
      var myTarget = moveToNewSheet( myActiveSpreadsheet, myActiveSheet, myActiveRange, "projectListCompleted" );
      var targetCell = myTarget.getCell(1,7);
      targetCell.activate();
      targetCell.setValue( "test" );
      break;
    default:
      break;
  }

  // get targetSheet and sort it
};

1 个答案:

答案 0 :(得分:0)

这是我用过的代码......

此功能获取当前ACTIVE工作表和当前ACTIVE范围的单元格,并将它们移动到需要的位置。在MY应用程序中,每个状态类型都有一个它所属的指定工作表,其中大多数状态属于我的projectStatus工作表。但是,例如,COMPLETED状态项目属于projectCompleted工作表,CANCELED状态项目属于projectCancelled工作表。这些连接在一个单独的工作表中进行,我称之为projectStatus,第1列是状态名称,第2列是状态所属的工作表,第3列是派生数 = COUNTIF(projectList!D:D,-insert)状态名称 - ),它会计算这些状态的数量。我在图表中使用了这些信息。

function projectMove( myActiveSheet, myActiveRange)
{
  var curDate = Utilities.formatDate(new Date(), "CST", "MM/dd/yy hh:mm");
  var wrkSprsht = SpreadsheetApp.getActiveSpreadsheet();
  var wrkSht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(myActiveSheet);
  var wrkRng = wrkSht.getRange(myActiveRange, 1, 1, 7);
  var wrkValues = wrkRng.getValues();

  var wrkProject = 
      {
        priority: wrkValues[0][0], 
        title: wrkValues[0][1], 
        resource: wrkValues[0][2], 
        status: wrkValues[0][3], 
        assigned: wrkValues[0][4],
        notes: wrkValues[0][5],
        dateTime: wrkValues[0][6],
        currentSheet: myActiveSheet,
        targetSheet: targetStatusSheet( wrkValues[0][3] )
      };

  Logger.log(wrkProject);
  var trgSht = wrkSprsht.getSheetByName( wrkProject.targetSheet );
  var trgRng = trgSht.getRange(trgSht.getLastRow() + 1, 1);
  wrkRng.moveTo(trgRng);
  wrkSht.deleteRow(wrkRng.getRow());
  var trgCell = trgSht.getRange(trgSht.getLastRow(),7);
  trgCell.setValue( curDate );  
  trgSht.sort(1);
};

这是:

var wrkRng = wrkSht.getRange(myActiveRange, 1, 1, 7);
      var wrkValues = wrkRng.getValues();

      var wrkProject = 
          {
            priority: wrkValues[0][0], 
            title: wrkValues[0][1], 
            resource: wrkValues[0][2], 
            status: wrkValues[0][3], 
            assigned: wrkValues[0][4],
            notes: wrkValues[0][5],
            dateTime: wrkValues[0][6],
            currentSheet: myActiveSheet,
            targetSheet: targetStatusSheet( wrkValues[0][3] )
          };

wrkValues [row] [column](二维数组值)根据需要访问各个单元格。

https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()

希望这有助于其他人。我花了很长时间看...