[英]How can I add a single cell to a Google Spreadsheet using the Sheets API without using batching?
[英]How can I format a Google Sheets spreadsheet cell with the API?
我的应用程序生成一个数据表并在用户的 Google Drive 中创建一个新的电子表格文档。 如何为单个单元格添加格式(颜色、字体粗细、宽度等)? 我似乎找不到任何文档,更不用说如何通过google-api-ruby-client
实现这一点了。
我的大部分发现都可以追溯到声明它不受支持的 Google API 邮件列表。
但是,我发现另一个应用程序实现了我想要的结果。 “Smartsheet”将文档导出到 Google Drive 的示例:
来自 Smartsheet.com:
我的 Google Drive 中的结果表:
(2017 年 2 月) 从 2016 年 Google I/O 开始,开发人员不再需要导出到 Excel 或创建具有所需格式的新工作表,因此其他答案现已过时。 您现在可以使用Google Sheets API格式化单元格。 下面是加粗的第一行很短的Python的例子(假设该文件ID是SHEET_ID
和SHEETS
是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(请参阅其 API 快速入门示例)或Google API 客户端库支持的任何其他语言中执行相同操作。
Sheets API 提供了旧版本中不可用的功能,即让开发人员以编程方式访问 Sheet,就像您在使用用户界面一样(冻结行、单元格格式 [!]、调整行/列大小、添加数据透视表、创建图表等.) 如果您不熟悉 API,我已经创建了一些视频,其中包含更“真实”的示例:
要了解您还可以通过 REST API 或Google Apps 脚本使用 Google 表格做什么,请查看我的其他视频。 如您所知,Sheets API 主要用于上述面向文档的功能,但要执行文件级访问(例如导入/导出、复制、移动、重命名等),请改用Google Drive API 。
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();
我们已经能够通过 Apache POI 将 Smartsheet 导出为带有格式的 Excel 文件。 将导出添加到 Google 电子表格对我们来说实施起来非常简单,并且它提供了一些您无法通过 API 执行的附加功能。
抱歉回复延迟 - 刚好遇到这个问题。
另一种选择(以及最终使用的选择)是手动创建一个 Google Sheet 文件,其中所有格式都预先配置,作为模板。 然后,不要在用户的 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 是:
https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmnop/edit?usp=sharing
那么文件 id 是1234567890abcdefghijklmnop
在我的情况下,模板本身没有任何私有内容,所以我只是与配置为“可以查看”的“有链接的任何人”共享它,如下所述:
https://support.google.com/drive/answer/2494886
如果您需要将模板文件的内容保密,那么您需要找到某种方法来确保 config.google.clientId 指定的帐户可以访问它。
希望有帮助!
如果像我一样上传预先格式化的 Excel 工作表还不够,那么 Google Apps Script 看起来可能是要走的路。 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 Script(尽管我自己也在认真考虑...),但是如果您或其他一些读者弄清楚如何将 Google Apps Script 绑定到电子表格使用 google-api-ruby-client,您可能会很高兴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.