質問: 以下のように1行内のテキストに画像を挿入するスクリプトを書きたいのですが、 調べてみても良い方法が見つからないため、知見のある方ご教授いただけると有難いです。 ――――――― 今日は晴れです。 →今日は晴れ<画像>です。 ――――――― insertimage()を使用してみましたが、rowしか指定できず上手く行きませんでした。 特定のテキストが何文字目にあるかを取得して、挿入...をしようにも、 どう挿入して良いのかわからない状況です。 よろしくお願いいたします。
回答: Paragraph を取得して、InlineImage を子要素として追加してください。 既存の Text オブジェクトの中に挿入したい場合は、Text を分割して間に挿入する。 1. Body を取得 2. Paragraph を取得 3. (Paragraphの)Child(Text) を取得 4. 3のChildのテキストを「晴れ」以前のテキストに変更 5. 3のChildの次に画像(InlineImage)を挿入 6. 5で追加したChildの次に「晴れ」以降のテキストを挿入 でうまくいきそうです。 表の内部のテキストとかどうなのかは検証してません。 ``` const doc = DocumentApp.getActiveDocument(); const image = DriveApp.getFilesByName("sunny.png").next().getAs("image/png"); const body = doc.getBody(); body.getParagraphs().forEach(paragraph => { for (let i = paragraph.getNumChildren() - 1; 0 <= i; i--) { const child = paragraph.getChild(i); if (child.getType() === DocumentApp.ElementType.TEXT) { const text = child.getText(); const index = text.indexOf("晴れ"); if (index !== -1) { const prefix = text.substring(0, index + 2); const suffix = text.substring(index + 2); let childIndex = paragraph.getChildIndex(child); child.setText(prefix); paragraph.insertInlineImage(++childIndex, image); if (suffix) paragraph.insertText(++childIndex, suffix); } } } }); ```