私はgoogleスクリプトを初めて使用しています。私はウェブから見つかった "write once"スクリプトを修正するために最善を尽くしています。現在、私は温度、湿度などの実験室機器の記録を記録しているスプレッドシートに取り組んでいます。このスプレッドシートでは、最初の行は月の日であるため、B1は1日目、AF1は31日目です。最初の列には、記録が必要なもののリストが含まれています。湿度のような温度;だからA2:A12。すべての読みがB2:AF12に記録されます。行14は、読み取り値の記録を行った技術者が、その頭文字を付ける場所です。例えば、その月の1日目に、技術者はB14に頭文字をつけます。カラム内のすべてのデータが記録された後にポップアップ確認メッセージを追加する
以下は、いくつかの変更を加えたスクリプトです。このスクリプトの問題は、読み取り値が入力されるたびに値を確認するポップアップメッセージが表示されることです。その代わりに、その日の読書を収集した技術者が自分の頭文字を落とした後、メッセージが最後に表示されたかったのです。私はポップアップに「すべての読書を確認してください!これらの読書は一度確認することはできません」のようなものを言いたかった。 「はい」を選択すると、その日のすべての読み取り値と初期値が、ヘルパーシートとアクティブシートに保存されます。いいえを選択した場合、ヘルパーシートには何も保存されません。技術者が戻ってエラーを修正する(読みの1つでタイプミス)。すべてが正しいことを確認した後、技術者は再度最初に表示され、確認用のポップアップで[はい]を選択します。
function onEdit() {
var firstDataRow = 2; // only take into account edits on or below this row
var lastDataRow = 14; // only take into account edits on or above this row
var firstDataColumn = 2; // only take into account edits on or to the right of this column
var lastDataColumn = 32; // only take into account edits on or to the left of this column
// naming pattern for sheets where values are copied for later checking
var helperSheetNameSuffix = "_helper";
// sheets that are free to edit with no protection
var freeToEditSheetNames = ["Free to edit 1", "Free to edit 2", helperSheetNameSuffix + "$"];
// You can use regular expressions in sheet names. The match is not case-sensitive,
// so "free.*edit" will match "free to edit", "Free Editing for Everyone",
// "Sheet (free to edit)" and "Free edit playground".
// Leave the last entry, helperSheetNameSuffix + "$", as it is to ensure that changes to a
// helper sheet do not trigger the creation of another _helper_helper sheet.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var masterSheet = ss.getActiveSheet();
var masterSheetName = masterSheet.getName();
var masterCell = masterSheet.getActiveCell();
var sheetNameRegExp;
// do not record edits on free to edit sheets
for (var sheet in freeToEditSheetNames) {
sheetNameRegExp = new RegExp(freeToEditSheetNames[sheet], "i");
if (sheetNameRegExp.test(masterSheetName)) return;
}
// find helper sheet
var helperSheetName = masterSheetName + helperSheetNameSuffix;
var helperSheet = ss.getSheetByName(helperSheetName);
if (helperSheet == null) { // helper sheet does not exist yet, create it as the last sheet in the spreadsheet
helperSheet = ss.insertSheet(helperSheetName, ss.getNumSheets());
Utilities.sleep(2000); // give time for the new sheet to render before going back
ss.setActiveSheet(masterSheet);
helperSheet.hideSheet();
ss.setActiveRange(masterCell);
}
if (masterCell.getRow() < firstDataRow || masterCell.getColumn() < firstDataColumn || masterCell.getRow() > lastDataRow || masterCell.getColumn() > lastDataColumn) return;
var helperCell = helperSheet.getRange(masterCell.getA1Notation());
var newValue = masterCell.getValue();
var oldValue = helperCell.getValue();
var ui = SpreadsheetApp.getUi();
var response = ui.alert('Is This Entry Correct?', 'This cell cannot be changed after entering a value', ui.ButtonSet.YES_NO);
if (response == ui.Button.YES && oldValue == "") {
masterCell.setValue(newValue);
helperCell.setValue(newValue);
}
if (response == ui.Button.YES && oldValue !== "") {
masterCell.setValue(oldValue); Browser.msgBox('You can not change this value. Please make corrections under Comment & Date/Initial');
}
if (response ==ui.Button.NO && oldValue == "") {
Browser.msgBox('Please Enter A New Value!'); masterCell.setValue(""); return
}
if (response ==ui.Button.NO && oldValue !== "") {
masterCell.setValue(oldValue);
}
}
はあなた
あなたが提供することができます私たちのシートのサンプル? –
https://docs.google.com/spreadsheets/d/1agb9d9MxC7veXlz2ReWQapKmfhLcDMa_gOuebarYbgQ/edit?usp=sharing – ERMaster
[ツアー]とチェックアウト[質問]に従ってください。 –