前提・実現したいこと
業務上で翻訳作業が多いため、効率化を向上させるためにGoogle Apps Scriptで、指定列のデータを正規表現式で条件と一致した文字列を一括置換えるコードを作りたいです。
今回は関数を二つ、作成して行きたいと思います。
①指定した条件で回数や数値、計算式表現を含む少数の特定のパターンを正規表現で置き換える関数
②予めに作成した用語集を使って、指定範囲(ブック名、シート名、列を指定)にて辞書のA列にある文字を順番に検索を行い、検索した際に対応するB列の文字を置き換える関数
①につきまして、翻訳の文章は数値表記、難易度や表記、色付けや改行などの計算式を含む文章が多いです。
そのため、それ以外の文章を略せば、難易度のみ異なる文章を一括に翻訳することができ、効率が捗ります。、自動的に任務名、回数、難易度を記憶し一括に別の書き方の文章に置換えたいです。
例)完成X回〇〇任務【任務難易度表記】 (翻訳する内容)
【難易度表記】○○任務をX回クリア (置換え内容)
正規表現式を使用すれば、回数などは\dで検索でき、難易度表記や計算式などは英数字か括弧などで検索できると思い、コードを作成しましたが実行しても何も反応なかったため、質問させていただきました。
シートの書式的に、最初の行は必ず言語の表記を記入する欄がございますので、もし可能であれば特定の条件指定でその列(翻訳する列)の全てのデータを取得するようにしたいです。
例)一列目が「日本語」の場合、当該の行のデータを2列目から最終列まで取得して処理を行う形
ご教授頂ければ幸いでございます。
特定の文字列を置換えるソースコード
正規表現式で取得した文字の中に、数字などの取得方法がわからず、せめては固定の文章を一括に置き換えるように書いてみましたが、コードを実行しても何も起こらなかったです。
1function myFunction() { 2var SS = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 3var range = SS.getActiveRange(); //文字変換を行うの列を選択 4const value = range.getValues()[i]; //翻訳する数値 5var lvch = ["【精良级】","【精英級】","【史詩】","【伝説】"]; //中国語の難易度表記 6var lvjp = ["「初級」","「中級」","「上級」","「伝説」"]; //日本語の難易度表記 7 const autochange_value = [] ; 8 for(var i = 1;i <= range.length; i++) 9 if (value[i]= /完成\d+次.*任务/&lvch[i]) { //正規表現式で変換する文字列を取得 10 autochange_value.push(value[i]); 11 autochange_value = autochange_value.replace(value,'任務'&lvjp&'を:10回完成する') ; 12 } 13}
###試みたこと・当該のコード
ネットで文字を置き換えるコードを検索し、実現したいコードにアレンジしてみました。
.foreachやfunction(e)などの書き方もしてみましたが、エラーがでていて、それで今のような書き方をしましたが、実行しても何も起こらなかったです。
function myFunction() { var str = ‘金曜日はカレーの日’; var rep = /金.*?は/; str = str.replace(rep, ‘毎日が’); Browser.msgBox(str); }
### 用語集のデータを取得するコード
用語集のデータを配列として取得できましたが、どう利用すればいいのかご教授頂ければ幸いです、
function getValue() { var ss = SpreadsheetApp.openById('用語集リンクID'); var sheet = ss.getSheetByName('dict'); var CH_column = 1, //対象列の指定 lastRow = sheet.getLastRow(), //最終列を取得 CH_Range = sheet.getRange(1,CH_column,lastRow,1), //範囲を取得 CH_Values = CH_Range.getValues(), //データを取得 CH_Values = [].concat.apply([],CH_Values); var JP_column = 2, JP_Range = sheet.getRange(1,JP_column,lastRow,1), //範囲を取得 JP_Values = JP_Range.getValues(), //データを取得 JP_Values = [].concat.apply([],JP_Values); Logger.log(CH_Values); Logger.log(JP_Values); return CH_Values; return JP_Values; }