从绑定到Google电子表格的脚本创建Google文档

时间:2015-08-08 14:36:56

标签: google-apps-script

我正在尝试根据存储在Google电子表格中的数据创建文档。我在绑定脚本(电子表格)中创建了一个函数,当触发时,应该获取适当的数据并将其放入新文档中。但是,当我尝试它时,我收到权限错误。

您可以从绑定到电子表格的脚本创建Google文档(在您的Google驱动器中)吗?如果是这样,怎么样?

以下是复制行为的一些步骤:

来自基本的Google表格:

<div class="diver-wrap">
    <img src="http://www.upslike.net/imgdb/facebook-4846a5.png" alt=""/>
<a href="https://www.google.com" class="diver"></a>
</div>

我使用脚本编辑器创建了以下函数:

 |     A      |     B     |   C   |    D     |
1| First Name | Last Name | Ready | Function |
2| John       | Doe       |       |          |
3| Jane       | Doe       |       |          |

D2有以下电话:

function createDocument(ready, row) {
  if(ready) {
    var data = Utilities.formatString("Hello %s %s", row[0][0], row[0][1]);
    var doc = DocumentApp.create("Testing");
    var body = doc.getBody();
    body.appendParagraph(data);
    return "Success"
  }
}

但是当我在C2中输入“TRUE”(触发创建文档)时,我收到以下错误:

 =createDocument(C2, A2:B2)

2 个答案:

答案 0 :(得分:1)

您可以通过在脚本中使用触发器来解决此问题。

您可以使用onOpen(menu)或onEdit,它们各有优势。您也可以同时使用:)

onEdit:一行立即执行操作。 (一次一行)

onOpen:根据请求通过菜单对多行进行操作。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Your Menu")
    .addItem("Process names", "spreadsheetToDoc")
    .addToUi();
}

function spreadsheetToDoc() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var values = range.getValues();
  var reg = /^true$/i;
  for(var i = 0; i < values.length; i++) {
    if(reg.test(values[i][2])) {
      createDocument(values[i]);
      range.getCell(i+1,4).setValue("Success");
      range.getCell(i+1,3).setValue("");
    }
  }
}

function createDocument(row) {
    var data = Utilities.formatString("Hello %s %s", row[0], row[1]);
    var doc = DocumentApp.create("Testing");
    var body = doc.getBody();
    body.appendParagraph(data);
}

onEdit触发器检查活动行中列C的值是否已更改。

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  var reg = /^true$/i;
  var i = sheet.getActiveCell().getRow() - 1;

  if(reg.test(values[i][2])) {
    createDocument(values[i]);
    range.getCell(i+1,3).setValue("");
    range.getCell(i+1,4).setValue("Success");
  }
}

function createDocument(row) {
    var data = Utilities.formatString("Hello %s %s", row[0], row[1]);
    var doc = DocumentApp.create("Testing");
    var body = doc.getBody();
    body.appendParagraph(data);
}

您必须手动添加触发器(通过菜单转到项目触发器)。

祝你好运!

答案 1 :(得分:0)

您创建的自定义函数只会向它们所在的单元格返回一个值,如果它们返回一个数组,则只返回相邻的单元格。

要执行脚本,您需要使用其他方法来触发它,例如自定义菜单或onEdit触发器。