【问题标题】:Move a drawing to a specific location将绘图移动到特定位置
【发布时间】:2021-09-05 14:32:31
【问题描述】:

我正在尝试编写一个脚本来将绘图(通过单元格)移动到特定位置。 我在我的谷歌表上尝试了这种方法,但没有奏效: 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);
 }
  })

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-api


    【解决方案1】:

    我对此进行了测试,经过几次修改,它就可以在我身上运行。

    工作原理 代码引用顶部的对象。它遍历每个绘图,并找到包含绘图顶部的行。然后它在对象中查找该行,如果在对象中找到该行,则将绘图移动到“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);
        }  
      )
    }
    

    【讨论】:

    • 亲爱的@krispinMiller,它有效!非常感谢你的慷慨!这对我来说并不明显!另一个问题是我不知道如何将对象的名称与对象联系起来——但我意识到我只需要按下鼠标右键,点击绘图右上角的三个点,然后然后单击“分配脚本”并记下出现在代码中的图像名称。再次非常感谢!祝你一切顺利!
    • 很高兴能帮上忙!
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2011-03-12
    相关资源
    最近更新 更多