Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 如何使用API格式化Google Sheets电子表格单元格?_Google Sheets_Google Api_Google Drive Api_Google Api Client_Google Sheets Api - Fatal编程技术网

Google sheets 如何使用API格式化Google Sheets电子表格单元格?

Google sheets 如何使用API格式化Google Sheets电子表格单元格?,google-sheets,google-api,google-drive-api,google-api-client,google-sheets-api,Google Sheets,Google Api,Google Drive Api,Google Api Client,Google Sheets Api,我的应用程序生成一个数据表,并在用户的Google Drive中创建一个新的电子表格文档。如何向单个单元格添加格式(颜色、字体大小、宽度等)?我似乎找不到任何文档,更不用说如何通过 我的大多数发现都可以追溯到谷歌API邮件列表,该列表表示它不受支持。 然而,我发现另一个应用程序实现了我想要的结果。“Smartsheet”将文档导出到Google Drive的示例: 来自Smartsheet.com: 以及在我的Google Drive中生成的工作表: API仅提供对数据的访问,不公开任何添加格

我的应用程序生成一个数据表,并在用户的Google Drive中创建一个新的电子表格文档。如何向单个单元格添加格式(颜色、字体大小、宽度等)?我似乎找不到任何文档,更不用说如何通过

我的大多数发现都可以追溯到谷歌API邮件列表,该列表表示它不受支持。
然而,我发现另一个应用程序实现了我想要的结果。“Smartsheet”将文档导出到Google Drive的示例:

来自Smartsheet.com:

以及在我的Google Drive中生成的工作表:


API仅提供对数据的访问,不公开任何添加格式的方法。

Smartsheet利用Google API的功能导入Excel文件。代码大致如下:

DocsService client = new DocsService(<YOUR APP NAME>);
client.setOAuthCredentials(<OAUTH PARAMETERS>);

DocumentListEntry newEntry = new SpreadsheetEntry();
newEntry.setMediaSource(new MediaByteArraySource(<EXCEL FILE BYTE ARRAY OUTPUT STREAM>, DocumentListEntry.MediaType.XLS.getMimeType()));
newEntry.setTitle(new PlainTextConstruct(<FILE NAME>));

DocumentListEntry insertedEntry = client.insert(new URL("https://docs.google.com/feeds/default/private/full/"), newEntry);

// This is your URL to the new doc
String docUrl = insertedEntry.getDocumentLink().getHref();
DocsService client=newdocsservice();
setOAuthCredentials();
DocumentListEntry newEntry=新的电子表格条目();
newEntry.setMediaSource(新的MediaByteArraySource(,DocumentListEntry.MediaType.XLS.GetMimetType());
setTitle(新的明文构造());
DocumentListEntry insertedEntry=client.insert(新URL(“https://docs.google.com/feeds/default/private/full/新条目);
//这是指向新文档的URL
字符串docUrl=insertedEntry.getDocumentLink().getHref();
我们已经能够通过ApachePOI将Smartsheet导出到具有格式的Excel文件。将导出添加到Google电子表格对我们来说实现起来非常简单,它提供了一些额外的功能,超出了您可以通过API实现的功能


很抱歉延迟了回复-刚刚遇到了这个问题。

如果像我一样,上传预格式化的Excel工作表是不够的,那么Google Apps脚本看起来可能是一种方法。Range类特别允许您至少操作一些您所询问的格式

setFontColor()和setFontWeight()都有,但我还不知道关于单元格宽度的任何信息

重要的是,我还没有弄清楚如何将GoogleApps脚本绑定到我正在使用GoogleDriveAPIsdk(在我的例子中是Node/Javascript,在你的例子中是Ruby)创建的工作表上

你问这个问题已经有一段时间了,所以我打赌你已经用其他方法解决了。我也不一定建议将应用程序中的所有内容都移植到谷歌应用程序脚本中(尽管我自己也在认真考虑……),但如果你或其他读者知道如何使用谷歌api ruby客户端将谷歌应用程序脚本绑定到电子表格,你可能会选择另一个选项(以及最终使用的选项)是手动创建一个GoogleSheet文件,并预先配置所有格式,作为模板。然后,复制模板,而不是在用户的Google Drive中创建新的电子表格文档,如下所示:

var config = require('./config');
var google = require('googleapis');

function createSheetFromTemplate(user, templateFileId, done) {

  var oauth2Client = new google.auth.OAuth2(config.google.clientId, config.google.clientSecret);

  oauth2Client.setCredentials({
    access_token: user.google.token,
    refresh_token: user.google.refreshToken,
  });

  var drive = google.drive({
    version: 'v2',
    auth: oauth2Client
  });
  drive.files.copy({
    fileId: templateFileId,
    resource: {
      title: 'New Google Sheet',
      parents: [{
        id: 'root'
      }]
    }
  }, function(err, response) {
    if (err) done(err)

    initializeSpreadsheet(response.id, user, done);
  });
}
在该代码中,templateFileId是共享模板的文件id。您可以通过多种方式从共享模板文件中获取此fileId,但最快捷、最肮脏的方式就是在共享时将其复制并粘贴到URL中

例如,如果共享URL为:

然后文件id是1234567890abcdefghijklmnop

在我的例子中,模板本身没有任何私有内容,因此我只是将其与配置为“可以查看”的“具有链接的任何人”共享,如下所述:

如果您需要将模板文件的内容保持私有,那么您需要找到某种方法来确保config.google.clientId指定的帐户可以访问它

希望有帮助

(2017年2月),开发人员不再需要导出到Excel,也不需要创建具有所需格式的新工作表,因此其他答案现在已过时。现在可以使用设置单元格格式。下面是一个简短的Python示例,将第一行加粗(假设文件ID是
SHEET\u ID
,而
SHEETS
是API服务端点):

如果有帮助的话,我还制作了一个关于这个主题的开发者视频(见下文)。顺便说一句,您可以在Ruby(请参阅)或任何其他受支持的语言中执行相同的操作

Sheets API提供了旧版本中不可用的功能,即允许开发人员以编程方式访问工作表,就像使用用户界面一样(冻结行、单元格格式[!]、调整行/列大小、添加透视表、创建图表等)。如果您不熟悉API,我已经创建了一些视频,其中包含一些更“真实”的示例:

  • 加代码深潜
  • 加代码深潜
  • 加代码深潜

若要查看通过RESTAPI或其他API使用Google Sheets还可以做些什么,请查看我的另一个。可以看出,Sheets API主要用于上述面向文档的功能,但要执行文件级访问,如导入/导出、复制、移动、重命名等,请改用。

感谢您的回复。我知道没有记录在案的方法,但Smartsheet一定是以某种方式做到了这一点。也许是私人API?也许你不能透露,这不再是事实。有关更多详细信息,请参阅我的上述答案。
DATA = {'requests': [
    {'repeatCell': {
        'range': {'endRowIndex': 1},
        'cell':  {'userEnteredFormat': {'textFormat': {'bold': True}}},
        'fields': 'userEnteredFormat.textFormat.bold',
    }}
]}

SHEETS.spreadsheets().batchUpdate(
        spreadsheetId=SHEET_ID, body=DATA).execute()