Google Apps 스크립트를 몇 달 동안 사용하면 갑자기 작동이 중지되었습니다. Google이 내 코드 또는 일부의 일부를 사용 중단할지 궁금합니다. 웹 응용 프로그램에서 Google Script API 함수를 호출 할 수 없습니다. (TypeError : 정의되지 않은 'run'속성을 읽을 수 없습니다.)
이
는 파일에 대한 링크입니다 : Click here to view Google Spreadsheet File HTML 파일에서 구글 스크립트 함수를 호출하려고 할 때 구글 스크립트 코드는 분명히 실패. 이것은 실패한 코드 행입니다.
google.script.run.importCSVData(id);
선은 실패하고 다음과 같은 오류를 잡는다 : 내가 말했듯이
TypeError: Cannot read property 'run' of undefined
, 나는 달 동안 제대로 작동이 코드를했고 갑자기 작동을 멈췄습니다.
(이 코드의 목적은 CSV 파일을 "Archivo Plano ADN"탭에 업로드하는 것입니다.이 코드를 실행하려면 "Importar Archivo CSV"-> "Importar Archivo"를 선택해야합니다. .. ". 상단 메뉴에서 파일을 선택하라는 메시지가 표시되면, 어떤 .csv 파일을 선택 CSV 파일에 의해 구분되어야합니다.)
내 구글 스프레드 시트 파일은 세 개의 코드 파일이 있습니다 ("Code.gs "
: "CodeImport.gs"와 "Picker.html")
내가 당신에게 각각의 코드를 제공하자 Code.gs :
function onOpen() {
var me = Session.getEffectiveUser();
if (me.getEmail() == "[email protected]") {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Protected Ranges')
.addItem('Remove Protection', 'menuItem1')
.addItem('Copy Protected Ranges To Another Sheet', 'menuItem2')
.addItem('Copy SM Protected Ranges to all SA sheets', 'menuItem3')
.addToUi();
ui.createMenu('Importar Archivo CSV')
.addItem('Importar Archivo...', 'showPicker')
.addToUi();
ui.cre
} else {
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.createMenu('Importar Archivo CSV')
.addItem('Importar Archivo...', 'showPicker')
.addToUi();
}
}
CodeImport.gs :
function importCSVData(id) {
try {
var file = DriveApp.getFileById(id);
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString("ISO-8859-1"),";");
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archivo Plano ADN");
sheet.getRange("A:U").clear();
sheet.getRange("G:G").setNumberFormat('@[email protected]');
Logger.log("yes");
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setTrashed(true);
SpreadsheetApp.getUi().alert("Archivo Importado con éxito");
} catch (e) {
MailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Error report jaja - sonríele a la vida!",
"\r\nMessage: " + e.message
+ "\r\nFile: " + e.fileName
+ "\r\nLine: " + e.lineNumber);
}
}
function showPicker() {
var html = HtmlService.createHtmlOutputFromFile('Picker.html')
.setWidth(600)
.setHeight(425)
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi().showModalDialog(html, 'Select File');
}
function getOAuthToken() {
DriveApp.getRootFolder();
return ScriptApp.getOAuthToken();
}
function finishedImport() {
SpreadsheetApp.getUi().alert("Archivo importado exitosamente");
}
function senderror(e) {
MailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Error report jaja - sonríele a la vida!",
"\r\nMessage: " + e.message
+ "\r\nFile: " + e.fileName
+ "\r\nLine: " + e.lineNumber);
}
그리고 마지막으로, Picker.html 파일 :
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
<script type="text/javascript">
var DIALOG_DIMENSIONS = {
width: 600,
height: 425
};
var pickerApiLoaded = false;
function onApiLoad() {
gapi.load('picker', {
'callback': function() {
pickerApiLoaded = true;
}
});
google.script.run.withSuccessHandler(createPicker)
.withFailureHandler(showError).getOAuthToken();
}
function createPicker(token) {
if (pickerApiLoaded && token) {
//var docsView = new google.picker.DocsView()
//.setIncludeFolders(true)
//.setMimeTypes('application/vnd.google-apps.folder')
//.setSelectFolderEnabled(true);
var uploadDocsView = new google.picker.DocsUploadView()
.setIncludeFolders(true)
//.setMimeTypes('application/vnd.google-apps.folder')
//.setSelectFolderEnabled(true);
var picker = new google.picker.PickerBuilder()
//.addView(docsView)
.addView(uploadDocsView)
//.setAppId("AIzaSyCZDa4JKKIOv2AF3QyrG8DnVOXmz27054o")
.enableFeature(google.picker.Feature.NAV_HIDDEN)
.hideTitleBar()
.setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2)
.setOAuthToken(token)
.setCallback(pickerCallback)
.setOrigin('https://docs.google.com')
.build();
picker.setVisible(true);
} else {
showError('Unable to load the file picker.');
}
}
/**
* A callback function that extracts the chosen document's metadata from the
* response object. For details on the response object, see
* https://developers.google.com/picker/docs/result
*
* @param {object} data The response object.
*/
function pickerCallback(data) {
try {
var action = data[google.picker.Response.ACTION];
if (action == google.picker.Action.PICKED) {
var doc = data[google.picker.Response.DOCUMENTS][0];
var id = doc[google.picker.Document.ID];
// Show the ID of the Google Drive folder
//document.getElementById('result').innerHTML = id;
document.getElementById('result').innerHTML = "Importando..."
google.script.run.importCSVData(id);
//google.script.run.deleteImportedFile(id);
google.script.host.close();
} else if (action == google.picker.Action.CANCEL) {
//document.getElementById('result').innerHTML = "Cerrando1..."
google.script.host.close();
//document.getElementById('result').innerHTML = "Cerrando2..."
}
} catch (e) {
document.getElementById('result').innerHTML = e;
google.script.run.senderror(e);
}
}
function showError(message) {
document.getElementById('result').innerHTML = 'Error: ' + message;
}
</script>
</head>
<body>
<div>
<p id='result'></p>
</div>
<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
</body>
</html>
을 나는 정확히 같은 문제가 있습니다. 비슷한 문제가있는 이전에보고 된 버그가 있으며 UI에서 호출 된 대화 상자에 문제를 연결하는 데 사용됩니다. 나는 어떤 변화도 일으키지 않아도되고 문제가 사라지기를 희망한다. – Jonathon
나도 같은 문제가 있습니다. 그 모든 prodction 응용 프로그램을 effecting : ( – Ritz