#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. Привет, Купер, смотри мой новый ответ ниже.