以下のように、セル内にURLリンクを含むセル内の文字列「データA」をGASで「Data1」に置換します。
<置換前>
URLリンクを含んだ文字列の場合、getRichTextValuesを使うと情報を取得できると分かったのですが、
以下プログラムを実行するとURLリンクが消えてしまいます。
どのようにすればよいでしょうか。
よろしくお願いします。
GAS
1function replace1() { 2 let ss = SpreadsheetApp.getActiveSpreadsheet(); 3 let sheet = ss.getSheetByName("シート1") 4 let range = sheet.getRange(2,1,3,2).getRichTextValues(); 5 for(let cnt=0; cnt<range.length; cnt++){ 6 range[cnt][0] = range[cnt][0].getText().replace(/データA/g,"Data1"); 7 range[cnt][1] = range[cnt][1].getText().replace(/データA/g,"Data1"); 8 } 9 sheet.getRange(2,1,3,2).setValues(range); 10}
<置換後>
リンクが消える
下記変更しましたが、今度は処理対象のすべてのセルが「RichTextValue」になりました。
GAS
1function replace1() { 2 let ss = SpreadsheetApp.getActiveSpreadsheet(); 3 let sheet = ss.getSheetByName("シート1") 4 let range = sheet.getRange(2,1,3,2).getRichTextValues(); 5 for(let cnt=0; cnt<range.length; cnt++){ 6 // range[cnt][0] = range[cnt][0].getText().replace(/データA/g,"Data1"); 7 // range[cnt][1] = range[cnt][1].getText().replace(/データA/g,"Data1"); 8 9 var text = range[cnt][0].getText().replace(/データA/g,"Data1"); 10 var builder = SpreadsheetApp.newRichTextValue(); 11 builder.setText(text); 12 range[cnt][0].getRuns().forEach(run => { 13 const startOffset = run.getStartIndex(); 14 const endOffset = run.getEndIndex() ; 15 const style = run.getTextStyle(); 16 builder.setTextStyle(startOffset, endOffset, style); 17 }); 18 var newValue = builder.build(); 19 range[cnt][0] = newValue; 20 21 text = range[cnt][1].getText().replace(/データA/g,"Data1"); 22 builder = SpreadsheetApp.newRichTextValue(); 23 builder.setText(text); 24 range[cnt][1].getRuns().forEach(run => { 25 const startOffset = run.getStartIndex(); 26 const endOffset = run.getEndIndex() ; 27 const style = run.getTextStyle(); 28 builder.setTextStyle(startOffset, endOffset, style); 29 }); 30 newValue = builder.build(); 31 range[cnt][1] = newValue; 32 33 } 34 sheet.getRange(2,1,3,2).setValues(range); 35}
回答1件
あなたの回答
tips
プレビュー