【问题标题】:Google Apps Script getWidth() for document table cell width returns null用于文档表格单元格宽度的 Google Apps 脚本 getWidth() 返回 null
【发布时间】:2019-11-02 21:07:22
【问题描述】:

我想使用 Google Apps 脚本在 Google 文档中插入图像,并将其(图像)传播到页面的宽度 - 边距或将其插入表格单元格并将其传播到宽度细胞。

代码如下:

var image = DriveApp.getFileById(fileId).getBlob();
var insertPlace = body.findText(searchText).getElement();
insertPlace.asText().setText("");
var insertedImage = insertPlace.getParent().asParagraph().insertInlineImage(0, image);
var h = insertedImage.getHeight();
var w = insertedImage.getWidth();
insertedImage.setWidth(width).setHeight(width * h / w);

问题出在哪里?

宽度!

如何找到表格单元格或正文的宽度?

我试过了

var width = insertPlace.getParent().asParagraph().asTableCell().getWidth();

虽然单元格在表格的单列中,但得到了 null,并且表格占据了页边距的所有宽度。

有人知道如何获取单元格的宽度吗?

另外,如何获取页面宽度、边距等...

更新

我发现问题一定出在 Google 代码上。 实际上,与文档相比,他们对幻灯片中的表格进行了不同的处理:

https://developers.google.com/apps-script/reference/slides/table-cell https://developers.google.com/apps-script/reference/document/table-cell

在幻灯片版本中,例如,getParentColumn() 不适用于文档...任何许多类似的差异。

这些家伙在 Google 做什么?!?!?

【问题讨论】:

  • 您的第一个链接来自幻灯片,第二个来自文档,它们是不同的方法,因此没有理由 getParent() 应该在两者中。

标签: google-apps-script google-docs grid-layout


【解决方案1】:

这并不完美,但它似乎让我非常接近。也许你可以多用一些,然后完成剩下的工作。我认为 PAGE_WIDTH 和 PAGE_HEIGHT 以点为单位,但是当我查看数字时,它似乎相当大,所以我将它们用作像素。它似乎对我有用,图像在页面中居中,从左边距到右边距。我没有调整页面高度,因为我的图片看起来不错,但您可能希望这样做。

function insertImage() {
  var doc=DocumentApp.getActiveDocument();
  var body=doc.getBody();
  var atts=body.getAttributes();
  for(var att in atts) {
    Logger.log(att + ':' + atts[att]);
  }
  var folderId="Folder ID";
  var files=DriveApp.getFolderById(folderId).getFiles();
  while(files.hasNext()) {
    var file=files.next();
    if(file.getName()=="Image File Name") {
      var image=file.getBlob().getAs('image/png');//may need to change content type
      var img=body.appendImage(image);
      var h=img.getHeight();
      var w=img.getWidth();
      var mr=atts['MARGIN_RIGHT'];
      var ml=atts['MARGIN_LEFT'];
      var sw=atts['PAGE_WIDTH'];
      var sh=atts['PAGE_HEIGHT'];
      img.setHeight(sw*h/w);
      img.setWidth((sh-mr-ml)*w/h);
    }
  }
}

【讨论】:

  • 感谢 Cooper 的回答,它帮助我找到了正确的方向!实际上,getAttributes() 检索 MARGIN_LEFT、MARGIN_RIGHT、PAGE_WIDTH 和 PAGE_HEIGHT,但我无法让它为 TABLE_CELL 工作,因为它的宽度返回 null。那个null一定是个bug,所以我在这里报告了它:issuetracker.google.com/issues/143810853
  • 对了,为什么图片的宽度在sh-mr-ml旁边用w/h?
  • 而且,这里还有另一个问题。 sh-mr-ml 给出了正确的边距到边距宽度,但我必须将插入图像的宽度乘以恰好 4/3 的校正因子才能让图像从一个海岸到另一个海岸。为什么是这个 4/3?
  • 我不知道我以前从未这样做过,因为我说过这不是一个完美的解决方案。我只是认为这是您可以使用的东西并将其带到可行的解决方案中。
猜你喜欢
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多