Как сдвинуть ячейки вниз без удаления формулы при соблюдении условий - PullRequest
1 голос
/ 11 октября 2019

Я очень зеленый разработчик, пытающийся создать программу транзакций для инвентаризации в google sheet с помощью скрипта приложения google. Я работаю на складе и пытаюсь сделать свою работу лучше, чем в текущей системе (физические счета каждый месяц).

Есть 3 ячейки для ручного ввода (SKU, Тип / Причина, Количество), с 4-й ячейкой, автоматически генерирующей метку времени, когда все 3 ячейки заполнены.

После того, как все 4 ячейки заполнены, я хочу, чтобы программа искала правильный SKU (все уникально # 'd) затем обновить количество с помощью + или -.

Я также смотрю на уменьшение ошибки ввода в + -QTY, поэтому, возможно, посмотрим, как причина определит, является ли она +/-.

например. Тип = S = Продано = - например. Тип = N = Новые единицы = +

Инвентаризация размещена на листе Google, отражающем физическое расположение SKU на стеллажах / полках.

Я хочу, чтобы программа также сдвинула строку вниз1 строка, чтобы оставить историю транзакций инвентаризации.

enter code here function onEdit (e) {var activeSheet = e.source.getActiveSheet ();var range = e.range;

range = (obj1,obj2,obj3,obj4)
range[0] = obj1
range[0].getvalue = obj1.getvalue
range[1] = obj2
range[1].getvalue = obj2.getvalue
range[2] = obj3
range[2].getvalue = obj3.getvalue
range[3] = obj3
range[3].getvalue = obj4.getvalue

var var1=range[0].getvalue()
var var2=range[1].getvalue()
var var3=range[2].getvalue()
var var4=range[3].getvalue()

if var1<>"" and var2<>"" and var3<>"" and var4<>"")
var sheet = SpreadsheetApp.getActive()
sheet.getRange("C13:F13").moveto(sheet.getRange("D13:F13")

}

1 Ответ

1 голос
/ 11 октября 2019

Я немного поиграл с этим. Я знаю, что вы пытались сместить ячейки вниз, но я обнаружил, что проще сместить SKU, тип, количество и метку времени вправо, чтобы вести журнал транзакций в электронной таблице.

Так что, надеюсь, это даст вам некоторыепонимание того, как вы можете сделать это самостоятельно по-своему.

Вот код:

Это функция onEdit () (т.е. простой триггер)

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Sheet1')return;
  var rg=sh.getRange(1,2,3,1);
  var vA=rg.getValues().map(function(r){return r[0];});
  var sku=vA[0];
  var type=vA[1];
  var quan=vA[2];
  e.source.toast(sku + ',' + type + ',' + quan);
  SpreadsheetApp.flush();
  if(e.range.columnStart==2 && e.range.rowStart<5 && sku && type && quan) {
    sh.getRange("B4").setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMddHHmm"));
    var sh2=e.source.getSheetByName('Sheet2');
    var rg2=sh2.getDataRange();
    var luA=rg2.getValues();
    for(var i=1;i<luA.length;i++) {
      if(luA[i][0]==sku) {
        if(type=='Sold') {
          //sh.getRange(3,2).setValue(Number(luA[i][2]-quan));
          sh2.getRange(i+1,3).setValue(Number(luA[i][2]-quan));
          e.source.toast('Sold');
        }
        if(type=='New') {
          //sh.getRange(3,2).setValue(Number(luA[i][2]+quan));
          sh2.getRange(i+1,3).setValue(Number(luA[i][2]+quan));
          e.source.toast('New');
        }
        sh.insertColumnAfter(2);  
        sh.getRange(1,3,4,1).setValues(sh.getRange(1,2,4,1).getValues())
        sh.getRange(1,2,4,1).clearContent();
      }
    }
  }
}

А вот как выглядят мои Лист1 и Лист2. Каждый элемент в Sheet2 начинался с 100.

Sheet1:

enter image description here

Sheet2:

enter image description here

В случае, если вы никогда не работали с функцией onEdit (e), e - это параметр, который содержит данные из объекта события, который загружается при получении триггера события. Таким образом, вы не можете запустить эту функцию из редактора сценариев. Вы должны скопировать его и внести соответствующие изменения в столбец 2, заполнив значения для SKU, Тип и количество.

Надеемся, что этот пример даст вам некоторое представление о том, как вы можете продолжить.

...