如何在 Excel 脚本中嵌套循环以扫描特定范围
How to Nest Loop in Excel Script in order to Scan specific Range
我正在将 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("");
}
}
}
但我没有更进一步...
感谢您的提问!如果您只是想清除范围内的值,可以使用以下代码行:
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("");
}
}
}
}
如果您需要任何其他帮助,请告诉我!
要添加到 Petra 的答案中,您还可以使用 worksheet.getRangeByIndexes
来使用 sheet 中的值获取范围,就像在您的 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("");
我正在将 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("");
}
}
}
但我没有更进一步...
感谢您的提问!如果您只是想清除范围内的值,可以使用以下代码行:
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("");
}
}
}
}
如果您需要任何其他帮助,请告诉我!
要添加到 Petra 的答案中,您还可以使用 worksheet.getRangeByIndexes
来使用 sheet 中的值获取范围,就像在您的 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("");