excel - sheets - referencias a otras hojas y cómo hacer que los datos de una hoja aparezcan en otra
Cómo convertir un archivo de Google Docs a un archivo de Excel(XLSX) (2)
La imagen muestra el código que se actualiza.
La var "xlsFile" no está definida, ¿por qué? ¿Cómo puedo convertir el archivo Googledocs en un archivo Excel con ScriptEditor (GoogleDocs)
function googleOAuth_ (name, scope) { var oAuthConfig = UrlFetchApp.addOAuthService(name); oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken? scope="+scope); oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken"); oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken"); oAuthConfig.setConsumerKey(''anonymous''); oAuthConfig.setConsumerSecret(''anonymous''); return {oAuthServiceName:name, oAuthUseToken:"always"}; } function test(){ var id = ''#'' exportToXls(id) } function exportToXls(id){ var mute = {muteHttpExceptions: true }; var name = DriveApp.getFileById(id).getName() var url = ''https://docs.google.com/feeds/''; var doc = UrlFetchApp.fetch(url+''download/spreadsheets/Export?key=''+id+''&exportFormat=xls'', mute).getBlob() var xlsfile = DocsList.createFile(doc).rename(name+''.xlsx'') }
Con la API de Drive, podemos obtener más información sobre los archivos que la que está disponible a través de los métodos de DriveApp.
Consulte los
datos
del
archivo
, especialmente
exportLinks
.
Esos enlaces contienen la magia que nos permitirá obtener un archivo XLS.
(Por diversión, coloque un punto de interrupción después de asignar el
file
y verifique con qué información tiene que jugar).
Este script utiliza el servicio de unidad avanzado , que debe estar habilitado . Esta versión contiene una versión más completa, con comprobación de errores.
/**
* Downloads spreadsheet with given file id as an Excel file.
* Uses Advanced Drive Service, which must be enabled. * Throws if error encountered.
*
* @param {String} fileId File ID of Sheets file on Drive.
*/
function downloadXLS(fileId) {
var file = Drive.Files.get(fileId);
var url = file.exportLinks[MimeType.MICROSOFT_EXCEL];
var options = {
headers: {
Authorization:"Bearer "+ScriptApp.getOAuthToken()
},
muteHttpExceptions : true /// Get failure results
}
var response = UrlFetchApp.fetch(url, options);
var status = response.getResponseCode();
var result = response.getContentText();
if (status != 200) {
// Get additional error message info, depending on format
if (result.toUpperCase().indexOf("<HTML") !== -1) {
var message = strip_tags(result);
}
else if (result.indexOf(''errors'') != -1) {
message = JSON.parse(result).error.message;
}
throw new Error(''Error ('' + status + ") " + message );
}
var doc = response.getBlob();
//DocsList.createFile(doc).rename(file.title + ''.xlsx'') // Deprecated
DriveApp.createFile(doc).setName(file.title + ''.xlsx'');
}
El siguiente código utiliza oAuthConfig, que ahora está en desuso. Utilice la respuesta de Mogsdad en su lugar. La función importXLS usa la API de la unidad y aún funciona.
Encontrarás muchas publicaciones que dicen que esto no es posible y (algunas) otras que dicen que puedes ... ¡y obviamente puedes!
La respuesta de Mogsdad aquí (simultáneamente) trae una solución elegante usando el servicio de manejo, aquí hay otra para que pueda elegir ;-)
Como beneficio adicional, agregué el proceso inverso, si alguna vez lo necesita.
Use una llamada de función similar a la que uso en la función de prueba para que funcione.
function googleOAuth_(name,scope) {
var oAuthConfig = UrlFetchApp.addOAuthService(name);
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey(''anonymous'');
oAuthConfig.setConsumerSecret(''anonymous'');
return {oAuthServiceName:name, oAuthUseToken:"always"};
}
function test(){
var id = ''spreadsheet_ID''
exportToXls(id)
}
function exportToXls(id){
var name = DriveApp.getFileById(id).getName()
var url = ''https://docs.google.com/feeds/'';
var doc = UrlFetchApp.fetch(url+''download/spreadsheets/Export?key=''+id+''&exportFormat=xls'',
googleOAuth_(''docs'',url)).getBlob()
var xlsfile = DocsList.createFile(doc).rename(name+''.xls'')
}
function importXLS(){
var files = DriveApp.searchFiles(''title contains ".xls"'');
while(files.hasNext()){
var xFile = files.next();
var name = xFile.getName();
if (name.indexOf(''.xls'')>-1){
var ID = xFile.getId();
var xBlob = xFile.getBlob();
var newFile = { title : name+''_converted'',
key : ID
}
file = Drive.Files.insert(newFile, xBlob, {
convert: true
});
}
}
}