温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - Convert VBA macro to Google sheets
excel google-apps-script google-sheets javascript vba

javascript - 将VBA宏转换为Google表格

发布于 2020-04-05 00:31:45

我需要一种将VBA Excel宏转换为Google表格的方法,下面的代码将数据列表传输到发票,然后将其另存为PDF。我在网上搜索了翻译,但没有找到。如果有人知道一个,或者有人可以翻译这一个。

Private Sub CommandButton1_Click()

    'define value
    Dim customer As String
    Dim invoicenumber As Long
    Dim invoicedate As Long
    Dim path As String
    Dim myfilename As String
    Dim rate As Long
    Dim r As Long

    'define our last row
    lastrow = Sheets("Dispatch1").Range("O" & Rows.Count).End(xlUp).Row

    ' start at row 5
    r = 5
    For r = 5 To 10
        If Cells(r, 1).Value = "done" Then GoTo nextrow
        invoicedate = Sheets("Dispatch1").Cells(r, 5).Value
        rate = Sheets("Dispatch1").Cells(r, 15).Value
        invoicenumber = Sheets("Dispatch1").Cells(r, 17).Value
        Amount = Sheets("Dispatch1").Cells(r, 19).Value
        Application.DisplayAlerts = False
        Sheets("invoiceblank").Select

        ' map the variables to invoice worksheet data
        ActiveSheet.Range("F4").Value = invoicedate
        ActiveSheet.Range("G4").Value = invoicenumber
        ActiveSheet.Range("F18").Value = rate
        path = "C:\Users\Dell\Desktop\feb" 
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        fileName:="C:\Users\Dell\Desktop\aa new trucking\feb\" & _
        ActiveSheet.Range("G4 ").Value & _
        Worksheets("Customers").Range("A1").Value & _
        ActiveSheet.Range("A16").Value & ".pdf", _
        OpenAfterPublish:=False

        'our label next row. Labels have a colon after their name

        nextrow:

    Next r

End Sub

查看更多

提问者
dmitriy motly
被浏览
169
user11221377 2020-01-31 22:46

您可以尝试以下代码:

function exportSingleSheetToPdf() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dispatch1 = ss.getSheetByName("Dispatch1");
  var invoiceblank = ss.getSheetByName("invoiceblank");
  var customers = ss.getSheetByName("Customers");

  var lastrow = getLastRowSpecial(ss.getRange("O:O").getValues());

  for (var r = 5;r<11;r++) {
    if (dispatch1.getRange(r, 1).getValue() == "done") {continue;}
    var invoicedate = dispatch1.getRange(r, 5).getValue();
    var rate = dispatch1.getRange(r, 15).getValue();
    var invoicenumber = dispatch1.getRange(r, 17).getValue();
    var amount = dispatch1.getRange(r, 19).getValue();

    invoiceblank.getRange("F4").setValue(invoicedate);
    invoiceblank.getRange("G4").setValue(invoicenumber);
    invoiceblank.getRange("F18").setValue(rate);

    var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
    var projectname = SpreadsheetApp.getActiveSpreadsheet();
    invoiceblank.copyTo(newSpreadsheet);

    newSpreadsheet.getSheetByName('Sheet1').activate();
    newSpreadsheet.deleteActiveSheet();

    var pdf = DriveApp.getFileById(newSpreadsheet.getId()).getAs('application/pdf').getBytes();

    var folder = DriveApp.getFolderById(""); // Fill in the id of the folder in drive you want your pdf to be saved in.
    var fileName = invoiceblank.getRange("G4").getValue() + customers.getRange("A1").getValue() + invoiceblank.getRange("A16").getValue() + ".pdf";
    var file = folder.createFile(fileName, pdf);

    DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true);
  }
}

function getLastRowSpecial(range){
  var rowNum = 0;
  var blank = false;
  for(var row = 0; row < range.length; row++){

    if(range[row][0] === "" && !blank){
      rowNum = row;
      blank = true;
    }else if(range[row][0] !== ""){
      blank = false;
    };
  };
  return rowNum;
}

由于这是Google表格,因此您的pdf将保存到您的Google驱动器。

确保填写要在其中存储文件的文件夹的文件夹ID。在代码中应在此位置指示该ID。

祝好运 :)