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

时间:2012-12-03 23:23:23

标签: google-sheets google-api google-drive-api google-api-client google-sheets-api

我的应用程序会生成一个数据表,并在用户的Google云端硬盘中创建一个新的电子表格文档。如何为单个单元格添加格式(颜色,字体粗细,宽度等)?我似乎无法找到任何文档,更不用说我可以通过google-api-ruby-client实现这一点了。

我的大多数调查结果都追溯到Google API邮件列表,表明它不受支持 但是,我发现另一个应用程序实现了我想要的结果。将文档导出到Google云端硬盘的“Smartsheet”示例:

来自Smartsheet.com:

At Smartsheet.com

我的Google云端硬盘中的结果表:

In my Google Drive

5 个答案:

答案 0 :(得分:5)

(2017年2月) As of Google I/O 2016,开发人员现在可以使用Google Sheets API格式化单元格。这是一个简短的Python示例,用粗体表示第1行(假设文件ID为SHEET_IDSHEETS为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()

如果有帮助,我还就此主题制作了开发者视频(见下文)。顺便说一句,你可以在Ruby中做同样的事情(见its API quickstart sample)或Google APIs Client Libraries支持的任何其他语言。

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

正如您所知,Sheets API主要用于如上所述的文档定向功能,但执行文件级别访问,例如导入/导出,复制,移动,重命名等,改为使用Google Drive API

答案 1 :(得分:3)

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();

我们已经能够通过Apache POI将Smartsheet导出到Excel文件并进行格式化。将导出添加到Google电子表格对我们来说非常简单,并且它提供了一些额外的功能,超出了您通过API所做的功能。

对于延迟回复感到抱歉 - 刚发生在这个问题上。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

另一个选项(以及最终使用的选项)是手动创建一个Google Sheet文件,其中包含所有预配置的格式,作为模板。然后,不是在用户的Google云端硬盘中创建新的电子表格文档,而是复制模板,如下所示:

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之外。

例如,如果共享网址为:

https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmnop/edit?usp=sharing

然后文件ID是 1234567890abcdefghijklmnop

在我的情况下,模板本身没有任何私密内容,因此我只是与任何拥有该链接的人共享该内容。配置为&#39;可以查看&#39;,如下所述:

https://support.google.com/drive/answer/2494886

如果您需要隐藏模板文件的内容,那么您需要找到一些方法来确保config.google.clientId指定的帐户可以访问它。

希望有所帮助!

答案 4 :(得分:1)

如果像我一样上传预先格式化的Excel表单并不充分,那么Google Apps脚本看起来可能就好了。 Range类专门允许您操作至少一些您询问的格式。

https://developers.google.com/apps-script/reference/spreadsheet/range

setFontColor()和setFontWeight()都在那里,但我还不知道细胞宽度的任何东西。

重要的是,我还没有想出如何将Google Apps脚本绑定到我使用Google Drive API SDK创建的工作表(在我的情况下是Node / Javascript,在你的Ruby中)。

https://developers.google.com/apps-script/guides/bound

你的问题已经有一段时间了,所以我打赌你已经用其他方式解决了它。我也不一定建议将应用中的所有内容移植到Google Apps脚本中(尽管我自己也认真考虑过......),但是如果您或其他读者知道如何绑定Google App使用google-api-ruby-client编写电子表格脚本,您可能会很随意。