2017-09-06 3 views
1

私たちのウェブサイトは、イベントロスタとして使用するCSVファイルを吐き出してしまいますが、データが多すぎます。エクスポートに含まれている内容を変更することは現実的ではないため、管理者は&形式を編集して印刷する必要があります。繰り返しと時間がかかるので、Google Apps Scriptを学ぶのに最適な時期だと思いました。シートアドオンをデプロイする際のトラブル

スタックオーバーフローでここで共有されている素晴らしい知識のおかげで、私のような合計noobは、私が必要とするスクリプトを一緒にcobbleすることができます!ただ、他の回答からスニペットを使用することによって、私は自動化することができた:

  • 不要&空の列
  • は、姓列
  • によって
  • ソートが印刷可能を生成&自動サイズ変更列を名前変更、削除同じDriveディレクトリに保存されるPDF。

しかし、今では私の同僚がそれを使用できるようにアドオンとしてスクリプトをテストして展開するのに問題があります。 "addonとしてテスト"を実行するとシートが開きますが、何も起こりません。私はインストールの設定のためのすべての変数を試してみて、同じ問題を抱えている他の人を検索しましたが、何かを見つけることができないので、問題は私のエンドスクリプトまたはユーザエラーのどこかにあると思います。

正しくテストすると、ドメインにアドオンを正しく配備し、すべてのアクセス許可などの設定を正しく取得する方法が完全にはわかりません。私は読んだことがあり、今はこれまで以上に混乱しています。したがって、2つの質問:

  • 私のテストには何が問題なのですか?
  • 正常にテストされたら、私たちのドメインのすべてのアプリユーザーにスクリプトを利用させる最も簡単な方法は何ですか?

TIA!

function expCalc() { 
 
    DeleteColumns(); 
 
    RemoveEmptyColumns(); 
 
    RenameColumns(); 
 
    ResizeColumns(); 
 
    Sort(); 
 
    SavePDF(); 
 
} 
 

 
//delete unwanted columns 
 
function DeleteColumns() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var sheet = ss.getActiveSheet(); 
 
    var dataRange = sheet.getRange("A1:AH200"); 
 
    var data = sheet.getRange("A1:AH200"); 
 
    var values = data.getValues(); 
 
    var numRows = values.length; 
 
    var numCols = values[0].length; 
 
    for (var col = numCols - 1; col > 0; col--) { 
 
    for (var row = 0; row < numRows; row++) { 
 
     switch (values[row][col]) { 
 
     case "Group": 
 
     case "ID": 
 
     case "Reg ID": 
 
     case "Reg Date": 
 
     case "Type of Payment": 
 
     case "Transaction ID": 
 
     case "Coupon Code": 
 
     case "# Attendees": 
 
     case "Date Paid": 
 
     case "Price Option": 
 
     case "Event Date": 
 
     case "Event Time": 
 
     case "Website Check-in": 
 
     case "Tickets Scanned": 
 
     case "Check-in Date": 
 
     case "Seat Tag": 
 
     case "BLS Add-on items (received at class):": 
 
     case "Company Name": 
 
     case "Address": 
 
     case "Address 2": 
 
     case "City": 
 
     case "State": 
 
     case "Zip": 
 

 
      sheet.deleteColumn(col + 1); // delete column in sheet (1-based) 
 
      continue; // continue with next column 
 
      break; // can't get here, but good practice 
 
     } 
 
    } 
 
    } 
 
} 
 

 
//Remove Empty Columns 
 
function RemoveEmptyColumns() { 
 
    var sh = SpreadsheetApp.getActiveSheet(); 
 
    var maxColumns = sh.getMaxColumns(); 
 
    var lastColumn = sh.getLastColumn(); 
 
    sh.deleteColumns(lastColumn + 1, maxColumns - lastColumn); 
 
} 
 

 
//Rename Columns 
 
function RenameColumns() { 
 
    SpreadsheetApp.getActiveSheet().getRange('A1').setValue('Type'); 
 
    SpreadsheetApp.getActiveSheet().getRange('B1').setValue('Paid'); 
 
    SpreadsheetApp.getActiveSheet().getRange('C1').setValue('Price'); 
 
    SpreadsheetApp.getActiveSheet().getRange('D1').setValue('Amt'); 
 
    SpreadsheetApp.getActiveSheet().getRange('E1').setValue('Class'); 
 
    SpreadsheetApp.getActiveSheet().getRange('F1').setValue('First Name'); 
 
    SpreadsheetApp.getActiveSheet().getRange('G1').setValue('Last Name'); 
 
    SpreadsheetApp.getActiveSheet().getRange('H1').setValue('Email'); 
 
    SpreadsheetApp.getActiveSheet().getRange('I1').setValue('Phone'); 
 
} 
 

 
//Auto-Resize Columns 
 
function ResizeColumns() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var sheet = ss.getSheets()[0]; 
 

 
    sheet.autoResizeColumn(1); 
 
    sheet.autoResizeColumn(2); 
 
    sheet.autoResizeColumn(3); 
 
    sheet.autoResizeColumn(4); 
 
    sheet.autoResizeColumn(5); 
 
    sheet.autoResizeColumn(6); 
 
    sheet.autoResizeColumn(7); 
 
    sheet.autoResizeColumn(8); 
 
    sheet.autoResizeColumn(9); 
 
} 
 

 
//Sort by last name 
 
function Sort() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var sheet = ss.getSheets()[0]; 
 
    sheet.sort(7); 
 
} 
 

 
//Save PDF 
 
function SavePDF(optSSId, optSheetId) { 
 

 
    // If a sheet ID was provided, open that sheet, otherwise assume script is 
 
    // sheet-bound, and open the active spreadsheet. 
 
    var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet(); 
 

 
    // Get URL of spreadsheet, and remove the trailing 'edit' 
 
    var url = ss.getUrl().replace(/edit$/, ''); 
 

 
    // Get folder containing spreadsheet, for later export 
 
    var parents = DriveApp.getFileById(ss.getId()).getParents(); 
 
    if (parents.hasNext()) { 
 
    var folder = parents.next(); 
 
    } else { 
 
    folder = DriveApp.getRootFolder(); 
 
    } 
 

 
    // Get array of all sheets in spreadsheet 
 
    var sheets = ss.getSheets(); 
 

 
    // Loop through all sheets, generating PDF files. 
 
    for (var i = 0; i < sheets.length; i++) { 
 
    var sheet = sheets[i]; 
 

 
    // If provided a optSheetId, only save it. 
 
    if (optSheetId && optSheetId !== sheet.getSheetId()) continue; 
 

 
    //additional parameters for exporting the sheet as a pdf 
 
    var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf 
 
     + 
 
     '&gid=' + sheet.getSheetId() //the sheet's Id 
 
     // following parameters are optional... 
 
     + 
 
     '&size=letter' // paper size 
 
     + 
 
     '&portrait=false' // orientation, false for landscape 
 
     + 
 
     '&fitw=true' // fit to width, false for actual size 
 
     + 
 
     '&sheetnames=false&printtitle=false&pagenumbers=false' // hide optional headers and footers 
 
     + 
 
     '&gridlines=true' // hide/show gridlines 
 
     + 
 
     '&fzr=false'; // do not repeat row headers (frozen rows) on each page 
 

 
    var options = { 
 
     headers: { 
 
     'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() 
 
     } 
 
    } 
 

 
    var response = UrlFetchApp.fetch(url + url_ext, options); 
 

 
    var blob = response.getBlob().setName(ss.getName() + ' - ' + sheet.getName() + '.pdf'); 
 

 
    folder.createFile(blob); 
 
    } 
 
} 
 

 
/** 
 
* Dummy function for API authorization only. 
 
* From: https://stackoverflow.com/a/37172203/1677912 
 
*/ 
 
function forAuth_() { 
 
    DriveApp.getFileById("Just for authorization"); // https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579#c36 
 
}

+0

をここでは例のシートは、フィールドを表示するのですがCSVに含ま:https://docs.google.com/spreadsheets/ d/1E3WI5Bdj88aligvasN1P5eLjifPAQ_-ocvHUhCZVd0Y/edit?usp = sharing そして、スクリプトを手動で実行したときに「グループ」列が削除されていないことに気付きました。明らかなことがあれば教えてください! –

答えて

1

アドオンのための偉大な使用:ここではスクリプトがあります。アドオンとして動作させるには、ユーザーがコードと対話できるようにonOpen()トリガーを作成する必要があります。

ここonOpen()のドキュメントを参照してください:https://developers.google.com/apps-script/guides/triggers/#onopen

は、ここで例を参照してください:https://developers.google.com/apps-script/add-ons/#user_interfaces

+1

ありがとうジョーダン、それは私が行方不明だった!確かめます。 –

+0

問題ありません。うれしかったよ! –

+0

[OK]を、私は物事をきれいにしてきたし、きれいに働く... 1つの例外:SavePDF関数は、 'fitw'パラメータにかかわらず、列の幅をリセットするようです。私は1ページのPDFで終わりますが、すべての列が等幅で、セルの内容がほとんど切り詰められます。 PDF上で自動サイズ変更機能を使用する方法はありますか?再度、感謝します! –

関連する問題