0

我正在尝试使用 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
};
4

1 回答 1

1

在搞砸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()另一方面,只需在上方或下方复制公式(数据)(不向相邻单元格寻求帮助)。

您可以将这些复制并粘贴到 function 中的相应函数上,TheWholeShebang()并且应该都可以工作。

请注意,我假设根据您的数据有一个固定范围369,但如果您愿意,您可以根据实际大小来计算,以防行数没有改变。

于 2018-11-02T02:07:07.323 回答