[英]inserting an image in a google sheet with a custom function from sheet it self
我正在嘗試創建一個 google 電子表格,該電子表格將列出和顯示我玩的游戲中的生物。
在這個項目中,我有自定義函數,您可以像這樣從電子表格中調用:
=getAllMons("" ,"","" ,"" ,"" ,4, "beast","", "" ,"", "", "", "tail-the-last-one", "horn-imp")
具有多個不同的搜索參數。
我的問題是第一列應該包含怪物的圖像。 我認為當從工作表調用 geAllMons 時,將數組中的公式構建為字符串會起作用並呈現圖像。 但它沒有
這是我的數組中一行的示例:
var Stats = [ '=image(\"' +a.image +'\", 1)', a.id, a.name, a.class, a.stage,
a.level, a.exp, a.pendingExp, a.breedable, a.breedCount ,
a.stats.hp, a.stats.speed, a.stats.skill, a.stats.morale,
a.parts[0].name, a.parts[0].class, a.parts[0].type, a.parts[0].stage,
a.parts[1].name, a.parts[1].class, a.parts[1].type, a.parts[1].stage,
a.parts[2].name, a.parts[2].class, a.parts[2].type, a.parts[2].stage,
a.parts[3].name, a.parts[3].class, a.parts[3].type, a.parts[3].stage,
a.parts[4].name, a.parts[4].class, a.parts[4].type, a.parts[4].stage,
a.parts[5].name, a.parts[5].class, a.parts[5].type, a.parts[5].stage,
a.owner, a.sireId, a.matronId, a.birthDate, a.title
];
我很確定問題是內容仍然在活動公式中,因為當我選擇整個數據並復制粘貼為純文本時。 圖像公式得到處理,我得到圖像。 當我從 google 應用程序腳本編輯器運行我的函數時它也可以工作,但這不是一個解決方案,因為我不希望人們每次想要搜索不同的東西時都必須進入腳本編輯器,這也不太直觀。
我已經搜索過,大多數解決方案是您從腳本編輯器運行的自定義函數,並將圖像附加到新行或使用 setValue、setImage 方法。 那些不適用於表內自定義函數。
任何機構有想法嗎? 將不勝感激。
正如 Tanaike 所說,您不能使用自定義函數在單元格中設置公式。 幸運的是,有幾種方法可以作為一種變通方法,其有效性取決於您在此處所需的工作流程:
根據您的偏好,您可以使用onEdit 觸發器,該觸發器僅在編輯的單元格位於第一列和所需工作表中時才會觸發(在下面的示例中稱為Sheet1
,請進行相應更改)。 這個想法是你在函數中編寫所有參數,例如用逗號分隔,版本觸發的函數將使用split將字符串分成不同的值,並將它們寫在不同的列中。 在第一列中,對應圖像, setFormula可以並且將成功使用。 像這樣的東西:
function onEdit(e) {
var cell = e.range;
var sheet = cell.getSheet();
var row = cell.getRow();
if (cell.getColumn() == 1 && sheet.getName() == "Sheet1") {
var value = cell.getValue();
var values = value.split(",");
cell.setFormula("=image(\"" + values[0] + "\")");
for (var col = 1; col < values.length; col++) {
sheet.getRange(row, col + 1).setValue(values[col]);
}
}
}
一個需要更多努力但根據您的情況可能更合適的選項是使用側邊欄,其中包含一個form
,其中將添加來自monster
所有數據。 提交表單后,此數據將寫入電子表格中指示的行中。
下面是一個示例,其中怪物數據只有三個字段,但這對於獲得想法很有用。
首先,在電子表格打開時創建一個自定義菜單( 通過 onOpen 觸發器),它將用於顯示帶有表單的側邊欄:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Custom Menu')
.addItem('Add monster', 'showSidebar')
.addToUi();
}
當單擊選項Add monster
時,會從html
文件中生成一個側邊欄:
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('sidebar')
.setTitle('Set new monster')
.setWidth(300)
SpreadsheetApp.getUi()
.showSidebar(html);
}
這是創建側邊欄的 html 文件:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form onsubmit="handleFormSubmit(this)">
<label for="row">Choose a row to write monster data</label>
<input type="number" name="row"><br>
<label for="image">Add a monster image url</label>
<input type="text" name="image"><br>
<label for="id">Add the monster id</label>
<input type="number" name="id"><br>
<label for="name">Add the monster name</label>
<input type="text" name="name"><br>
<input type="submit" value="Submit">
</form>
</body>
<script>
function handleFormSubmit(formObject) {
google.script.run.addMonster(formObject);
}
</script>
</html>
該文件包含一個form
,其中包含要添加的字段(要編輯的行索引和要添加的怪物對應的數據)。 此外,當提交表單時,會addMonster
一個名為addMonster
的函數,該函數從表單中獲取數據作為參數 ( formObject
):
function addMonster(data) {
var row = data["row"];
var url = data["image"];
var id = data["id"];
var name = data["name"];
var sheet = SpreadsheetApp.getActive().getSheetByName("Sheet1");
sheet.getRange(row, 1).setFormula("=image(\"" + url + "\")");
sheet.getRange(row, 2).setValue(id);
sheet.getRange(row, 3).setValue(name);
}
最后一個函數從表單中獲取數據並將其寫入表單本身指示的行中。 這樣就可以成功的使用setFormula
來顯示圖片了。
請記住,這是一個非常簡化的示例,可以通過多種方式進行擴展和改進。 它的目的只是為了展示這背后的想法。
我希望這有任何幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.