Google表格宏未完成

时间:2018-10-30 20:09:19

标签: google-sheets google-sheets-api google-sheets-macros

我正在尝试使用Google表格宏解析CSV文件。我已经将所有步骤记录为单独的宏,并且它们一步一步正常工作,但是当我组合成一个宏时,它无法正常运行。 PODdateformatting部分完成后,它停止工作,并且它贯穿Daystodeliverformula的前三行。单元格H2中填充了公式,但是该公式不会自动填充其余的列。有任何想法吗?还是确实,我是要解决所有这些错误并且需要很好地交谈吗? :-)

function TheWholeShebang() {
  var spreadsheet = SpreadsheetApp.getActive(); // start of DeletedUnwantedColumns
  spreadsheet.getRange('AA:DE').activate();
  spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());
  spreadsheet.getRange('W:X').activate();
  spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());
  spreadsheet.getRange('R:U').activate();
  spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());
  spreadsheet.getRange('H:P').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('P1'));
  spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());
  spreadsheet.getRange('A:E').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('E1'));
  spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns()); // end of DeletedUnwantedColumns

  var spreadsheet = SpreadsheetApp.getActive(); // start of Addcolumnsandheaderlabels
  spreadsheet.getRange('A:F').activate(); 
  spreadsheet.getActiveSheet().insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 6);
  spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 6).activate();
  spreadsheet.getRange('G1').activate();
  spreadsheet.getCurrentCell().setValue('POD Date (formatted)');
  spreadsheet.getRange('H1').activate();
  spreadsheet.getCurrentCell().setValue('Days to Deliver');
  spreadsheet.getRange('G2').activate(); // end of Addcolumnsandheaderlabels

  var spreadsheet = SpreadsheetApp.getActive(); // start of PODdateformatting
  spreadsheet.getRange('G2').activate()
  .setFormula('=DATE(LEFT(D2,4),mid(D2,5,2),right(D2,2))');
  spreadsheet.getActiveRange().autoFillToNeighbor(SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES); // end of PODdateformatting

  var spreadsheet = SpreadsheetApp.getActive(); //start of Daystodeliverformula
  spreadsheet.getRange('H2').activate()
  .setFormula('=NETWORKDAYS(E2,G2,Instructions!$B$15:$B$40)-1');
  spreadsheet.getActiveRange().autoFillToNeighbor(SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES); // end of Daystodeliverformula
};

1 个答案:

答案 0 :(得分:0)

在弄乱range.autoFillToNeighbor()并失败之后(请参见上面的评论),我仍然对该方法感到怀疑。

当我使用此range.autoFill()方法时,一切正常。参见下面的代码。

  // start of PODdateformatting
  //var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('G2').activate().setFormula('=DATE(LEFT(D2,4),mid(D2,5,2),right(D2,2))');
  var sourceRange = spreadsheet.getRange("G2:G2");
  var destination = spreadsheet.getRange("G2:G369");
  sourceRange.autoFill(destination,SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);

  //start of Daystodeliverformula
  var spreadsheet = SpreadsheetApp.getActive();
  var range = spreadsheet.getRange('H2').activate().setFormula('=NETWORKDAYS(E2,G2,Instructions!$B$15:$B$40)-1');
  var sourceRange = spreadsheet.getRange("H2:H2");
  var destination = spreadsheet.getRange("H2:H369");
  sourceRange.autoFill(destination,SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);

事后看来,我现在认为range.autoFillToNeighbor()永远都不适合您的用例!

range.autoFillToNeighbor()期望基于相邻列中包含的数据来构建自动填充公式。它会尝试智能地执行此操作,但是相邻列不包含任何有用的信息!它曾经奏效过令人惊讶,也许有时默认为range.autoFill()

另一方面,

range.autoFill()仅在上方或下方复制公式(数据)(不向相邻的单元格寻求帮助)。

您可以将它们复制并粘贴到功能TheWholeShebang()中的相应功能上,并且应该都能正常工作。

请注意,我假设您的数据是固定的369范围,但如果行数不变,则可以根据实际大小计算此范围。