将绘图移动到特定位置

Move a drawing to a specific location

我正在尝试编写一个脚本来将绘图(通过单元格)移动到特定位置。 我在我的 google sheet 上试过这个方法,但没有用: In Google Sheets how can I write a script to move each drawing to a specific location on the sheet?

你知道为什么吗?

我试过的代码:

const obj = {
    "10": {name: " Drawing1 ", moveTo: [1,1]}, 
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
sheet.getDrawings().forEach(d => {
 const arow = d.getContainerInfo().getAnchorRow();
 if (arow in obj) {
      d.setPosition(...obj[arow].moveTo, 0, 0);
 }
  })

我对此进行了测试,经过几次编辑后它对我有效。

工作原理 代码引用顶部的对象。它遍历每张图,并找到包含图顶部的行。然后它在对象中查找该行,如果在对象中找到该行,它将绘图移动到 'moveTo' 键中指定的坐标。

如果绘图没有在对象中列出的行,它将跳过它们。

代码有误。

const obj = {
    "10": {name: " Drawing1 ", moveTo: [1,1]}, 

应该是这样的:

  const obj = {
                "10": {name: " Drawing1 ", moveTo: [1,1]}
              };

省略了第二个结尾花括号。这可能是因为编辑了一个包含更多元素的对象,所以可能不是问题所在。

最后,我添加了一个语句来记录每个绘图的变量 'arow',这样您就可以检查该行是否在顶部的对象中。

function moveDrawing(){
  const obj = {
                "10": {name: " Drawing1 ", moveTo: [1,1]}
              };
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");

  sheet.getDrawings()
    .forEach(d => {
      const arow = d.getContainerInfo().getAnchorRow();
      if (arow in obj) {
        d.setPosition(...obj[arow].moveTo, 0, 0);
      }
    Logger.log(arow);
    }  
  )
}

我用两张图测试了,如果它们在对象中指定的行中,它就可以工作。

之前:

之后:

这是我在上面的例子中使用的代码:

function moveDrawing(){
  const obj = {
                "3": {name: " Drawing1 ", moveTo: [1,1]},
                "4": {name: " Drawing2 ", moveTo: [1,5]}
              };
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");

  sheet.getDrawings()
    .forEach(d => {
      const arow = d.getContainerInfo().getAnchorRow();
      if (arow in obj) {
        d.setPosition(...obj[arow].moveTo, 0, 0);
      }
    Logger.log(arow);
    }  
  )
}