将绘图移动到特定位置
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);
}
)
}
我正在尝试编写一个脚本来将绘图(通过单元格)移动到特定位置。 我在我的 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);
}
)
}