【问题标题】:Creating spreadsheets using Advanced Drive Services使用 Advanced Drive Services 创建电子表格
【发布时间】:2017-08-15 10:09:48
【问题描述】:

我正在尝试弄清楚如何使用 Google Apps 脚本中的高级驱动器服务来做一些事情。

 

1) 创建包含 x 行和列的电子表格
创建新电子表格时,我怎样才能让它只有 1 行和 6 列?现在,我使用#2 中的函数创建电子表格,然后删除行和列。但如果我可以让电子表格有一定数量的行和列,那就更好了。

 

2) 设置电子表格的标题
如何将 createFile 函数()中电子表格的标题设置为值“名称”?现在它会创建名为“untitled”的电子表格。

var file = {
  title: "",
  mimeType: MimeType.GOOGLE_SHEETS,
  parents: [{id: artistSpreadSheetsFolderId}] //I have the folder id
};

function createFile(name)
{
  var fileJson = Drive.Files.insert(file);
  var fileId = fileJson.id;
  //how would I set the title of the spreadsheet to the value 'name'?
}

 

3) 通过文件名获取文件id
如果我将名称传递给函数,我将如何使用 Advanced Drive Services 获取该电子表格的 ID?这些文件将位于一个文件夹中,因此我已经有了该文件夹的 ID。

function getFileId(name)
{
  //get file by name
  //get that files id
}

 


@田池

对于第一个,没有办法使用高级驱动服务来做到这一点?如果没有,我将如何将一组值添加到第一行?目前我有这个:var headers = [["1", "2", "3", "4,", "5", "6"]]; 然后我做sheet.getRange(range).setValues(headers);。有没有办法在电子表格的属性部分设置这些值。创建?

第二个,我在函数之外有一个 var 文件,所以多个函数可以调用它。我想在创建电子表格后(在 var fileId 之后)将其名称设置为传入的名称,例如 - .setTitle(name) 或类似的名称。所以在一个函数中我可以做 var file = Drive.Files.insert(file);然后像 var fileName = //在这里设置名称。

对于第三个,这只是一个 for 循环吗?比如 for(var i = 0; i

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    为了使用以下脚本,请启用 Drive API 和 Sheet API for Advanced Drive Services 和 Google API Console。

    参考资料:

    启用云端硬盘 API https://developers.google.com/drive/v3/web/enable-sdk

    Google 表格 API v4 https://developers.google.com/sheets/api/

    1。创建包含 x 个行和列的电子表格

    为此,您可以使用 Google Sheet API。可以通过给定行数和列数作为初始属性来创建电子表格。但是,在这种方法中,父文件夹在创建时无法设置。创建后,需要更改父文件夹。

    Sheets.Spreadsheets.create({
      "sheets": [
        {
          "properties": {
            "gridProperties": {
              "columnCount": 6,
              "rowCount": 1
            }
          }
        }
      ],
      "properties": {
        "title": "filename"
      }
    });
    

    2。设置电子表格的标题

    我可能无法理解您的问题。您想使用您设置的名称创建一个新的电子表格吗?或者你想检索创建的电子表格的名称?如果两者都没有,请随时告诉我。

    var res = Drive.Files.insert({
      "title":    "test", // Here, it gives a title of new spreadsheet.
      "mimeType": "application/vnd.google-apps.spreadsheet",
      "parents":  [{"id": "#####"}]
    });
    Logger.log(res.title) // Here, it retrieves the title of created spreadsheet.
    

    3。通过名称获取文件的id

    文件 ID 作为数组返回。假设存在同名文件。

    function getFileId(name){
      return [i.id for each (i in Drive.Files.list({q: "title='" + name + "' and trashed=false"}).items)];
    }
    

    新问题的答案 1

    A1:第一个,它使用高级驱动服务。如果要使用此 API 导入数据,如下所示。以下示例分别将1, 2, 3 导入到a1, b1, c1。在此脚本的第二次运行时,数据将添加到第一个数据的下方。

    var values = [[1, 2, 3]];
    Sheets.Spreadsheets.Values.append(
      {"values": values},
      '## Sheet ID ##',
      'a1',
      {valueInputOption: 'RAW'}
    )
    

    A2:您可以按如下方式将数据添加到 JSON。

    var file = {
      title: "",
      mimeType: MimeType.GOOGLE_SHEETS,
      parents: [{id: artistSpreadSheetsFolderId}] //I have the folder id
    };
    
    function createFile(name)
    {
      file.title = name;
      var fileJson = Drive.Files.insert(file);
      var fileId = fileJson.id;
      //how would I set the title of the spreadsheet to the value 'name'?
    }
    

    A3:

    这是理解。

    return [i.id for each (i in Drive.Files.list({q: "title='" + name + "' and trashed=false"}).items)];
    

    这与下面的脚本相同。

    var items = Drive.Files.list({q: "title='" + name + "' and trashed=false"}).items;
    var ar = [];
    for (var i=0; i<items.length; i++){
        ar.push(items[i].id);
    }
    return ar;
    

    新问题的答案 2

    A1: 创建电子表格时包含数据的方法如下。在以下脚本中,1, 2, 3 的数据被导入到a1, a2, a3。有各种参数。所以请在这里查看https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets

    Sheets.Spreadsheets.create({
      "sheets": [
        {
          "properties": {
            "gridProperties": {
              "columnCount": 6,
              "rowCount": 1
            }
          },
        "data": 
          [
            {
              "rowData": 
              [
                {
                  "values": 
                  [
                    {"userEnteredValue": {"numberValue": 1}},
                    {"userEnteredValue": {"numberValue": 2}},
                    {"userEnteredValue": {"numberValue": 3}}
                  ]
                }
              ]
            }
          ]
        }
      ],
      "properties": {
        "title": "filename"
      }
    });
    

    A2:您可以使用以下脚本移动文件夹。

    Drive.Files.update(
      {"parents": [{"id": "## Folder ID ##"}]},
      "## File ID ##"
    )
    

    【讨论】:

    • 为您的新问题添加了答案。
    • 对于 1,而不是附加值,我如何将 [[1,2,3]] 添加到 .create json 部分?我看到有一个值:[{}] 或 rowData:[{object(rowData)}],但我无法让它工作。 编辑:另外,我如何将创建的电子表格从 #1 保存到文件夹中?
    • 为您的新问题添加了答案。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多