実現したいこと
選択した範囲の文字列の半角を全角に変換したい
下記の画像はサンプルです。
前提
セル内に画像の含まれたスプレッドシートを使用しています。
今までは置換を利用して半角数字を全角数字に変換していましたが、如何せん時間かかるのでGASを利用したいと思ってます。
発生している問題・エラーメッセージ
セル内に画像が含まれている所為か、画像がCellImageに変換されてしまう。
画像は変換されずに、文字列のみ変換したいです。
下記の画像はGAS実行後になります。
該当のソースコード
function convert_digit_hankaku_to_zenkaku() { // UIを取得 const ui = SpreadsheetApp.getUi(); // 実行を確認する const response = ui.alert('選択範囲にある「半角数字」を「全角数字」に変換します。\nよろしいですか?', ui.ButtonSet.OK_CANCEL); // キャンセルが押されたらスクリプトを終了する if (response == ui.Button.CANCEL) { return; } // 現在開いているスプレッドシートオブジェクトを取得 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 開いているシートオブジェクトを取得 const sheet = ss.getActiveSheet(); // 変換用の全角数字リストを準備 const zenkaku = ['0','1','2','3','4','5','6','7','8','9']; // 変換用の半角数字リストを準備 const hankaku = ['0','1','2','3','4','5','6','7','8','9']; // 選択中のrangeオブジェクトを取得 const range = sheet.getActiveRange(); // 選択中セルの値を取得 const values = range.getValues(); // 取得したセルを1つずつループして変換していく for (let i = 0; i < values.length; i++) { // 行のループ for (let j = 0; j < values[i].length; j++) {// 列のループ // セルの文字1文字ずつ分割して配列にする。数値型だとsplit出来ないのでStringに変換してから。 let text_split = String(values[i][j]).split(''); // 置換後の文字を入れておく変数を用意 let text_converted = []; // セル内の文字を1文字ずつ変換していく for (let i = 0; i < text_split.length; i++) { // 数字が半角リストの何番目にマッチするか探し、その同じkeyの全角数字を取得 let char_converted = zenkaku[hankaku.indexOf(text_split[i], 0)]; if (char_converted == null) { // ヒットしなかった場合は変換せずにそのまま追加する text_converted.push(text_split[i]) } else { // ヒットした場合は変換後の全角数字を追加する text_converted.push(char_converted); } } // 変換後文字列が入った配列を連結する values[i][j] = text_converted.join(''); } } // セルへ書き込む range.setValues(values); }
試したこと
GAS初心者の為、このコードを文字列のみ変換出来るよう条件分岐しようかと思いましたがコードが書けず断念致しました。
要望
なぜこの不具合が起きるのか原因を教えて頂きたいです。
またGAS初心者の為、改善後のコードを書いて下さると非常に助かります。
よろしくお願いします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/08/31 02:11