我發現我的 Google App Script 中存在問題。使用“setFontWeights(Array)”函式不起作用。我對“setValues(Array)”函式進行了另一次測驗,但它也不起作用。
我想做的事:
- 選擇“是”選項開始設定字體粗細。
- 程式將檢查“SCORE”列,如果“SCORE”為空(“”),則該行的字體粗細設定為“bold”,否則,字體粗細設定為“normal”
問題: 為了測驗錯誤結果,COMMENT 第 46 行到第 50 行和 UNCOMMENT 第 53 行。第 46 行到第 50 行的代碼是我當前的解決方案,因為第 53 行不起作用。
以下是 Google App Script 的副本:
let app = SpreadsheetApp;
let ss = app.getActiveSpreadsheet();
let activeSheet = ss.getActiveSheet();
let sheetName = activeSheet.getName();
let sheet1 = ss.getSheetByName("Sheet1");
let loopOptionRange = sheet1.getRange(4, 4);
let loopOption = loopOptionRange.getValue();
let loopStatusRange = sheet1.getRange(4, 7);
function onEdit(e) {
}
function onOpen() {
loopOptionRange.setValue("Choose");
sheet1.getRange(4, 5).setValue(5);
loopStatusRange.setValue("");
}
function loopTest() {
const startRow = 4; //table head
const lastRow = sheet1.getLastRow();
sheet1.getRange(4, 6).setValue(lastRow);
const startRowLoop = startRow 1; //first row of looping
try {
let textFormats = new Array(500);
for (x = startRowLoop; x <= lastRow; x ) {
const testStatus = sheet1.getRange(x, 3).getValue();
textFormats[x] = new Array(3);
if (testStatus == "") {
for (y = 1; y <= 3; y ) {
textFormats[x][y] = "bold";
}
} else {
for (y = 1; y <= 3; y ) {
textFormats[x][y] = "normal";
}
}
}
//LINE 46 to 50 WORKS
for (x = startRowLoop; x <= lastRow; x ) { //LINE 46
for (y = 1; y <= 3; y ) { //LINE 47
sheet1.getRange(x, y).setFontWeight(textFormats[x][y]); //LINE 48
} //LINE 49
} //LINE 50
//LINE 53 DOES NOT WORK
// sheet1.getRange(startRowLoop, 1, lastRow - startRowLoop 1, 3).setFontWeights(textFormats); //LINE 53
loopStatusRange.setValue("Done");
loopOptionRange.setValue("Choose");
} catch (error) {
app.getUi().alert(`An error occurred.`);
}
}
if (sheetName === "Sheet1"){
if (loopOption == "Yes") {
loopStatusRange.setValue("Processing ...");
loopTest();
} else if (loopOption === "Cancel") {
loopOptionRange.setValue("Choose");
}
}
批量操作 - 陣列 - Google 表格檔案
uj5u.com熱心網友回復:
在您的腳本中,let textFormats = new Array(500);已宣告,并且您在for (x = startRowLoop; x <= lastRow; x ) {,,,}. 在這種情況下,前 5 個元素為空。并且, 的每個元素textFormats都是在 的回圈中創建的for (y = 1; y <= 3; y ) {,,,}。在這種情況下,每個元素都有 4 個元素。我認為在這種情況下,會發生錯誤sheet1.getRange(startRowLoop, 1, lastRow - startRowLoop 1, 3).setFontWeights(textFormats);。我認為這些是你的問題的原因。
當這些點反映到你的腳本中時,它變成如下。
從:
let textFormats = new Array(500);
for (x = startRowLoop; x <= lastRow; x ) {
const testStatus = sheet1.getRange(x, 3).getValue();
textFormats[x] = new Array(3);
if (testStatus == "") {
for (y = 1; y <= 3; y ) {
textFormats[x][y] = "bold";
}
} else {
for (y = 1; y <= 3; y ) {
textFormats[x][y] = "normal";
}
}
}
至:
var values = sheet1.getRange(startRowLoop, 1, lastRow - 4, 3).getValues();
var textFormats = values.map(([a,b,c]) => c == "" ? Array(3).fill("bold") : Array(3).fill("normal"));
- 在這種情況下,請使用
sheet1.getRange(startRowLoop, 1, lastRow - startRowLoop 1, 3).setFontWeights(textFormats);代替for (x = startRowLoop; x <= lastRow; x ) {,,,}。
參考:
- 地圖()
uj5u.com熱心網友回復:
如果你像這樣重新組織它,它似乎運行正常,但我只復制了 Sheet1
function onEdit(e) {
}
function onOpen() {
loopOptionRange.setValue("Choose");
sheet1.getRange(4, 5).setValue(5);
loopStatusRange.setValue("");
}
//I ran this function with no errors
function myfunk() {
let ss = SpreadsheetApp.getActive();
let activeSheet = ss.getActiveSheet();
let sheetName = activeSheet.getName();
let sheet1 = ss.getSheetByName("Sheet1");
let loopOptionRange = sheet1.getRange(4, 4);
let loopOption = loopOptionRange.getValue();
let loopStatusRange = sheet1.getRange(4, 7);
if (sheetName === "Sheet1") {
if (loopOption == "Yes") {
loopStatusRange.setValue("Processing ...");
loopTest();
} else if (loopOption === "Cancel") {
loopOptionRange.setValue("Choose");
}
}
}
function loopTest() {
const startRow = 4; //table head
const lastRow = sheet1.getLastRow();
sheet1.getRange(4, 6).setValue(lastRow);
const startRowLoop = startRow 1; //first row of looping
try {
let textFormats = new Array(500);
for (x = startRowLoop; x <= lastRow; x ) {
const testStatus = sheet1.getRange(x, 3).getValue();
textFormats[x] = new Array(3);
if (testStatus == "") {
for (y = 1; y <= 3; y ) {
textFormats[x][y] = "bold";
}
} else {
for (y = 1; y <= 3; y ) {
textFormats[x][y] = "normal";
}
}
}
for (x = startRowLoop; x <= lastRow; x ) { //LINE 46
for (y = 1; y <= 3; y ) { //LINE 47
sheet1.getRange(x, y).setFontWeight(textFormats[x][y]); //LINE 48
} //LINE 49
} //LINE 50
sheet1.getRange(startRowLoop, 1, lastRow - startRowLoop 1, 3).setFontWeights(textFormats); //LINE 53
loopStatusRange.setValue("Done");
loopOptionRange.setValue("Choose");
} catch (error) {
app.getUi().alert(`An error occurred.`);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481251.html
下一篇:將物件陣列轉換為單個物件
