★gas★スマホから音声でスプレッドシートに書き込み
スマホからメモ代わりに音声でスプレッドシートに書き込みしておけば後から整理するのに役立ちます。
googlesheetsに音声で入力する
googlesheetsに音声で入力出来たら便利だなと思いませんか?
ということでgooglesheetsに音声入力する方法を調べたのですが…
残念ながらスプレッドシートに音声入力は出来ません
しかし、googleドキュメントでは音声入力が出来るので、googleドキュメントに音声入力したテキストをgooglesheetsに書き込みするという方法を採りたいと思います。
先ず、グーグルアプリから「ドキュメント」を開きます。
新しいドキュメントを作成する
右下の「プラス」にポインタを当てて新しいドキュメントを作成します。
ドキュメントの名称は自分で判りやすい名前を付けておきます。
ここでは「音声メモ」としました。
ドキュメントの作成はこれで終わりです。
URL欄に表示されているドキュメントIDはgooglesheetsのgas作成で必要になります。
https;//docs.google.com/document/d/ 「音声メモ」ドキュメントのIDになります /edit
「シート1」のタブ名称は「MEMO」としました。
gasを作成する
次にgooglesheetsを作成します。
ドキュメント作成と同様にスプレッドシートを選択し、右下の「プラス」にポインタを当てて新しいスプレッドシートを作成します。
名称もドキュメント同様に「音声メモ」としました。
ドキュメント同様にURLに含まれるIDがスプレッドシート「音声メモ」のIDになります。
https;//docs.google.com/spreadsheets/d/ スプレッドシート「音声メモ」ID /edit#gid=0
次に「拡張機能」から「Apps Script」を選択してスクリプトエディターを開きます。
myfunction()を削除してスプレッドシート、ドキュメント、それにシートを宣言します。
[php]
var 音声入力 = SpreadsheetApp.openById('スプレッドシートID’);
var ドキュメント = DocumentApp.openById('ドキュメントID’);
var シート= 音声入力.getSheetByName("MEMO");
[/php]
配列に入れる
googleドキュメントに音声入力したテキストデータをスプレッドシートに書き込む前に下処理をしておきます。
下処理というのは…
キーボード入力で改行(エンターキー)した場合には"\n"のタブが入っています。
しかし、音声入力で改行したい場合タブ(\n)を音声で入れることが出来ませんので音声で”改行”と入力するようにしました。
しかしこのようにすると改行するのに”\n”と”改行”2つ存在するようになるので”\n”を”改行”と変換して統一しました。
また半角スペースを削除して誤処理を防ぐようにしました。
[php]
function get_text(){
let L_row = シート.getLastRow()+1;
let Doc =[];
Doc = ドキュメント.getBody().getText();
if(Doc.length==0){
Browser.msgBox("何もありません")
return;
}
let next = 0;
let top =0;
let row = 1;
/** \nを改行,半角スペース削除 */
for(let i = 0;i<Doc.length;i++){
if(Doc[i]=="\n"){
Doc = Doc.replace("\n","改行");
}
if(Doc[i]==" "){
Doc = Doc.replace(" ","");
}
}
}
[/php]
スプレッドシートに書き込む
下処理が終わったところで最初から改行までをセルに入れていきます。
次は改行から改行まで、最後は改行から終わりまでそれぞれセルに入れていきます。
[php]
for(let i = 0;i<Doc.length+2;i++){
if(Doc[i]=="改"&& Doc[i+1]=="行"||i==Doc.length+1){
next=i;
let val = Doc.slice(top,next);
row=row+1;
シート.getRange(L_row+row,1).setValue(val);
top=i+2;
}
}
[/php]
このコードで次の文章をgooglesheetsに書き込んで見ます。
吾輩は猫である名前はまだない改行 どこで生れたかとんと見当がつかぬ 何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している改行 吾輩はここで始めて人間というものを見た
スプレッドシートでの処理
ドキュメントに音声入力した「吾輩は猫である」の一節を配列 Doc に入れ改行を整えgooglesheetに書き込みます。
実行した結果はこのようになりました。
音声で「改行」と入力したところで改行され、次の行に入力されているのが判ります。
スマホでも使えるようにする
「音声メモ」ですのでスマホで使えるようにしたいと思いますが…
PCではボタンでコードを実行させる事が出来ますがスマホでは実行させることが出来ません。
そこでonEdit関数を使って特定のセルの内容が変わったらドキュメントからgooglesheetsに書き込むようにしたいと思います。
スプレッドシートの「挿入」⇒ 「プルダウン」と進み「Select」と「Get txt」の項目を作成します。(判りやすいように色分けしました)
onEdit関数
onEdit関数はセルの表示が変わったときに実行する便利な関数です。
ですが…
セル表示が変われば実行されてしまうので音声でメモをスプレッドシートに書き込む度に実行されてしまいます。
そこで条件を付与し、特定のセル表示が変わった場合のみと限定することにします。
そのコードがこちらです。
[php]
function onEdit(){
let Selection = シート.getRange(2,3).getValue();
if(Selection == "Get txt"){
get_text();
ドキュメント.getBody().clear();
シート.getRange(2,3).setValue("Select");
}
}
[/php]
トリガーの作成
便利なonEdit関数ですがこのままでは動作しません。
そこで動作させるようにトリガーを作成します。
左のメニューから目覚まし時計マークの「トリガー」を選択し、右下の「トリガーの作成」をクリックします。
次に実行する関数を「onEdit」にします。
イベントのソースは「スプレッドシート」にします。
イベントの種類を「変更時」にして「作成」をクリックします。
音声でスプレッドシートに書き込みする まとめ
スマホから音声で記録しておきたい…
いろいろなアプリがありますが自分専用の音声メモがあれば会議のメモや出先でのメモにに便利かなぁ?と思い作成してみました。
スプレッドシートには音声入力出来ませんがドキュメントとスプレッドシートを組み合わせることで音声での入力が出来るようになりました。
またスマホから操作出来るのも便利かな?と思います。
もう一度スマホから音声入力してみます。
PCでのドキュメントの状態です。
これをPCからスプレッドシートに書き込みしてみました。プルダウンから「Get txt」を選択します。
スマホからでも同様の操作でスプレッドシートに書き込み出来ます。
また書き込みが終わったらドキュメントに音声入力したテキストは削除されます。
gasのスクリプトもまとめて上げておきます。
[php]
var 音声入力 = SpreadsheetApp.openById('スプレッドシートID’);
var ドキュメント = DocumentApp.openById('ドキュメントID’);
var シート= 音声入力.getSheetByName("MEMO");
function onEdit(){
let Selection = シート.getRange(2,3).getValue();
if(Selection == "Get txt"){
get_text();
ドキュメント.getBody().clear();
シート.getRange(2,3).setValue("Select");
}
}
function get_text(){
let L_row = シート.getLastRow()+1;
let Doc =[];
Doc = ドキュメント.getBody().getText();
if(Doc.length==0){
Browser.msgBox("何もありません")
return;
}
let next = 0;
let top = 0;
let row = 0;
/** \nを改行,半角スペース削除 */
for(let i = 0;i<Doc.length;i++){
if(Doc[i]=="\n"){
Doc = Doc.replace("\n","改行");
}
if(Doc[i]==" "){
Doc = Doc.replace(" ","");
}
}
for(let i = 0;i<Doc.length+2;i++){
if(Doc[i]=="改"&& Doc[i+1]=="行"||i==Doc.length+1){
next=i;
let val = Doc.slice(top,next);
row=row+1;
シート.getRange(L_row+row,1).setValue(val);
top=i+2;
}
}
}
[/php]