當我單擊“添加專案”時,我希望代碼運行并在表單下方的表格中顯示資訊。
function AddItem() {
//DEFINE ALL ACTIVE SHEETS`
var ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINE MENU SHEET `
var poSheet = ss.getSheetByName("POF");
var itemSheet = ss.getSheetByName("Products");
`//GET NEXT ROW OF PO SHEET`
var lastrowPO = poSheet.getLastRow() 1;
`//GET LAST ROW OF ITEM SHEET`
var lastrowItem = itemSheet.getLastRow();
`// GET VALUE OF PART AND QUANTITY`
var part = poSheet.getRange('B15').getValue();
var quantity = poSheet.getRange('B17').getValue();
` // GET UNIT PRICE FROM ITEM SHEET`
for (var i = 2; i <= lastrowItem; i ) {
if (part == itemSheet.getRange(i, 3).getValue()) {
var part = itemSheet.getRange(i, 3).getValue();
var unitCost = itemSheet.getRange(i, 5).getValue();
var prodcode = itemSheet.getRange(i, 2).getValue();
} else if (part == itemSheet.getRange(i, 2).getValue()) {
var part = itemSheet.getRange(i, 3).getValue();
var unitCost = itemSheet.getRange(i, 5).getValue();
var prodcode = itemSheet.getRange(i, 2).getValue();
}
};
// POPULATE PO SHEET
poSheet.getRange(lastrowPO, 1).setValue(prodcode);
poSheet.getRange(lastrowPO, 2).setValue(part);
poSheet.getRange(lastrowPO, 3).setValue(quantity);
poSheet.getRange(lastrowPO, 4).setValue(unitCost).setNumberFormat("#,###.00");
};
- 我使用此代碼匹配 sheet1 中的文本,并從 sheet2 中獲取與該文本匹配的一行資料并將資料帶回 sheet 1。
- 運行需要很多時間。
- 我想讓它跑得更快。有人可以指導我。
- 我是一名業余編碼員。
uj5u.com熱心網友回復:
描述
我無法對此進行測驗,但基本上我所做的是將您的 getValue/setValue 更改為 getValues/setValues。這通常會顯著提高性能。
您的邏輯的某些部分我不太了解,但試圖照原樣復制您的邏輯。例如,您在 else 塊中更改prodcode為。part而不是在找到匹配break項后繼續回圈,而是退出回圈。
使用items電子表格的陣列第 1 行是陣列的第一個索引 0。同樣,電子表格的第 1 列是陣列的第二個索引 0。
代碼.gs
function AddItem() {
//DEFINE ALL ACTIVE SHEETS`
var ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINE MENU SHEET `
var poSheet = ss.getSheetByName("POF");
var itemSheet = ss.getSheetByName("Products");
//GET NEXT ROW OF PO SHEET`
var lastrowPO = poSheet.getLastRow() 1;
//GET LAST ROW OF ITEM SHEET`
var lastrowItem = itemSheet.getLastRow();
// GET VALUE OF PART AND QUANTITY`
var part = poSheet.getRange('B15').getValue();
var quantity = poSheet.getRange('B17').getValue();
// Use getValues to get all data
var items = itemSheet.getDataRange().getValues();
// GET UNIT PRICE FROM ITEM SHEET
// Here I'm assuming you want from row 2 to the last row
// And I'm assuming you want the first occurance of part
for( var i = 1; i < items.length; i ) {
if( part == items[i][2] ) {
var unitCost = items[i][4];
var prodcode = items[i][1];
break;
}
else if( part == items[i][1] ) {
var prodcode = part;
part = items[i][2];
var unitCost = items[i][4];
break;
}
};
// POPULATE PO SHEET
// To use setValues it must pass a 2D array of 1 row
poSheet.getRange(lastrowPO,1,1,4).setValues([[prodcode,part,quantity,unitCost]]);
poSheet.getRange(lastrowPO, 4).setNumberFormat("#,###.00");
};
參考
- 最佳實踐
- Range.getValues()
- Range.setValues()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/486522.html
標籤:javascript 数组 谷歌应用脚本 谷歌表格
