spreadsheetをgoogle siteに埋め込むと以下のように表示されることを学びました。これは単にgoogle siteの挿入メニューの下にあるspradsheetを選択すればこのように表示できます。
もう少し複雑なscriptを試してみましょう。formから自動入力されるsheet1にはタイムスタンプや他の情報も含まれている場合があります。このときにsheet2に表示用の商品名と価格だけをリストする方法について説明します。
以下のようにGeminiに入力しました。
シート1のC3, C4にformで入力されるたびにシート2のA3, A4などにそれぞれ表示させるにはどのようにすれば良いでしょうか?
その回答は次のようでした。
function onFormSubmit(e) {
// Get the response from the form
var response = e.response;
// Get the range of cells in Sheet1 to update
var sheet1Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("C2:C"); // Adjust the range as needed
// Get the range of cells in Sheet2 to update
var sheet2Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange("A2:A"); // Adjust the range as needed
// Iterate through the cells and update Sheet2
for (var i = 0; i < sheet1Range.getNumRows(); i++) {
var sheet1Value = sheet1Range.getCell(i + 1, 1).getValue(); // Get value from Sheet1
sheet2Range.getCell(i + 1, 1).setValue(sheet1Value); // Set value in Sheet2
}
}
今度はsheet1のDセルも同様にsheet2のBのセルにコピーしようと思い次のようにコピーしましたがうまくいきません。
function onFormSubmit(e) {
// Get the response from the form
var response = e.response;
// Get the range of cells in Sheet1 to update
var sheet1Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("C2:C"); // Adjust the range as needed
// Get the range of cells in Sheet2 to update
var sheet2Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange("A2:A"); // Adjust the range as needed
// Iterate through the cells and update Sheet2
for (var i = 0; i < sheet1Range.getNumRows(); i++) {
var sheet1Value = sheet1Range.getCell(i + 1, 1).getValue(); // Get value from Sheet1
sheet2Range.getCell(i + 1, 1).setValue(sheet1Value); // Set value in Sheet2
}
// Get the response from the form
var response = e.response;
// Get the range of cells in Sheet1 to update
var sheet1Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("D2:D"); // Adjust the range as needed
// Get the range of cells in Sheet2 to update
var sheet2Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange("B2:B"); // Adjust the range as needed
// Iterate through the cells and update Sheet2
for (var i = 0; i < sheet1Range.getNumRows(); i++) {
var sheet1Value = sheet1Range.getCell(i + 1, 1).getValue(); // Get value from Sheet1
sheet2Range.getCell(i + 1, 1).setValue(sheet1Value); // Set value in Sheet2
}
}
そこで、Geminiに以下のように入れました。
次のscriptではシート2のBセルが表示されません。Bセルへのコピーもできるように変更してください。
「・・・」(この中に上のscriptを入力しました)
この回答が以下の通りです。
function onFormSubmit(e) {
// Get the response from the form (only once)
var response = e.response;
// Define ranges for Sheet1 and Sheet2
var sheet1RangeC =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("C2:C");
var sheet2RangeA = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange("A2:A");
var sheet1RangeD = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("D2:D");
var sheet2RangeB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange("B2:B");
// Loop through rows and copy values from Sheet1 to Sheet2
for (var i = 0; i < sheet1RangeC.getNumRows(); i++) {
var sheet1ValueC = sheet1RangeC.getCell(i + 1, 1).getValue(); // Get value from Sheet1 (C)
var sheet1ValueD = sheet1RangeD.getCell(i + 1, 1).getValue(); // Get value from Sheet1 (D)
sheet2RangeA.getCell(i + 1, 1).setValue(sheet1ValueC); // Set value in Sheet2 (A)
sheet2RangeB.getCell(i + 1, 1).setValue(sheet1ValueD); // Set value in Sheet2 (B)
}
}
こうすることで以下のようなシートが表示できました。
スクリプトエディタはspreadsheetの拡張機能から開きます。コードの欄に、Gemeniから得られたscriptをペーストします。
次にトリガーを設定します。トリガーとはいつこのスクリプトを実行するかを決めるタイミングです。formから入力があるタイミングでスクリプトを実行させて、sheet2の表を更新する場合以下のように設定すると良いでしょう。