#javascript #google-apps-script #google-sheets
#javascript #google-apps-script #google-sheets
Вопрос:
Я пытаюсь заполнить и получить данные в / из Google Sheets из / в веб-приложение Google. Пока что он делает то, что намеревался. Но проблема в том, что я не хочу получать данные в последнюю строку; вместо этого я хочу поместить данные в выбранную строку и столбец.
вот этот код
Code.gs
function doGet(e){
Logger.log(e.parameter);
return HtmlService.createTemplateFromFile("form").evaluate();
}
function formSbmt(formInfo){
var url = "https://docs.google.com/spreadsheets/d/1c4K-kkzxJPDiCYS4xcD2X7rKR8c_9pYqp9N4vtEEybE/edit#gid=0";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Sheet1");
ws.appendRow([null,null,formInfo.orderDate,null,null,formInfo.orderNo,formInfo.orderSrc]);
}
function include(filename){
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
HTML
<head>
<base target="_top">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link href="https://fonts.googleapis.com/icon?family=Material Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<?!= include("page-css"); ?>
</head>
<body>
<h2 class="center">Order Form</h2>
<div class="fr">
<label for="odate">Order Date</label>
<input type="date"id="odate"></input>
</div>
<div class="fr">
<label for="onum">Website Order</label>
<input type="number"id="onum"></input>
</div>
<div class="fr">
<label for="wsrc">Source</label>
<select id="wsrc">
<option>NAJ</option>
<option>JAJ</option>
<option>FJ</option>
</select>
</div>
<div class="fr">
<button id="btn">Submit</button>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<?!= include("page-js"); ?>
</body>
я разделил Javascript, создав функцию включения
Скрипт-js
<script>
document.getElementById("btn").addEventListener("click",sclicked);
function sclicked(){
var formInfo = {};
formInfo.orderDate = document.getElementById("odate").value;
formInfo.orderNo = document.getElementById("onum").value;
formInfo.orderSrc = document.getElementById("wsrc").value;
google.script.run.formSbmt(formInfo);
document.getElementById("odate").value = "";
document.getElementById("onum").value = "";
document.getElementById("wsrc").value = "";
}
</script>
дело в том, что он заполняет данные в последней доступной строке. но у меня уже есть некоторые данные, а также в столбце 0 1 и так далее
Я хотел поместить данные в строку 552 и столбцы 2, 5 и 6 и так далее, за некоторыми исключениями столбцов.
PS: У меня есть столбцы режима на листе, которые мне нужно заполнить в той же форме, просто хотел поэкспериментировать с несколькими столбцами, прежде чем перейти на полный лист.
Комментарии:
1. Когда вы говорите
I want to put data to the selected row and column
, вы имеете в виду поместить данные в любую строку, выбранную в данный момент на вашем листе? Например, еслиD3
выбрано значение, данные будут записываться вC3
,F3
иG3
? Кроме того, привязан ли скрипт к электронной таблице?2. Нет, я хочу идти последовательно, но начинаю после определенной строки для 1-й данные, тогда они будут идти последовательно,
3. Что это значит? Вы хотите записать в первую строку пустые ячейки C, F, G?
4. Нет. я хочу начать его со строки 523 с C F G пустым для каждой новой записи
5. Мне неясно, чего вы хотите достичь. Пожалуйста, рассмотрите возможность расширения вашего описания.
Ответ №1:
Объяснение:
Получите последнюю строку с содержимым в соответствии со столбцом C и начните вставку из столбца C.
- Этот подход предполагает, что столбец C не имеет пустых ячеек между ними, а значения начинаются с ячейки C1.
Решение:
Изменить:
ws.appendRow([null,null,formInfo.orderDate,null,null,formInfo.orderNo,formInfo.orderSrc]);
Для:
var cLength = ws.getRange("C1:C").getValues().filter(String).length;
var data = [formInfo.orderDate,null,null,formInfo.orderNo,formInfo.orderSrc];
ws.getRange(cLength 1,3,1,data.length).setValues(data);
Комментарии:
1. я вставил ваш код, и он ничего не вернул
2. @AliAhmed Я повторю то, что уже есть в моем ответе, но просто чтобы подчеркнуть это. 1) У вас есть пустые ячейки в столбце C? 2) Значения начинаются со строки 1 в столбце C или с другой строки? В качестве альтернативы, предоставьте копию своего листа (удалите конфиденциальную информацию), чтобы я мог видеть ваш лист. Как вы можете понять, действительно сложно дать ответ, если вы не видите лист.
3. Я обновляю ссылку на свой лист. я действительно ценю вашу помощь.
4. @AliAhmed в редакторе сценариев код не связан с вашим вопросом. Можете ли вы обновить код?
5. обновлен код. извините, я новичок во всем этом.