2016-07-19 10 views
0

私は以下のカスタム関数を持っています。それは私が、私はそれはそれはGoogleシートのカスタム関数にダミーパラメータを追加

を引っ張るデータをリフレッシュするために取得することができます Non-contiguous column copy from one spreadsheet to another in google apps

が、私はそれにdummyパラメータを追加する必要があり、ここでそれを得た

のGoogleスプレッドシートに別のシートに1枚から列を移動します

私は単純にこれをやってみました:function copyColumns(sourceRange,start,sheetKey, dummy)(他のカスタム関数のために働いている)

をしかし、私はエラーを取得しておいてください。

Problem getting sheet1 - Exception: You do not have permission to perform that action. (line 31). 

です:throw "Problem getting sheet" + sheetKey + " - " + err;

私はいくつかのVBAを知っているが、私は、Googleの脚本に新しい試みているのですが、この

おかげ

/* =copyColumns("MyDataSheet!C,A,W",8) */ 

function copyColumns(sourceRange,start,sheetKey) { 
    // Initialize optional parameter 
    if(!sheetKey && typeof start!== "number") { 
    sheetKey = start; 
    start = 1; 
    } else { 
    start = start || 1; 
    } 
    // Check SourceRange Input 
    var inputRe = /^((.*?!)(?=[a-z],?|[a-i][a-z]))?[a-i]?[a-z](,[a-i]?[a-z])*$/i; 
    if(!inputRe.test(sourceRange)) 
    throw "Invalid SourceRange: " + sourceRange; 

    // Check Start Row 
    if(typeof start !== "number") 
    throw "Starting row must be a number! Got: " + start; 
    if(start % 1 !== 0) 
    throw "Starting row must be an integer! Got: " + start; 
    if(start < 1) 
    throw "Starting row can't be less than 1! Got: " + start; 

    // Get the Source Sheet 
    try { 
    var ss = sheetKey 
      ? SpreadsheetApp.openById(sheetKey) 
      : SpreadsheetApp.getActiveSpreadsheet(); 
    } catch(err) { 
    throw "Problem getting sheet" + sheetKey + " - " + err; 
    } 
    var sheetName = sourceRange.match(/^.*?(?=!)/); 
    var sheet = sheetName 
      ? ss.getSheetByName(sheetName[0]) 
      : ss.getActiveSheet(); 

    // Check that everything is still valid 
    if(!sheet) 
    throw "Could not find sheet with name: " + sheetName; 
    if(start > sheet.getLastRow()) 
    throw "No data beyond row: " + start + " Last row: " + sheet.getLastRow(); 

    // Get the values 
    var lastCol = sheet.getLastColumn(); 
    var lastRow = sheet.getLastRow()-start+1; 
    var values = sheet.getRange(start,1,lastRow,lastCol).getValues(); 

    // Get the desired columns from the string 
    var desiredColMatch = sourceRange.match(/([a-i]?[a-z](,[a-i]?[a-z])*)$/i); 
    var desiredColumns = desiredColMatch[0].toUpperCase().split(","); 

    // In case the column we are trying to grab doesn't exist in the sheet 
    var lastColId = sheet.getMaxColumns() - 1; // Array is 0 indexed, Sheet is 1 

    // Get the numerical values of the passed in Column Ids 
    var columns = desiredColumns.map(function(colId){ 
    var num = colId.length - 1; // 0 or 1 
    var colNum = colId.charCodeAt(num)-65+num*26*(colId.charCodeAt(0)-64); 
    if(colNum > lastColId) 
     throw "Invalid Column: " + colId + " - Column not in: " + sheetName; 
    return colNum; 
    }); 

    //Map the values to a new array of just the columns we want 
    return values.map(function(row){ 
    return columns.map(function(col){ 
     return row[col] 
    }) 
    }); 
} 
+0

'No'これは' 'edit'トリガーに – xyz

答えて

1

エラーISNを行う方法を働いていませんダミーパラメータの使用に関連しています。このエラーは、カスタム関数が、承認を必要とするサービスを呼び出すことができないために発生します。具体的には、Spreadsheetサービス(SpreadsheetApp)では、承認を実行する必要があります。 https://developers.google.com/apps-script/guides/sheets/functions#using_apps_script_services

Unlike most other types of Apps Scripts, custom functions never ask users to authorize access to personal data. Consequently, they can only call services that do not have access to personal data, ...

+0

おかげで、私は混乱することがGoogleのスクリプトを見つけていますについてnot'あるから

xyz

関連する問題