使用高级云端硬盘服务创建电子表格

时间:2017-03-23 02:25:41

标签: javascript google-apps-script

我正在尝试使用Google Apps脚本中的高级驱动器服务来解决一些问题。

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

2) 设置电子表格的标题
如何将createFile函数()中的电子表格标题设置为值'name'?现在,它创建了名为“无标题”的电子表格。

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
如果我将名称传递给函数,我如何使用高级驱动器服务获取该电子表格的ID?文件将在一个文件夹中,所以我已经拥有该文件夹的id。

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

@Tanaike

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

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

对于第三个,那只是一个for循环吗?喜欢(var i = 0; i< drive.files.list.length; i ++)?

1 个答案:

答案 0 :(得分:2)

以下答案怎么样?要使用以下脚本,请为高级云端硬盘服务和Google API控制台启用Drive API和Sheet API。

参考文献:

启用Drive 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, 3a1, 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 ##"
)