所以我仍然在學習Javascript並試圖找到自己的方式。 我正在努力工作,這將節省我每週工作時間的幾小時。在while循環中的IF語句無法正常工作,我在哪裏出錯?
這是一個googlespread表的腳本。它意味着在列中查找關鍵值並相應地移動數據。然後,它應該按區域將數據拆分爲外部電子表格,並將其分配到各個選項卡中。
我認爲我有分裂的權利,但它似乎沒有工作是decidng什麼應該被移動,什麼不應該是。我很確定我的While循環以及while循環中的if語句可能有問題:(
如果有人能指出我的方法錯誤,我會非常感激。以下是完整的腳本。
應該移動的唯一項目如下: IF列AV =需要移除細節AND列AW不爲空且列AX不爲空並且列BC不爲空然後它應該推送到存檔。
OR
IF AV是空白和AW是不是空白和BC不爲空,然後是也應該推到檔案。
非常感謝
function testNinja(){
var sourceSheet = "Change of details requests";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sourceSheet);
var values = sheet.getDataRange().getValues();
var valuesLength = values.length;
var archive = [];
var counter = 1;
var agentSheet = "ID HERE";
// To make things easier, I've defined the worksheet names and the region names into arrays. Position is important, as entry 0 matches entry 0
var regionSheets = ["R/North East&Yorks","R/North West","R/South East","D/South London","D/East","D/North London","M/Midlands","M/Wales&S.West","M/Scotland/N.Ireland"];
var regionNames = ["North East & Yorks","North West","South East","South London","East England","North London","Midlands","Wales & S West","Scotland & N Ireland"];
// giving key columns & key values a var to save typing. Using column letters as var name.
var av = values[counter][47];
var aw = values[counter][48];
var ax = values[counter][49];
var bc = values[counter][54];
var bf = values[counter][57];
var bk = "Need to Remove Details";
var sf = "SET SF TASK";
// put matching values into an archive. This bit doesn't seem to be working correctly
while(counter < valuesLength)
{
if (bf == sf)
{
counter++;
}
if(av == bk && aw != "" && ax != "" && bc != "" || av == "" && aw != "" && bc !="")
{
archive.push(values.splice(counter, 1)[0]);
}
else
{
counter++;
}
}
// create a function called 'move' to move columns into new positions
Array.prototype.move = function (old_index, new_index) {
if (new_index >= this.length) {
var k = new_index - this.length;
while ((k--) + 1) {
this.push(undefined);
}
}
this.splice(new_index, 0, this.splice(old_index, 1)[0]);
}
//go through the archive, use the move function, and trim the end columns. Finally add a timestamp
var timestamp = new Date();
for (var i = 0;i<archive.length;i++)
{
archive[i].move(68,5);
archive[i].length = 73;
archive[i][61] = timestamp;
}
// Split the data by region. There is a region value in Column 65. This determinds what Sheet data is moved too.
var regionData = [];
var regionSs = SpreadsheetApp.openById(agentSheet);
for(var i = 0; i < regionSheets.length;i++){
var regionSheet = regionSs.getSheetByName(regionSheets[i]);
var regionName = regionNames[i];
for(var j = 0; j < archive.length;j++){
var value = archive[j][66];
if(value == regionName){
regionData.push(archive.splice(j, 1)[0]);
}
}
//Write data to sheet here.
var regionDataLength = regionData.length;
if (!regionDataLength) continue;
var lastRow = regionSheet.getLastRow();
var requiredRows = lastRow + regionDataLength - regionSheet.getMaxRows();
if (requiredRows > 0) regionSheet.insertRowsAfter(lastRow, requiredRows);
regionSheet.getRange(lastRow + 1, 1, regionDataLength, regionData[0].length).setValues(regionData);
// clear array for new region data
regionData = [];
// Get data validation from CC2, then apply to CC2:CC .
var CCrule = regionSheet.getRange("CC2").getDataValidation();
regionSheet.getRange("CC2:CC").setDataValidation(CCrule);
}
}
這解決了我遇到的問題。使用Logger.log,我可以得到預期的結果。但是,當我添加'archive.push(values.splice(counter,1)[0]);'我得到錯誤與av,aw,ax vars :( – Munkey