2017-06-19 26 views
1

スクリプト内の電子メールの添付ファイルに問題があります。Googleスプレッドシート(​​PDF形式の電子メール添付)

コード:

//creating a new temporary spreadsheet 
var tmpSpreadSheetId = SpreadsheetApp.create("attachment").getId(); 
var tmpSpreadSheet = SpreadsheetApp.openById(tmpSpreadSheetId); 
var tmpSheet = tmpSpreadSheet.getActiveSheet(); 

//copying values from another spreadsheet with the original data 
var values = otherSpreadSheet.getValues(); 
tmpSheet.getRange(1, 1, otherSpreadSheet.getLastRow(), otherSpreadSheet.getLastColumn()).setValues(values); 

//formating some numbers in the temporary spreadsheet 
var lastRow = tmpSpreadSheet.getLastRow(); 
tmpSheet.getRange(lastRow, 1, 1, 10).setBackground('#0000ff').setFontColor('white'); 
tmpSheet.getRange(1, 1, lastRow, 10).setBorder(null, true, null, true, null, true); 
tmpSheet.getRange(1, 1, 1, 10).setBackground('#0000ff').setFontColor('white'); 
tmpSheet.getRange(2, 3, lastRow, 1).setNumberFormat("00.00%"); 
tmpSheet.getRange(2, 5, lastRow, 1).setNumberFormat("00.00%"); 
tmpSheet.getRange(2, 6, lastRow, 2).setNumberFormat("0.00"); 
tmpSheet.getRange(2, 8, lastRow, 1).setNumberFormat("00.00"); 

//logging the edited spreadsheet URL 
Logger.log(tmpSpreadSheet.getUrl()); 

//sending an email with the spreadsheet as pdf 
var file = DriveApp.getFileById(tmpSheet.getParent().getId()); 
MailApp.sendEmail('[email protected]', 'Reporting', 'bla bla bla', {attachments: [file.getAs(MimeType.PDF)]}); 

問題:一時的なスプレッドシートは正常に見える...色やフォーマットされた数字を訂正し、その上、 が、添付ファイルに、それはありません、間違ってフォーマットされた番号の単なるテーブルです色は、最初と同じようにtempSheetに挿入されたデータと同じです。

がうまくいけば、あなたは私の問題を理解し、私は問題は何ができるか、全く見当がつかない、私は2〜3時間のためにそれを修正しようとしたが、今私は助けを必要とする:)事前に

おかげで、良い週 Vincent

答えて

0

あなたのスクリプトではほとんどがあります。 SpreadsheetApp.flush()を追加するだけです。を送信する前に、書式設定を行った直後(下記のコードを参照)。 Utilities.Sleep()は@Amitの良い提案ですが、コードを更新するためにフラッシュする必要があるため、コードではうまくいかないため、残念ながらsleepはsetTimeoutのように動作しないのでコードが遅くなります)(私はそれを試みた)。

とにかくここにコードがありますが、少し編集しましたが、本質的に唯一の違いはSpreadsheetApp.flush()です。あなたはそれ以上の助けが必要な場合は、単に私が睡眠を試してみました:)

function myfunction() { 
    // otherSpreadSheet details 
    var otherSpreadSheet = SpreadsheetApp.openById("id").getSheets()[0]; 

    //creating a new temporary spreadsheet 
    var tmpSpreadSheetId = SpreadsheetApp.create("attachment"); 
    var tmpSheet = tmpSpreadSheetId.getSheets()[0]; 

    //copying values from another spreadsheet with the original data 
    var values = otherSpreadSheet.getDataRange().getValues(); 
    tmpSheet 
    .getRange(
     1, 
     1, 
     otherSpreadSheet.getLastRow(), 
     otherSpreadSheet.getLastColumn() 
    ) 
    .setValues(values); 

    //formating some numbers in the temporary spreadsheet 
    var lastRow = tmpSheet.getLastRow(); // **last row had an error in the script here 
    tmpSheet 
    .getRange(lastRow, 1, 1, 10) 
    .setBackground("#0000ff") 
    .setFontColor("white"); 
    tmpSheet 
    .getRange(1, 1, lastRow, 10) 
    .setBorder(null, true, null, true, null, true); 
    tmpSheet.getRange(1, 1, 1, 10).setBackground("#0000ff").setFontColor("white"); 
    tmpSheet.getRange(2, 3, lastRow, 1).setNumberFormat("00.00%"); 
    tmpSheet.getRange(2, 5, lastRow, 1).setNumberFormat("00.00%"); 
    tmpSheet.getRange(2, 6, lastRow, 2).setNumberFormat("0.00"); 
    tmpSheet.getRange(2, 8, lastRow, 1).setNumberFormat("00.00"); 

    // USE SpreadsheetApp.flush() to update the sheet before you send it as a PDF, 
    // this will allow you to apply the formatting and any other functions. 
    SpreadsheetApp.flush(); 

    var fileID = tmpSheet.getParent().getId(); 
    var file = DriveApp.getFileById(fileID); 
    MailApp.sendEmail("EMAIL HERE", "Reporting", "bla bla bla", { 
    attachments: [file.getAs(MimeType.PDF)] 
    }); 
    } 
+0

** SpreadsheetApp.flush()**ソリューションでした:) –

1

電子メールを送信する前にUtilities.sleep()で遅延を追加することを検討してください。また、置き換え:

var file = DriveApp.getFileById(tmpSheet.getParent().getId()); 

で:

var file = DriveApp.getFileById(tmpSpreadSheet); 
+0

私に知らせて、それが、この場合の解決策ではありませんでした –

関連する問題