Я устраиваю тихий аукцион. Поскольку это благотворительное мероприятие, я не хочу платить за какое-либо программное обеспечение, поэтому я пытаюсь создать что-то подходящее в Google.
На листе «Много» в листах Google у меня есть таблица в диапазоне A1: F11, включая строки заголовков. В этом диапазоне будет больше строк, так как я буду получать пожертвования лотов для продажи с аукциона.
У меня также настроена форма Google, которую я хотел бы связать с данными, которые я ввожу на листе лотов. Я хотел бы выполнить итерацию по каждой строке листа лотов и добавить имя лота в столбец B к элементу MultipleChoiceItem в моей форме.
function myFunction() {
var form = FormApp.openByUrl(
'FORM LINK'
)
var workbook = SpreadsheetApp.openByUrl(
'SHEET LINK')
var sheet = book.getSheets()[0];
itemArray = "VALUES FROM SHEET"
var item = form.addMultipleChoiceItem();
item.setTitle('Auction Lots')
.setChoices([
item.createChoice('ItemArray'),
])
}
Я написал код выше, но не знаю, как добавить данные моего листа в массив. В дополнение к этому, я хотел бы добавить описание, резервную цену и текущую самую высокую ставку из столбцов C, D и E в список товаров, но, надеюсь, когда я преодолею это первое препятствие, это станет меньшей проблемой!
Возможно ли то, что я пытаюсь сделать?
TIA!
1 ответ
Я создал пример формы [1] и электронной таблицы [2] на основе вашего описания процесса. Я разработал приведенный ниже код для обновления самой высокой цены предложения в Таблицах, когда пользователь отправляет форму, только если цена предложения в ответе выше, чем текущая. Для этого я использовал документацию по триггерам [3], сервисам Form [4] и Spreadsheet [5].
Вам нужно запустить функцию createOnSubmitTrigger один раз, чтобы создать триггер, который будет запускать функцию runOnFormSubmit, когда пользователь отправляет ответ формы:
function runOnFormSubmit(e) {
//Get Form and Sheet objects
var form = FormApp.openByUrl('Form-URL')
var workbook = SpreadsheetApp.openByUrl('Spreadsheet-URL')
var sheet = workbook.getSheets()[0];
//Get the user's responses for the multiple choice and bid price questions
var formResponse = e.response.getItemResponses();
var lotsResponse = formResponse[0].getResponse();
var bidPrice = formResponse[1].getResponse();
//Use the selected lot name and find its row in the sheet
var selectedLotName = lotsResponse.split(', ')[0];
var textFinder = sheet.getRange(2, 2, sheet.getLastRow()-1, 1).createTextFinder(selectedLotName).matchCase(true).matchEntireCell(true);
var highestBidCell = textFinder.findNext().offset(0, 3);
//If the user's bid price is higher that the the current highest bid, update the sheets
var highestBid = highestBidCell.getValue();
if(bidPrice > highestBid) {
highestBidCell.setValue(bidPrice);
//Get Sheets info in array and remove header
var itemsArray = sheet.getDataRange().getValues();
itemsArray.shift();
//Get multiple choice question
var lotsQuestion = formResponse[0].getItem().asMultipleChoiceItem();
var choicesArray = [];
//Build choices array from updated sheets info
for(var i=0; i<itemsArray.length; i++) {
var lotName = itemsArray[i][1];
var description = itemsArray[i][2];
var reservePrice = itemsArray[i][3];
var highestBid = itemsArray[i][4];
var choiceString = lotName + ', ' + description + ', ' + reservePrice + ', ' + highestBid;
var choice = lotsQuestion.createChoice(choiceString);
choicesArray.push(choice);
}
//Set choices array to the multiple choice question, this will only be done when the bid price is higher that the the current highest bid
lotsQuestion.setChoices(choicesArray);
}
}
//Creates on form submit trigger
function createOnSubmitTrigger() {
var form = FormApp.openByUrl('Form-URL');
ScriptApp.newTrigger('runOnFormSubmit')
.forForm(form)
.onFormSubmit()
.create();
}
Чтобы гарантировать, что скрипт будет запускаться только один раз одновременно, вы можете использовать службу блокировки [6].
[2] https://docs.google.com/spreadsheets/d/1AaGeODbtm4vybQJqdoXL_3zB7hBwTYHZaXcw8 а>
[3] https://developers.google.com/apps-script/guides / triggers / events
[4] https://developers.google.com/apps-script /ссылка/формы/форма-приложение
[5] https://developers.google.com/apps-script / reference / spreadsheet / spreadsheet-app
[6] https://developers.google.com/apps-script/reference /замок/замок
Похожие вопросы
Новые вопросы
google-apps-script
Используйте для вопросов о Google Apps Script, серверной платформе Google для облачных сценариев на основе Javascript для автоматизации задач в продуктах Google и сторонних службах. Используйте в дополнение к релевантным тегам продукта (например, [google-sheets], [google-docs]) или API (например, [google-drive-api]), где это применимо.