Я готовлю инвентаризацию для своего работодателя, и мне нужна помощь в поиске сценария, который может сделать это намного проще. У меня есть две электронные таблицы, в одной есть все номера деталей и описания предметов, которые я физически посчитал в инвентаре, а другая представляет собой базу данных от дистрибьютора запчастей. Босс только что сказал мне, что мне нужно указать цены на товары в инвентаре магазина, а цены указаны в листе дистрибьюторов. Что я хотел бы сделать, так это получить сценарий для сравнения двух листов, и когда он найдет совпадающий номер детали, добавить цену из базы данных дистрибьютора в инвентарь магазина.
Вы можете использовать приведенный ниже код, чтобы сравнить номера деталей и получить цены для продуктов, которые находятся внутри 2 вкладки в одной таблице. Это можно изменить для использования 2 разных электронных таблиц. Лучше всего создать тестовую таблицу с некоторыми данными и протестировать ее перед применением на реальных данных.
Скопируйте код, откройте редактор скриптов в электронной таблице, вставьте, сохраните. Вставьте имена листов и соответствующих столбцов, как указано в коде. A, B и т. д. не являются именами столбцов. «Цена», «Номер детали» и т. д. являются примерами названий столбцов. В меню нажмите Выполнить функцию > Выполнить > onOpen. Попросит авторизацию, дайте. Перезагрузить таблицу. В строке меню должен быть пункт Пользовательское меню. Нажмите Получить цены, чтобы выполнить скрипт.
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Custom Menu')
.addItem('Get Prices', 'getPrices')
.addToUi();
}
function getPrices() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var inv = ss.getSheetByName('inventory sheet name here');
var dist = ss.getSheetByName('distributor sheet name here');
var invv = inv.getDataRange().getValues();
var distv = dist.getDataRange().getValues();
var inv_price_col = invv[0].indexOf('put inventory sheet price column name here');
var dist_price_col = distv[0].indexOf('put distributor sheet price column name here');
var inv_part_col = invv[0].indexOf('put inventory sheet part number column name here');
var dist_part_col = distv[0].indexOf('put distributor sheet part number column name here');
var ds = {};
for (var i = 0, max = distv.length; i < max; i++) {
ds[distv[i][dist_part_col]] = distv[i][dist_price_col];
}
for (var i = 0, max = invv.length; i < max; i++) {
invv[i][inv_price_col] = ds[invv[i][inv_part_col]] || '';
}
inv.getDataRange().setValues(invv);
}
не обращайте на это внимания, у меня работает скрипт. Большое спасибо!
Спасибо за помощь @ra89fi. Я попытался запустить этот скрипт, и когда я нажимаю «Получить цены», чтобы выполнить скрипт, я получаю сообщение об ошибке «TypeError: Cannot call method «getDataRange» of null»