由于以下行,我收到消息错误“异常:服务错误:电子表格”:
var sheetCreated = SpreadsheetApp.getActiveSpreadsheet().insertSheet(newSheetName);
我的文件包含 3 张具有唯一名称的表格,您能帮我理解吗?
我运行这个函数:
function load(){
var sheetToCopyName = 'toto'
var spreadSheetToCopyId = '1zDqTaBmoedJPMyopchy2MqVG0JuDveVYUlFQ3_wLO_Y';
var destinationSharedDriveFolderId = '14ZJ2pK2lWYhXXa0u7PQEmgmuXx1xC0Vr'
var sourceSpreadSheet = SpreadsheetApp.openById(spreadSheetToCopyId);
severalSheetsToXlsx(sourceSpreadSheet, destinationSharedDriveFolderId);
}
function severalSheetsToXlsx(sourceSpreadSheet, destinationSharedDriveFolderId)
{
// create the new file that will host the sheet to copy to excel
var destinationSpreadSheet = SpreadsheetApp.create('destinationSpreadSheetForCopy',50,5)
var destinationSpreadSheetId = destinationSpreadSheet.getId()
// create new sheets to copy with hard values
var sourceSheets = sourceSpreadSheet.getSheets();
for (let i = 0; i < sourceSheets.length; i++){
var sheetToCopy = createSheetCopied(sourceSheets[i])
var sheetCopied = sheetToCopy.copyTo(destinationSpreadSheet)
sourceSpreadSheet.deleteSheet(sheetToCopy);
}
// export to excel
exportExcelFile(destinationSharedDriveFolderId, destinationSpreadSheetId)
}
function createSheetCopied(sheetToCopy){
// identify the area to copy
var rangeToCopy = sheetToCopy.getDataRange()
var valuesToCopy = rangeToCopy.getValues()
//create new sheet with values
var newSheetName = sheetToCopy.getName().concat('_new')
var sheetCreated = SpreadsheetApp.getActiveSpreadsheet().insertSheet(newSheetName);
var pastedRange = sheetCreated.getRange(1, 1, valuesToCopy.length, valuesToCopy[0].length);
pastedRange.setValues(valuesToCopy);
return sheetCreated
}
function exportExcelFile(destinationSharedDriveFolderId, spreadSheetId){
var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};
params= spreadSheetId+"/export?format=xlsx"
var url = "https://docs.google.com/spreadsheets/d/"+ params
console.log(url)
var result = UrlFetchApp.fetch(url, requestData);
var excelBlob = result.getBlob();
console.log('EXCEL :')
var folder = DriveApp.getFolderById(destinationSharedDriveFolderId);
var resource = {
title: "NewFileCreated" + ".xlsx",
mimeType: "MimeType.MICROSOFT_EXCEL",
parents: [{ id: folder.getId() }]
}
excelBlob.setName('NewFileCreated' + ".xlsx")
var file = folder.createFile(excelBlob);
console.log("Fichier créé: " + file.getUrl());
}
我从您的示例脚本中注意到,您只想按原样创建一个新文档,但将所有工作表名称更改为
<originalsheetname>_new
除外。如果我正确理解你的脚本,你可能只需要使用以下内容(而不使用其他功能):
function exportExcelFile() {
//Edit starts here
const destinationSharedDriveFolderId = "<Drive Folder ID>";
const spreadSheetId = "<File ID>";
//line to rename sheet name
SpreadsheetApp.openById(spreadSheetId).getSheets().map(x => x.setName(x.getName() + "_new"));
///////////////////////////
var requestData = { "method": "GET", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() } };
params = spreadSheetId + "/export?format=xlsx"
var url = "https://docs.google.com/spreadsheets/d/" + params
console.log(url)
var result = UrlFetchApp.fetch(url, requestData);
var excelBlob = result.getBlob();
console.log('EXCEL :')
var folder = DriveApp.getFolderById(destinationSharedDriveFolderId);
var resource = {
title: "NewFileCreated" + ".xlsx",
mimeType: "MimeType.MICROSOFT_EXCEL",
parents: [{ id: folder.getId() }]
}
excelBlob.setName('NewFileCreated' + ".xlsx")
var file = folder.createFile(excelBlob);
console.log("Fichier créé: " + file.getUrl());
}