使用加载项或Google扩展程序在Google脚本中打印

时间:2018-03-15 05:06:40

标签: google-apps-script

我开始使用Google Script。

我想知道在Google表格上生成单元格事件时,是否有某种方式可以在Google脚本中打印(无论是文本还是Google工作表数据)。

任何建议都会有所帮助。 感谢。

2 个答案:

答案 0 :(得分:1)

Google Script无法使用系统功能,例如打印对话框。

答案 1 :(得分:1)

在继续进行之前,请确保您已将谷歌云支持打印机添加到谷歌帐户进行打印,因为安全原因谷歌脚本不支持打印等服务

  • 打开Goog​​le云端硬盘。

    1. 右键单击以打开Goog​​le表格。
    2. 添加一些行。
    3. 点击工具菜单,然后选择脚本编辑器选项。
    4. 从脚本编辑器中选择文件菜单,然后选择项目属性选项。
    5. 信息标签中记下项目密钥(已弃用)和 Script_id
    6. 选择资源>库。
    7. 将密钥MswhXl8fVhTFUH_Q3UOJbXvxhMjh3Sh48添加到添加图书馆框。从列表中选择最新版本并设置标识符 OAuth2
  • 打开Goog​​le云端控制台。

    1. 要打开Goog​​le Cloud Console,请点击此链接Google Cloud Console链接,在左侧导航栏中,您会找到凭据链接。
    2. 点击凭据链接> 创建凭据。将出现一个弹出窗口。从那里选择OAuth Client Id选项。
    3. 在“应用程序类型”下,选择“Web应用程序”为Application设置一些名称。 在授权脚本来源url框粘贴下面的链接。 https://apis.google.com

      在授权重定向的网址框中粘贴以下链接。 https://script.google.com/macros/d/{SCRIPT_ID}/usercallback

    4. SCRIPT_ID来自项目属性。

    5. 保存详细信息。
    6. 记下Client_id和Client_secret,以备将来使用。
  • 脚本。

在脚本窗口中粘贴下面的代码。

function showURL() {
  var cpService = getCloudPrintService();
  if (!cpService.hasAccess()) {
    console.log(cpService.getAuthorizationUrl());
  }
}

function getCloudPrintService() {
  return OAuth2.createService('print')
    .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
    .setTokenUrl('https://accounts.google.com/o/oauth2/token')
    .setClientId('CLIENT_ID’)
    .setClientSecret('CLIENT_SECRET')
    .setCallbackFunction('authCallback')
    .setPropertyStore(PropertiesService.getUserProperties())
    .setScope('https://www.googleapis.com/auth/cloudprint')
    .setParam('login_hint', Session.getActiveUser().getEmail())
    .setParam('access_type', 'offline')
    .setParam('approval_prompt', 'force');
}

function authCallback(request) {
  var isAuthorized = getCloudPrintService().handleCallback(request);
  if (isAuthorized) {
    return HtmlService.createHtmlOutput('You can now use Google Cloud Print from Apps Script.');
  } else {
    return HtmlService.createHtmlOutput('Cloud Print Error: Access Denied');
  }
}

getPrinterList 此方法将检查链接打印机列表到帐户并返回打印机ID,NAME和DESCRIPTION

function getPrinterList() {
  var response = UrlFetchApp.fetch('https://www.google.com/cloudprint/search', {
    headers: {
      Authorization: 'Bearer ' + getCloudPrintService().getAccessToken()
    },
    muteHttpExceptions: true
  }).getContentText();
  var printers = JSON.parse(response).printers;
  for (var p in printers) {
    Logger.log("%s %s %s", printers[p].id, printers[p].name, printers[p].description);
  }
}
  • 最后一步。

    1. 在脚本窗口中,选择工具栏中的选择功能,然后选择showURL功能并运行代码。
    2. 点击CMD + ENTER打开日志。从日志中复制URL并粘贴到浏览器中。
    3. 按照指示操​​作并允许打印机权限。

使用必需参数运行以下方法,将打印作业添加到云端打印机。

function printGoogleDocument(docID, printerID, docName) {
  var ticket = {
    version: "1.0",
    print: {
      color: {
        type: "STANDARD_COLOR",
        vendor_id: "Color"
      },
      duplex: {
        type: "NO_DUPLEX"
      }
    }
  };

  var payload = {
    "printerid" : printerID,
    "title"     : docName,
    "content"   : DriveApp.getFileById(docID).getBlob(),
    "contentType": "application/pdf",
    "ticket"    : JSON.stringify(ticket)
  };

  var response = UrlFetchApp.fetch('https://www.google.com/cloudprint/submit', {
    method: "POST",
    payload: payload,
    headers: {
      Authorization: 'Bearer ' + getCloudPrintService().getAccessToken()
    },
    "muteHttpExceptions": true
  });

  response = JSON.parse(response);

  if (response.success) {
    Logger.log("%s", response.message);
  } else {
    Logger.log("Error Code: %s %s", response.errorCode, response.message);
  }
}

感谢。

如果您遇到任何错误,请留下回复。