2016-03-04 66 views
0

我試過幾次,簡單地獲取數據了這個網上的excel文件;但到目前爲止我還沒有做到。我有關Excel文件轉換爲電子表格https://gist.github.com/azadisaryev/ab57e95096203edc2741但存取權限的DriveApp不允許在此workfloor這個鏈接基於自己。導入在線擅長的谷歌電子表格文件?

function importDayAhead(){ 

    var params = { 
    "method":"POST", 
    "contentType": 'application/vnd.ms-excel', 
    }; 
var response = UrlFetchApp.fetch("http://www.belpex.be/wp-content/uploads/marketdata/dam/public/results_dam_be/Belpex_Daily_Market_Results.xls", params).getBlob(); 
var responseCSV = response.getAs(MimeType.CSV); 
    Logger.log(responseCSV); 
var data = Utilities.parseCsv(responseCSV, ","); 
    Logger.log(data); 
var ss = SpreadsheetApp.getActive() ; 
var sh = ss.getSheetByName("Sheet8").getRange(1, 1, data.length, data[0].length).setValues(data); 
} 

錯誤:「從應用程序/ vnd.ms - Excel中轉​​換爲文本/不支持CSV」網站不提供csv文件。

+0

看一看:http://stackoverflow.com/questions/26854563/how-to-automatically-import-data-from-uploaded-csv-or-xls-file-into-google-sheet –

+0

我'看過帖子;從csv到電子表格我可以做。但我的源是一個Excel文件.. –

+0

上面的鏈接的答案的後半部分地址的XLS文件的問題。請看我的答案。 –

回答

0

嘛功能是:

/** 
* Convert Excel file to Sheets 
* @param {Blob} excelFile The Excel file blob data; Required 
* @param {String} filename File name on uploading drive; Required 
* @param {Array} arrParents Array of folder ids to put converted file in; Optional, will default to Drive root folder 
* @return {Spreadsheet} Converted Google Spreadsheet instance 
**/ 
function convertExcel2Sheets(excelFile, filename, arrParents) { 

    var parents = arrParents || []; // check if optional arrParents argument was provided, default to empty array if not 
    if (!parents.isArray) parents = []; // make sure parents is an array, reset to empty array if not 

    // Parameters for Drive API Simple Upload request (see https://developers.google.com/drive/web/manage-uploads#simple) 
    var uploadParams = { 
    method:'post', 
    contentType: 'application/vnd.ms-excel', // works for both .xls and .xlsx files 
    contentLength: excelFile.getBytes().length, 
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}, 
    payload: excelFile.getBytes() 
    }; 

    // Upload file to Drive root folder and convert to Sheets 
    var uploadResponse = UrlFetchApp.fetch('https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true', uploadParams); 

    // Parse upload&convert response data (need this to be able to get id of converted sheet) 
    var fileDataResponse = JSON.parse(uploadResponse.getContentText()); 

    // Create payload (body) data for updating converted file's name and parent folder(s) 
    var payloadData = { 
    title: filename, 
    parents: [] 
    }; 
    if (parents.length) { // Add provided parent folder(s) id(s) to payloadData, if any 
    for (var i=0; i<parents.length; i++) { 
     try { 
     var folder = DriveApp.getFolderById(parents[i]); // check that this folder id exists in drive and user can write to it 
     payloadData.parents.push({id: parents[i]}); 
     } 
     catch(e){} // fail silently if no such folder id exists in Drive 
    } 
    } 
    // Parameters for Drive API File Update request (see https://developers.google.com/drive/v2/reference/files/update) 
    var updateParams = { 
    method:'put', 
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}, 
    contentType: 'application/json', 
    payload: JSON.stringify(payloadData) 
    }; 

    // Update metadata (filename and parent folder(s)) of converted sheet 
    UrlFetchApp.fetch('https://www.googleapis.com/drive/v2/files/'+fileDataResponse.id, updateParams); 

    return SpreadsheetApp.openById(fileDataResponse.id); 
} 

/** 
* Sample use of convertExcel2Sheets() for testing 
**/ 
function testConvertExcel2Sheets() { 
    var xlsId = "0B9**************OFE"; // ID of Excel file to convert 
    var xlsFile = DriveApp.getFileById(xlsId); // File instance of Excel file 
    var xlsBlob = xlsFile.getBlob(); // Blob source of Excel file for conversion 
    var xlsFilename = xlsFile.getName(); // File name to give to converted file; defaults to same as source file 
    var destFolders = []; // array of IDs of Drive folders to put converted file in; empty array = root folder 
    var ss = convertExcel2Sheets(xlsBlob, xlsFilename, destFolders); 
    Logger.log(ss.getId()); 
} 

重要的一點是正確的參數傳遞給函數。請注意:

 @param {Blob} excelFile The Excel file blob data; Required 
    * @param {String} filename File name on uploading drive; Required 
    * @param {Array} arrParents Array of folder ids to put converted file in; Optional, will default to Drive root folder 
    * @return {Spreadsheet} Converted Google Spreadsheet instance 

對於第一要求參數Blob,您可以使用類似:

function Blob() { 
    var doc = DocumentApp.openByUrl("https://docs.google.com/document/d/[My document ID]/edit"); 
    var docContentBlob = doc.getBlob(); 

//You can also do something like 

    var copyofDoc = DocsList.getFileById(doc.getId()).makeCopy('new copy of '+doc.getName());// this will create a copy (google doc format) // Optional 
    var newDocfromBlob = DocsList.createFile(docContentBlob);// this will create a pdf version of your doc //Optional 
} 

對於第二個必需的參數,它只是一個string上傳驅動器上的文件名。其餘不是必需的參數。您可以暫時跳過它們。

對於代碼工作,您必須啓用高級谷歌服務的Drive API在你的腳本,並在開發者控制檯(見How to Enable Advanced Services for details)。