0

我正在将 VBA 宏转换为 Excel 脚本,以便在 Excel Web 上运行宏

VBA代码:

//Parameters is a Sheet who has startCol/endCol Cell number and startRow/endRow numbers
// Cells 3,4 is startCol; Cells 3,5 is endCol
// Cells 3,2 is startRow; Cells 3,3 is endRow

For column = Sheets("Parameters").Cells(3,4) To Sheets("Parameters").Cells(3,5)
 For row = Sheets("Parameters").Cells(3,2) To Sheets("Parameters").Cells(3,3)
  
    //then it scan the Projects Sheet and erase the values
      Sheets("Projects").Cells(row, column) = ""
     
    Next row
Next column

如何将其转换为 Javascript/Excel 脚本中的嵌套循环?

我试过类似的东西:

let usedRange = workbook.getWorksheet("Parameters").getRange("O5:GW40");
let rowCount = usedRange.getRowCount();
let columnCount = usedRange.getColumnCount();

for(let i = 1; i< columnCount; i++){
  for(let j = 1; j < rowCount; j++){
   if (usedRangeValues[i][j] != ""){
     usedRangeValues[i][j].setValue("");
  }
 }
}

但我没有更进一步...

4

2 回答 2

2

谢谢你的提问!如果您只是想清除某个范围的值,可以使用以下代码行:

let usedRange = workbook.getWorksheet("Parameters").getRange("O5:GW40").setValue("");

如果您需要遍历一个范围进行检查,您可以使用以下代码。基本上,您需要首先获取范围的值并使用嵌套循环遍历这些值。在大多数情况下,你会从 0 而不是 1 开始你的 for 循环。此外,当你设置一个值时,你将它设置在一个单元格或一个范围上,而不是该范围的值数组。

function main(workbook: ExcelScript.Workbook) {
  let usedRange = workbook.getWorksheet("Parameters").getRange("A1:C5");
  let rowCount = usedRange.getRowCount();
  let columnCount = usedRange.getColumnCount();
  let usedRangeValues = usedRange.getValues();
  for (let i = 0; i < rowCount; i++) {
    for (let j = 0; j < columnCount; j++) {
      if (usedRangeValues[i][j] != "") {
        usedRange.getCell(i, j).setValue("");
      }
    }
  }
}

如果您需要任何其他帮助,请告诉我!

于 2021-06-03T18:13:59.767 回答
0

要添加到 Petra 的答案,您还可以使用worksheet.getRangeByIndexes工作表中的值来获取范围,就像在 VBA 代码中一样。代码看起来像这样 -

let sheet = workbook.getWorksheet('Parameters');
      
// note the getCell is zero Indexed, so the left top corner cell is (0,0). 
// Also the return value needs to be converted to a number
let startCol = sheet.getCell(2, 3).getValue() as number;
let endCol = sheet.getCell(2, 4).getValue() as number;
let startRow = sheet.getCell(2, 1).getValue() as number;
let endRow = sheet.getCell(2, 2).getValue() as number;

let usedRange = sheet.getRangeByIndexes(startRow, startCol, endRow-startRow +1, endCol-startCol +1);
usedRange.setValue("");

于 2021-07-02T07:33:49.520 回答