当前位置: 首页 > 知识库问答 >
问题:

使用Google Sheets API将图像插入Google Sheets单元格

湛宜春
2023-03-14

在谷歌应用程序脚本中,您可以使用插入图像函数(https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertimageblob-column-row)将图像插入谷歌电子表格。

但我没有使用appscript。我正在使用GoogleSheetsAPI(https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets)而我似乎找不到一个方法来做到这一点。是否有可能实施?

共有3个答案

裴硕
2023-03-14

在此期间,这个谷歌应用程序脚本Web应用程序可以做到这一点(出于隐私和安全考虑,我建议您托管自己的应用程序,而不是使用这个应用程序)。

这适用于JSON或application/x-www-form-urlencoded,以及传递的URL是链接还是实际的base64编码图像URL,就像您可能从https://www.base64-image.de/.

function doGet(e) {
  return ContentService.createTextOutput("Authorization: Bearer " + ScriptApp.getOAuthToken())
}

//
// Example curl command to insert an image:
// 
// curl -L -d '{ "spreadsheetid": "1xNDWJXOekpBBV2hPseQwCRR8Qs4LcLOcSLDadVqDA0E","sheetname": "Sheet1", "imageurl": "https://www.google.com/images/srpr/logo3w.png", "column": 1, "row": 1 }' \
// -H "Authorization: Bearer <INSERT TOKEN RETURNED FROM GET HERE>" \
// -H 'Content-Type: application/json' \
// https://script.google.com/a/tillerhq.com/macros/s/AKfycbzjFgIrgCfZTvOHImuX54G90VuAgmyfz2cmaKjrsNFrTzcLpNk0/exec
//

var REQUIRED_PARAMS = [
  'spreadsheetid', // example: "1xNDWJXOekpBBV2hPseQwCRR8Qs4LcLOcSLDadVqDA0E"
  'sheetname',     // Case-sensitive; example: "Sheet1"
  'imageurl',      // Can be an url such as "https://www.google.com/images/srpr/logo3w.png"
                   // or alternately "data:image/png;base64,iVBOR...<snip>...gg=="
  'column', // 1-based (i.e. top left corner is column 1)
  'row'     // 1-based (i.e. top left corner is row 1)
];

function doPost(e) {

  var result = {
    status: "ok",
    defaultMessage: "Image inserted."
  }

  try {
    var params = (e.postData && e.postData.type == "application/x-www-form-urlencoded") ? e.parameter
    : (e.postData && e.postData.type == "application/json") ? JSON.parse(e.postData.contents)
    : undefined;


    if (!params) throw new Error('Unsupported content-type, must be either application/x-www-form-urlencoded or application/json.');

    REQUIRED_PARAMS.forEach(function(requiredParam) {
      if (!params[requiredParam]) throw new Error('Missing required parameter ' + requiredParam);
    });

    SpreadsheetApp.openById(params.spreadsheetid).getSheetByName(params.sheetname).insertImage(params.imageurl, params.column, params.row);  

  } catch(e) {

    console.error(e); 

    result.status = "error";
    result.error = e;
    result.defaultMessage = e.message;

  }  

  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON)  
}

有两件事我一直没弄明白:

在访问web应用程序的URL并接受权限后,它在Postman内部(可能是通过cookie授权的)一直工作得很好。不幸的是,我无法使用ScriptApp中返回的Oauth令牌从curl运行它。getOAuthToken(),直到我手动添加https://www.googleapis.com/auth/drive在舱单上——这对我来说还是有点让人头疼。

这是我的结果清单:

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {
  },
  "webapp": {
    "access": "ANYONE",
    "executeAs": "USER_ACCESSING"
  },
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
}

我也无法将其转换为Blob并将其传递到insertImage(),但insertImage的URL风格在使用完整的Base 64编码图像URL时效果非常好,因此这有点烦人,但在Sheets API获得该功能之前,这似乎是可行的。

脚本(源)本身与世界共享只读:

https://script.google.com/d/1JvFwemL45x3orxFiJf_Gye-JWXaFlzA_MysJsQx06LsH8M2psa9i1H99/edit?usp=sharing

它也在这里公开部署,如果你想在不部署自己的情况下测试它,请使用:

https://script.google.com/a/tillerhq.com/macros/s/AKfycbzjFgIrgCfZTvOHImuX54G90VuAgmyfz2cmaKjrsNFrTzcLpNk0/exec

  • 提姆
尉迟景福
2023-03-14

用这样的脚本设置公式:

function showImage() {
 var ss=SpreadsheetApp.getActiveSpreadsheet() 
 var formulaSheet = ss.getSheetByName("Sheet1");
 var formulaCell = formulaSheet.getRange("B5");
 formulaCell.setFormula('=IMAGE("http://finviz.com/fut_chart.ashx?t=ES&p&p=m5&s=m",4,100,200)')
}
公羊信厚
2023-03-14

V4 API不能像Apps Script那样插入图像Blob(其中图像是工作表上的覆盖层,与任何单元格都不关联)。您可以使用=IMAGE函数来解决这个问题。我们知道功能上的差距,并正在考虑增加对图像Blob的支持。

 类似资料:
  • 我是Java新手,需要在Microsoft Excel单元格中添加注释图像我的代码返回异常,有人可以帮助吗?我的Java代码 这是一个例外 线程“main”java中出现异常。lang.NoClassDefFoundError:org/apache/commons/codec/digest/DigestUtils位于org。阿帕奇。波伊。hssf。用户模型。HSSF工作手册。在应用程序中添加图片(

  • 我知道如何使用滑翔将图像插入到常规ImageView中 (

  • Word显示图像有问题。我真的不知道问题出在哪里

  • 问题内容: 我正在使用python 3.5.2,我想制作一个嵌入了png图像的饼图。我有一些我想插入切片的散装产品的图片。例如,一片草莓,另一片覆盆子。就像http://www.python- course.eu/images/pie_chart_with_raspberries.png 显示的图片一样。 我可以生成图像,甚至可以绘制图像而不是点,如此处所示Matplotlib:如何绘制图像而不是

  • 问题内容: 我开始严重依赖IPython Notebook应用程序来开发和记录算法。太棒了; 但是似乎有些应该可行的方法,但是我不知道该怎么做: 我想在我的(本地)IPython笔记本降价中插入本地图像,以帮助记录算法。我知道足够在降价中添加类似内容,但据我所知。我假设我可以将图像放在127.0.0.1:8888表示的目录(或某些子目录)中,以便能够访问它,但我不知道该目录在哪里。(我正在Mac上

  • 我有一个谷歌表,我想从我们的服务器更新它的数据。目前我正在使用谷歌工作表脚本编辑器。 但是我开始意识到还有另一种方法可以更新我的谷歌表格。那就是使用谷歌表单apihttps://developers.google.com/sheets/api/samples/writinghttps://developers.google.com/sheets/api/reference/rest/https:/