Birkaç ay boyunca iyi çalışan bir google apps komut dosyası çalıştırdım ve aniden çalışmayı bıraktım. Google'ın kodumun bir kısmını ya da bir şeyden mahrum kaldığını merak ediyorum. Web App'den Google Script API İşlevleri çağrlanılamıyor (TypeError: undefined öğesinin 'run' özelliği okunamıyor)
Bu
dosyaya link: Click here to view Google Spreadsheet File bir HTML dosyasından bir google komut işlevi çağırmak çalışırken google script kodunu görünüşte başarısız olup. Bu, başarısız olan kod satırı.
google.script.run.importCSVData(id);
hatları başarısız olur ve aşağıdaki hata yakalar: Dediğim gibi
TypeError: Cannot read property 'run' of undefined
, aylardır iyi çalışıyor bu kodu vardı ve aniden çalışmayı durdurdu.
(FYI ... Bu kodun amacı "Archivo Plano ADN" sekmesine bir CSV dosyası yüklemektir.Bu kodu çalıştırmak için "Importar Archivo CSV" -> "Importar Archivo" seçilmelidir. ..". üst menüden dosyayı seçmek istendiğinde herhangi .csv dosyasını seçin csv dosyası ile ayrılmalıdır;.)
My Google E-Tablo dosyası üç kod dosyaları vardır ('Code.gs'
: "CodeImport.gs" ve "Picker.html")
sana her birinin kodunu verelim 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);
}
Ve nihayet, Picker.html dosyasını:
<!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>
ben de aynı sorun var. Sorunu, UI'de çağrılan diyaloglara bağlamak için kullanılan benzer görünen eski hatalar vardır. Herhangi bir değişiklik yapmamayı ve problemin ortadan kalkmasını umarım. – Jonathon
Ben de aynı sorunu yaşıyorum. Onun tüm prodction uygulamalarını etkilemesi :( – Ritz