首页 > 解决方案 > 用于文档表格单元格宽度的 Google Apps 脚本 getWidth() 返回 null

问题描述

我想使用 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 ,并且表格占据了页边距的所有宽度。

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

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

更新

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

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

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

谷歌的这些家伙在做什么?!?!?

标签: google-apps-scriptgoogle-docsgrid-layout

解决方案


这并不完美,但它似乎让我非常接近。也许你可以多用一些,然后完成剩下的工作。我认为 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);
    }
  }
}

推荐阅读