2010-12-14 7 views
4

Ниже приведен сценарий, который я использую для электронной таблицы Документов Google.Значок установки в Javascript

Эти ссылки показывают, что я делаю:

http://i.stack.imgur.com/uGik7.png

http://i.stack.imgur.com/AbKnQ.png

Как я могу создать «флаг», так что, когда я запускаю этот скрипт во второй раз, он не делает добавить добавленные запасы?

function myFunction() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheetByName("Purchase Orders"); 
    var sheet2 = ss.getSheetByName("Inventory"); 
    var data = sheet1.getDataRange(); 
    var i_data = sheet2.getDataRange(); 
    var lastRow = data.getLastRow(); 
    var iLastRow = i_data.getLastRow(); 

    for (i=1;i<=lastRow;i++) { 
    if (data.getCell(i, 5).getValue() == "stock"){ 
     for (n=1;n<=iLastRow;n++){ 
     if (data.getCell(i,3).getValue() == i_data.getCell(n,3).getValue()) { 
     i_data.getCell(n, 1).setValue(i_data.getCell(n,1).getValue() + data.getCell(i,2).getValue()); 
     } 
     } 
    } 

    } 
}​ 

Я предполагаю, что я пытаюсь сделать это: После того, как этот пункт был добавлен к инвентарю, скрипт добавляет й в колонку я эта строка. Затем, когда сценарий запускается снова, он пропускает строки с x в столбце i

ответ

2

В JavaScript функции являются объектами. Объекты имеют свойства. Итак, украсьте свою функцию:

function myFunction() { 
    if (!myFunction.alreadyDoneRunIt) { 
     alert('bapt uia'); 
     myFunction.alreadyDoneRunIt = true; 
    } 
} 

for (var i = 0; i < 10; i++) { 
    myFunction(); // alerts once 
} 
+0

Я не понимаю. "AlreadyDoneRunIt ??" – David

3

Назначьте ячейку для хранения значения флага и проверите скрипт на эту ячейку для значения флага.

+0

Итак, как бы я настроил это для этого. После добавления элемента в инвентарь сценарий добавляет x в столбец i этой строки. Затем, когда скрипт запускается снова, он пропускает строки с x в столбце i – David

+0

Возможно, вы уже решили это, но anywho ... В столбце X я решит вашу проблему отлично. Вы хотите сохранить флаг, указывающий, что каждая строка была обработана в самой электронной таблице , чтобы вы не потеряли эту информацию, когда вы закройте лист. Кроме того, вы (или какой-либо другой человек), возможно, захотите, чтобы знали, была ли обработана определенная строка. –

1

Сначала добавьте значения в массив. Каждый раз, когда вы добавляете элемент, проверяйте массив, чтобы узнать, уже ли он в нем. Затем зациклируйте свой массив на сообщение в пользовательском интерфейсе.

Вот сообщение, чтобы помочь проверить, содержит ли массив уже значение. stackoverflow.com/questions/237104/

+0

Я немного смущен. Не могли бы вы привести пример? – David

+0

Не используйте массив для поиска, используйте хэш. –