2016-04-26 10 views
0

私はスプレッドシートに請求書テンプレートを作成し、添付されたVBAコードを使用してレポートを作成しました(基本的に、特定のセル値を別のシートに表形式のレポートとして保存します)。 VBAを対応するJavaScriptに変換する際の助けが必要です。手伝ってくれますか?請求書テンプレートからのレポート

おかげ

Sub InvoiceReport() 
    Dim myFile As String, lastRow As Long 
    myFile = “C: \invoices\” & Sheets(“Sheet1”).Range(“B5”) & “_” & Sheets(“Sheet1”).Range(“F1”) & Format(Now(), “yyyy - mm - dd”) & “.pdf” 
    lastRow = Sheets(“Sheet2”).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1 

    ‘ Transfer data to sheet2 
    Sheets(“Sheet2”).Cells(lastRow, 1) = Sheets(“Sheet1”).Range(“B5”) 
    Sheets(“Sheet2”).Cells(lastRow, 2) = Sheets(“Sheet1”).Range(“F1”) 
    Sheets(“Sheet2”).Cells(lastRow, 3) = Sheets(“sheet1”).Range(“I36”) 
    Sheets(“Sheet2”).Cells(lastRow, 4) = Now 
    Sheets(“Sheet2”).Hyperlinks.Add Anchor: = Sheets(“Sheet2”).Cells(lastRow, 5), Address: = myFile, TextToDisplay: = myFile‘ Create invoice in PDF format 
    Sheets(“sheet1”).ExportAsFixedFormat Type: = xlTypePDF, Filename: = myFile 
    Application.DisplayAlerts = False 

    ‘ create invoice in XLSX format 
    ActiveWorkbook.SaveAs“ C: \invoices\” & Sheets(“Sheet1”).Range(“B5”) & “_” & Sheets(“Sheet1”).Range(“F1”) & “_” & Format(Now(), “yyyy - mm - dd”) & “.xlsx”, FileFormat: = 51‘ ActiveWorkbook.Close 
    Application.DisplayAlerts = True 

End Sub 
+0

この質問は多少幅があります。シートをPDFとして保存することは1つの課題であり、値を別のシートにコピーすることは別の方法です。私は、あなた自身でそれを理解しようとした後で、2つの異なる質問で一度にこれらの問題に取り組んでいます。スプレッドシートをPDFとしてエクスポートすることに関連する他にも多くの答えがあります。 –

+0

Thanks Douglas、より具体的で、現在使用しているコードでクエリを更新しました。これが明快さを願っています。 – user6254079

+0

もう1つ、転送のために、予想される出力とサンプルデータセットを含むスプレッドシートを共有できますか?誰でもあなたの質問に答えるのが簡単になるので、自分のデータがどのように見えるかを前提にする必要はありません。 –

答えて

0

はありがたいことに、私は前にこれを行うために持っていた、これを考え出しました。

これは、オブジェクトとして作成した地図を介して請求書情報を取得することによってデータを移動するので、簡単にループできます。面倒な部分は、シートのPDFを取得していた。

まず、Driveapp.getRootFolder()で関数をスコープしてこれを達成しました。後でoAuthトークンを取得できます。私はURLFetchAppスプレッドシートのエクスポート機能を使用してPDFブロブを取得しました。私はこのブロブを取って名前をつけ、ファイルに変換してドライブのルートフォルダに挿入します。

//Data mapping for the invoice itself 
var invoiceDetailsMap = { 
    'Buyer Name': { 
    rowIndex: 4, 
    columnIndex: 1 
    }, 
    'Invoice Number': { 
    rowIndex: 0, 
    columnIndex: 5  
    }, 
    'Total Amount': { 
    rowIndex: 35, 
    columnIndex: 7  
    }, 
    'Date & Time': { 
    rowIndex: 0, 
    columnIndex: 1  
    } 
} 

//Entry point for script 
function EntryPoint() { 
    var spreadsheet = SpreadsheetApp.getActive() 
    var sheet = spreadsheet.getSheetByName('Sheet1'); 
    var dataRange = sheet.getDataRange(); 
    var valuesRange = dataRange.getValues(); 

    var invoiceData = GetInvoiceDetails(valuesRange); 
    WriteInviceDetailsToSheet(invoiceData); 
    GetPDF(spreadsheet, invoiceData['File Name']); 
} 

//Writes the invoice details to the 2nd sheet 
function WriteInviceDetailsToSheet(invoiceData){ 
    var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet2'); 
    var dataRange = sheet.getDataRange(); 
    var valuesRange = dataRange.getValues(); 
    var columns = GetColumns(valuesRange, dataRange.getNumColumns(), 0); 

    var arrayToWrite = [[]]; 
    for(var column in columns.columns){ 
    if(typeof invoiceData[column] !== 'undefined'){ 
     arrayToWrite[0].push(invoiceData[column]); 
    } 
    } 
    sheet.insertRowAfter(dataRange.getLastRow()); 
    sheet.getRange(dataRange.getLastRow() + 1, 1, 1, arrayToWrite[0].length).setValues(arrayToWrite); 
} 

//Gets the invoice details absed on the mappings 
function GetInvoiceDetails(valuesRange) { 
    var output = {}; 
    for(var value in invoiceDetailsMap){ 
    output[value] = valuesRange[invoiceDetailsMap[value].rowIndex][invoiceDetailsMap[value].columnIndex]; 
    } 
    output['File Name'] = 'Invoice' + output['Invoice Number'] + '_' + FormatDate(output['Date & Time'], 'MM.dd.yyyy'); 
    return output; 
} 

//Gets the PDF and inserts it into drive 
function GetPDF(spreadsheet, fileName){ 
    DriveApp.getRootFolder(); //Scoping 
    var urlParameters = 'export?exportFormat=pdf&format=pdf&size=letter&portrait=true&fitw=true&source=labnol&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false&gid=0'; 
    var baseURL = spreadsheet.getUrl(); 
    baseURL = baseURL.replace(/edit$/,''); 
    var response = UrlFetchApp.fetch(baseURL + urlParameters, { 
       headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() } 
       }); 

    var pdfBlob = response.getBlob().setName(fileName + '.pdf'); 
    var file = DriveApp.createFile(pdfBlob); 
    DriveApp.addFile(file); 
} 


//Reformts a date 
function FormatDate(date, format) 
{ 
    var temp = new Date(date); 
    var output = Utilities.formatDate(temp, "PST", format); 
    return output; 
} 

//Gets a columns object for the sheet for easy indexing 
function GetColumns(valuesRange, columnCount, rowIndex) 
{ 
    var columns = { 
    columns: {}, 
    length: 0 
    } 

    Logger.log("Populating columns..."); 
    for(var i = 0; i < columnCount; i++) 
    { 
    if(valuesRange[0][i] !== ''){ 
     columns.columns[valuesRange[0][i]] = {index: i ,value: valuesRange[0][i]}; 
     columns.length++;  
    } 
    } 
    return columns; 
} 
関連する問題