Как я могу добавить несколько значений в несколько ячеек?

#javascript #google-apps-script #add #stock

Вопрос:

Я привел пример на картинках ниже, как это должно выглядеть.

Я хотел бы добавить акции к текущим акциям с помощью скрипта.

Если мы возьмем изображения в качестве примера, это будет означать, что столбец «Добавить запас» необходимо добавить в текущий столбец запасов, а не перезаписывать его.

Также это должно произойти на другом листе.

Это означает, что в примере добавить стоимость запасов ячейка G5 должна быть равна 10 в текущем листе запасов.

Если у вас возникнут еще какие-либо вопросы, не стесняйтесь задавать их.

Текущий запас
Добавить запас

Вопрос:

Сценарий, который я использую прямо сейчас, выглядит следующим образом:

 function V6() {
  const ss = SpreadsheetApp.getActive();
  const sh0 = ss.getSheetByName('Sheet0');
  const sh1 = ss.getSheetByName('Sheet1');
  const vs = sh0.getRange('G4:I586').getValues();
  vs.forEach(r => { r[2]  = r[0]; r[0] = 0; });
  [{in:0,out:7,sht:sh0},{in:2,out:9,sht:sh1}].forEach(e => {
    sh0.getRange(4, e.out, vs.length, 1).setValues(vs.map(r => [r[e.in]]));
  });
}
 

Если я запущу этот сценарий, все значения из G4:G586 в таблице 0 сложатся в I4:I586 в таблице 0

Но я хочу, чтобы сценарий добавил значение от G4:G586 на листе 0 до I4:I586 на листе 1.

     sh0.getRange(4, e.out, vs.length, 1).setValues(vs.map(r => [r[e.in]]));
 

Если я изменю sh0 на sh1 в строке выше, то значения не будут складываться, а будут перезаписаны.

Не могли бы вы помочь мне с решением, чтобы оно сложилось на другом листе?

Комментарии:

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

2. Я добавил вопрос для вас, поэтому я надеюсь, что вам будет более ясно, чего я хочу. Я стараюсь, чтобы вопрос был как можно меньше, чтобы его было легче понять. Хотел бы услышать от вас.

3. Я понимаю, что для вас это имеет смысл, к сожалению, я не понимаю

4. Привет, Купер, не могли бы вы объяснить, какую часть вы не понимаете, может быть, мы сможем сделать это более понятным для вас таким образом.

5. Что ж, вот в чем дело. Мы здесь, чтобы ответить на вопросы, связанные с написанием сценариев, а не с информацией о конкретных приложениях. В качестве вопроса без использования конкретной информации приложения, такой как запасы или запасы или что-либо еще, потому что для меня это бессмысленно . Вместо этого задайте мне вопрос, который связан с проблемами написания сценариев и терминологией.

Ответ №1:

Вычислите и загрузите столбцы, которые изменились

 function inboeken() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet()
  const vs = sh.getRange('G4:I586').getValues();//getting all of the data at one time saves time
  vs.forEach(r => { r[2]  = r[0]; r[0] = 0; });
  [{in:0,out:7},{in:2,out:9}].forEach(e => {
    sh.getRange(4, e.out, vs.length, 1).setValues(vs.map(r => [r[e.in]]));//It only loads the two columns that have changed thus eliminating the risk of damaging formulas
  });
}
 

Этот массив сопоставляет индексы в данных со столбцами в электронной таблице

 [{in:0,out:7},{in:2,out:9}]
 

Дополнительный вопрос:

Добавление листа

 function inboeken() {
  const ss = SpreadsheetApp.getActive();
  const sr = 4;
  const sh0 = ss.getSheetByName('Sheet0');
  const sh1 = ss.getSheetByName('Sheet1');
  const vs = sh0.getRange('G4:I586').getValues();//getting all of the data at one time saves time
  vs.forEach(r => { r[2]  = r[0]; r[0] = 0; });
  [{in:0,out:7,sht:sh0},{in:2,out:9,sht:sh0},{in:2,out:9,sht:sh1},].forEach(e => {
    let sh = e.sht;
    sh.getRange(sr, e.out, vs.length, 1).setValues(vs.map(r => [r[e.in]]));//It only loads the two columns that have changed thus eliminating the risk of damaging formulas
  });
}
 

Комментарии:

1. Привет Купер, код, который ты мне дал, отлично работает, но я обнаружил, что у меня все еще есть еще одна проблема, о которой я забыл упомянуть. Стоимость акций, указанная в столбце I, должна находиться на другой вкладке. не могли бы вы помочь мне и с этим тоже? Хотел бы услышать от вас!

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

3. Привет, Купер, я попробовал новый код, который ты мне прислал, но, похоже, он не работает. Я изменил названия листов на имена, которые я использую, чтобы это работало, но значение, которое я получаю на новом листе, не складывается, оно просто сохраняет его на нуле. Я забыл что-то изменить в коде? хотел бы услышать от вас.

4. Привет, Купер, отредактированный сценарий все еще работает не так, как я хочу. Прямо сейчас он изменяет значение на новой вкладке вместо того, чтобы добавлять его. Не могли бы вы взглянуть на это?

5. Привет, Купер, смотри мой новый ответ ниже.