0

私はこのコードをスクリプトエディタで使用してGoogleスプレッドシートの列からクエリを読み込み、Google Apps Scriptを知らない人が開始日、終了日、メトリック、ディメンションなどのクエリを変更する場合に使用します。コードでは、開始日、終了日、メトリック、ディメンション、およびフィルタを正常に読み取ることができます。しかし、 "Report Configuration"という名前のシートからaccountId、webPropertyId、およびprofileIdは認識されないと思います。私はエラー "応答コード:404.メッセージ:見つかりません"が表示されます。これで私を助けてくれますか?以下は、私が@ Eudardoから得たコードです:Google AppsスクリプトとGoogleアナリティクスAPI:Googleスプレッドシートの列からPropertyIDを読み取ることができません

var LOG_SHEET_NAME = 'Unsampled Report Logs'; 
var ss = SpreadsheetApp.getActive(); 
var ui = SpreadsheetApp.getUi(); 
var sheet = ss.getSheetByName('Report Configuration'); 
var startDateRange = sheet.getRange(10,5); 
var startDate = startDateRange.getValue(); 
var endDateRange = sheet.getRange(10,6); 
var endDate = endDateRange.getValue(); 
var metricsRange = sheet.getRange(10,8); 
var metrics = metricsRange.getValue(); 
var dimensionsRange = sheet.getRange(10,9); 
var dimensions = dimensionsRange.getValue(); 
var filtersRange = sheet.getRange(10,11); 
var filters = filtersRange.getValue(); 

function insertReport() { 
    var resource = { 
     'title': 'Medium Sale', 
     'start-date': startDate, 
     'end-date': endDate, 
     'metrics': metrics, 
     'dimensions': dimensions, 
     'filters': filters, 
     }; 
    var ss = SpreadsheetApp.getActive(); 
    var sheet = ss.getSheetByName('Report Configuration'); 
    var accountId = sheet.getRange(10,18).getValue(); 
    var webPropertyId = sheet.getRange(10,19).getValue(); 
    var profileId = sheet.getRange(10,20).getValue(); 

    try { 
    var request = Analytics.Management.UnsampledReports.insert(resource, accountId, webPropertyId, profileId); 

    } catch (error) { 
    ui.alert('Error Performing Unsampled Report Query', error.message, ui.ButtonSet.OK); 
    return; 
    } 

    var sheet = ss.getSheetByName(LOG_SHEET_NAME); 

    if (!sheet) { 
    sheet = ss.insertSheet(LOG_SHEET_NAME); 
    sheet.appendRow(['User', 'Account', 'Web Property', 'View', 'Title', 'Inserted Time', 'Updated Time', 'Status', 'Id', 'File']); 
    sheet.getRange(1, 1, 1, 10).setFontWeight('bold'); 
    } 
    sheet.appendRow([ 
    Session.getEffectiveUser().getEmail(), 
    request.accountId, 
    request.webPropertyId, 
    request.profileId, 
    request.title, 
    request.created, 
    request.updated, 
    request.status, 
    request.id 
    ]); 

} 

// Scans LOG_SHEET_NAME and tries to update any report that is PENDING 
function updateAllReports() { 
    var sheet = ss.getSheetByName(LOG_SHEET_NAME); 
    var lastRow = sheet.getLastRow(); 

    var dataRange = sheet.getRange(2,1, lastRow, 10); 

    var data = dataRange.getValues(); 

    for (var i=0; i<data.length; i++) { 
    // If data is PENDING let's try to update it's status. Hopefully it's complete now 
    // but it may take up to 24h to process an Unsampled Reprot 
    if (data[i][0] == Session.getEffectiveUser().getEmail() && data[i][7] == 'PENDING') { 
     try { 
     var request = Analytics.Management.UnsampledReports.get(data[i][1], data[i][2], data[i][3], data[i][8]); 
     } catch (error) { 
     ui.alert('Error Performing Unsampled Report Query', error.message, ui.ButtonSet.OK); 
     return; 
     } 

     data[i] = [ 
     Session.getEffectiveUser().getEmail(), 
     request.accountId, 
     request.webPropertyId, 
     request.profileId, 
     request.title, 
     request.created, 
     request.updated, 
     request.status, 
     request.id, 
     request.status == 'COMPLETED' ? DriveApp.getFileById(request.driveDownloadDetails.documentId).getUrl() : '' 
     ]; 


     // If data is Complete let's import it into a new sheet 
     if (request.status == 'COMPLETED') { 
     importReportFromDrive(request.title, request.driveDownloadDetails.documentId); 
     } 
    } 
    } 

    // Write only once to the spreadsheet this is faster 
    dataRange.setValues(data); 

} 

function importReportFromDrive(title, fileId) { 
    var file = DriveApp.getFileById(fileId); 
    var csvString = file.getBlob().getDataAsString(); 
    var data = Utilities.parseCsv(csvString); 

    // Find a suitable name for the new sheet 
    var i=1; 
    var sheetName = title; 
    while (ss.getSheetByName(sheetName)) { 
    sheetName = title + ' ('+ i++ +')'; 
    } 

    var sheet = ss.insertSheet(sheetName); 
    var range = sheet.getRange(1, 1, data.length, data[0].length); 
    range.setValues(data); 
} 

答えて

1

気にしないでください。私は理由を考え出した。 getRange()を誤って使用したためです。それはgetRange(行、列)であるはずですが、getRange(列、行)として参照しています。愚かな私! :)

関連する問題