Google apps script 谷歌应用程序脚本执行后关闭UI应用程序
我有一个脚本,可以在通过UI插入文件名后从csv文件导入数据。所有这些都可以100%工作,文件已定位,数据已按预期导入。但是,应用程序不会关闭,弹出式UI在屏幕上保持活动状态 我的脚本如下:Google apps script 谷歌应用程序脚本执行后关闭UI应用程序,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个脚本,可以在通过UI插入文件名后从csv文件导入数据。所有这些都可以100%工作,文件已定位,数据已按预期导入。但是,应用程序不会关闭,弹出式UI在屏幕上保持活动状态 我的脚本如下: function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menuEntries = [ {name: "Import Employee Base Data", funct
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [
{name: "Import Employee Base Data", functionName: "importFromBaseCSV"},
];
ss.addMenu("User Functions", menuEntries);
}
//IMPORT BASE DATA FROM CSV
function importFromBaseCSV() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var importBaseDataApp = UiApp.createApplication().setTitle('Import BASE Data').setHeight(120).setWidth(350);
var importBaseDataGrid = importBaseDataApp.createGrid(3, 2);
importBaseDataGrid.setWidget(0, 0, importBaseDataApp.createLabel('Enter the File Date: '));
importBaseDataGrid.setWidget(0, 1, importBaseDataApp.createTextBox().setName('baseDataFilename').setFocus(true).setWidth(150));
importBaseDataGrid.setWidget(1, 0, importBaseDataApp.createLabel('e.g. 23092013'));
importBaseDataGrid.setWidget(2, 0, importBaseDataApp.createLabel(''));
var importBaseDataPanel = importBaseDataApp.createVerticalPanel();
importBaseDataPanel.add(importBaseDataGrid);
var importButton = importBaseDataApp.createButton('Import');
var importHandler = importBaseDataApp.createServerHandler('importBaseData');
importHandler.addCallbackElement(importBaseDataGrid);
importButton.addClickHandler(importHandler);
importBaseDataPanel.add(importButton);
importBaseDataApp.add(importBaseDataPanel);
ss.show(importBaseDataApp);
}
function importBaseData(e){
var fileName = "C BS BASE " + e.parameter.baseDataFilename + ".csv";
var files = DocsList.getFiles();
var csvFile = "";
for (var i = 0; i < files.length; i++) {
if (files[i].getName() == fileName) {
csvFile = files[i].getContentAsString();
break;
}
}
var csvData = CSVToArray(csvFile, ",");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Imported Base Data");
for (var i = 0; i < csvData.length; i++) {
sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
}
// This will parse a delimited string into an array of
// arrays. The default delimiter is the comma, but this
// can be overriden in the second argument.
function CSVToArray( strData, strDelimiter ){
// Check to see if the delimiter is defined. If not,
// then default to comma.
strDelimiter = (strDelimiter || ",");
// Create a regular expression to parse the CSV values.
var objPattern = new RegExp(
(
// Delimiters.
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
// Quoted fields.
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
// Standard fields.
"([^\"\\" + strDelimiter + "\\r\\n]*))"
),
"gi"
);
// Create an array to hold our data. Give the array
// a default empty first row.
var arrData = [[]];
// Create an array to hold our individual pattern
// matching groups.
var arrMatches = null;
// Keep looping over the regular expression matches
// until we can no longer find a match.
while (arrMatches = objPattern.exec( strData )){
// Get the delimiter that was found.
var strMatchedDelimiter = arrMatches[ 1 ];
// Check to see if the given delimiter has a length
// (is not the start of string) and if it matches
// field delimiter. If id does not, then we know
// that this delimiter is a row delimiter.
if (
strMatchedDelimiter.length &&
(strMatchedDelimiter != strDelimiter)
){
// Since we have reached a new row of data,
// add an empty row to our data array.
arrData.push( [] );
}
// Now that we have our delimiter out of the way,
// let's check to see which kind of value we
// captured (quoted or unquoted).
if (arrMatches[ 2 ]){
// We found a quoted value. When we capture
// this value, unescape any double quotes.
var strMatchedValue = arrMatches[ 2 ].replace(
new RegExp( "\"\"", "g" ),
"\""
);
} else {
// We found a non-quoted value.
var strMatchedValue = arrMatches[ 3 ];
}
// Now that we have our value string, let's add
// it to the data array.
arrData[ arrData.length - 1 ].push( strMatchedValue );
}
SpreadsheetApp.getActiveSpreadsheet().toast("...Completed", "Import Employee Base Data:", 3);
// Return the parsed data.
return( arrData );
var importBaseDataApp = UiApp.getActiveApplication();
importBaseDataApp.close();
return importBaseDataApp;
}
函数onOpen(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
变量菜单项=[
{name:“导入员工基础数据”,functionName:“importFromBaseCV”},
];
添加菜单(“用户功能”,菜单);
}
//从CSV导入基础数据
函数importFromBaseCV(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var importBaseDataApp=UiApp.createApplication().setTitle('Import BASE Data').setHeight(120)、setWidth(350);
var importBaseDataGrid=importBaseDataApp.createGrid(3,2);
importBaseDataGrid.setWidget(0,0,importBaseDataApp.createLabel('输入文件日期:');
importBaseDataGrid.setWidget(0,1,importBaseDataApp.createTextBox().setName('baseDataFilename').setFocus(true).setWidth(150));
importBaseDataGrid.setWidget(1,0,importBaseDataApp.createLabel('e.23092013'));
setWidget(2,0,importBaseDataApp.createLabel(“”));
var importBaseDataPanel=importBaseDataApp.createVerticalPanel();
添加(importBaseDataGrid);
var importButton=importBaseDataApp.createButton('Import');
var importHandler=importBaseDataApp.createServerHandler('importBaseData');
importHandler.addCallbackElement(importBaseDataGrid);
importButton.addClickHandler(importHandler);
添加(导入按钮);
importBaseDataApp.add(importBaseDataPanel);
ss.show(importBaseDataApp);
}
函数importBaseData(e){
var fileName=“C BS BASE”+e.parameter.baseDataFilename+“.csv”;
var files=DocsList.getFiles();
var csvFile=“”;
对于(var i=0;i有人能帮忙吗?我只是快速地看了看,但是试试这个。我将“Toast”和“Close”移动到clickHandler调用的函数中。如果您想在调用函数中控制Ui,它会更加平滑。有时,您可能会幸运地发现,它们会关闭或更新,并在另一个调用的函数中调用它们
function importBaseData(e){
var fileName = "C BS BASE " + e.parameter.baseDataFilename + ".csv";
var files = DocsList.getFiles();
var csvFile = "";
for (var i = 0; i < files.length; i++) {
if (files[i].getName() == fileName) {
csvFile = files[i].getContentAsString();
break;
}
}
var csvData = CSVToArray(csvFile, ",");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Imported Base Data");
for (var i = 0; i < csvData.length; i++) {
sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
SpreadsheetApp.getActiveSpreadsheet().toast("...Completed", "Import Employee Base Data:", 3);
var importBaseDataApp = UiApp.getActiveApplication();
importBaseDataApp.close();
return importBaseDataApp;
}
// This will parse a delimited string into an array of
// arrays. The default delimiter is the comma, but this
// can be overriden in the second argument.
function CSVToArray( strData, strDelimiter ){
// Check to see if the delimiter is defined. If not,
// then default to comma.
strDelimiter = (strDelimiter || ",");
// Create a regular expression to parse the CSV values.
var objPattern = new RegExp(
(
// Delimiters.
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
// Quoted fields.
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
// Standard fields.
"([^\"\\" + strDelimiter + "\\r\\n]*))"
),
"gi"
);
// Create an array to hold our data. Give the array
// a default empty first row.
var arrData = [[]];
// Create an array to hold our individual pattern
// matching groups.
var arrMatches = null;
// Keep looping over the regular expression matches
// until we can no longer find a match.
while (arrMatches = objPattern.exec( strData )){
// Get the delimiter that was found.
var strMatchedDelimiter = arrMatches[ 1 ];
// Check to see if the given delimiter has a length
// (is not the start of string) and if it matches
// field delimiter. If id does not, then we know
// that this delimiter is a row delimiter.
if (
strMatchedDelimiter.length &&
(strMatchedDelimiter != strDelimiter)
){
// Since we have reached a new row of data,
// add an empty row to our data array.
arrData.push( [] );
}
// Now that we have our delimiter out of the way,
// let's check to see which kind of value we
// captured (quoted or unquoted).
if (arrMatches[ 2 ]){
// We found a quoted value. When we capture
// this value, unescape any double quotes.
var strMatchedValue = arrMatches[ 2 ].replace(
new RegExp( "\"\"", "g" ),
"\""
);
} else {
// We found a non-quoted value.
var strMatchedValue = arrMatches[ 3 ];
}
// Now that we have our value string, let's add
// it to the data array.
arrData[ arrData.length - 1 ].push( strMatchedValue );
}
// Return the parsed data.
return( arrData );
}
函数导入数据库数据(e){
var fileName=“C BS BASE”+e.parameter.baseDataFilename+“.csv”;
var files=DocsList.getFiles();
var csvFile=“”;
对于(var i=0;i