gpt4 book ai didi

google-apps-script - 无法从 Web 应用程序调用 Google Script API 函数(TypeError : Cannot read property 'run' of undefined)

转载 作者:行者123 更新时间:2023-12-03 21:26:33 27 4
gpt4 key购买 nike

我有一个谷歌应用程序脚本可以正常工作几个月,但它突然停止工作。我想知道 Google 是否弃用了我的代码的某些部分或其他内容。

这是文件的链接:Click here to view Google Spreadsheet File

尝试从 HTML 文件调用 google 脚本函数时,google 脚本代码显然失败了。这是失败的代码行。

google.script.run.importCSVData(id);

线路失败并捕获以下错误:

TypeError: Cannot read property 'run' of undefined



就像我说的,我让这段代码正常工作了几个月,但它突然停止了工作。

(仅供引用...此代码的目的是将 CSV 文件上传到“Archivo Plano ADN”选项卡中。要运行此代码,您必须简单地选择“Importar Archivo CSV”-->“Importar Archivo...”上层菜单。当提示选择文件时,选择任何 .csv 文件。csv 文件必须以 ;) 分隔

我的 Google 电子表格文件有三个代码文件(“Code.gs”、“CodeImport.gs”和“Picker.html”)

让我给你每个代码:

代码.gs:
function onOpen() {

var me = Session.getEffectiveUser();
if (me.getEmail() == "alejandro.sardi@crusardi.net") {
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();
}

}

代码导入.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('@STRING@');
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>

最佳答案

您需要使用 Google API Loader 库加载 Google File Picker。

代替:

<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>

和:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script>google.load("picker", "1", {callback:function(){pickerApiLoaded =!0}});</script>

请记住在进行此更改后发布 Web 应用程序的新版本。

更新:来自 Google Apps Script 团队的 Erik 说“问题的原因是当 Picker API 加载到 google.picker 时,它当前正在覆盖 google.script,因此 google.script.run() 调用开始失败。”

他们发布了一个 alternate solution - 在加载 Picker API 时手动保留和恢复 google.script:
window.script = google.script;
gapi.load('picker', '1', {callback: function() {
google.script = window.script;
// ...
}});

关于google-apps-script - 无法从 Web 应用程序调用 Google Script API 函数(TypeError : Cannot read property 'run' of undefined),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43273493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com