ゲームデータを管理するのに便利なG2U。
シート数が増えてくるとUnity側での読み込みに時間がかかるようになる。
G2Uはファイル毎の非表示設定はできるのに、シート毎の非表示設定ができない。
以下を実施すると少しだけ使いやすくなる。
スプレッドシートを二つ用意する
・全てのデータを管理するスプレッドシート(例:GameDB)
・Unity側で実際に読み込むスプレッドシート(例:GameDBlite)
スクリプトを作成する
・GameDBliteのsheetIDをコピーしておく
・GameDB側で以下のスクリプトを作成する
・スクリプト内のPaste_Destination_SheetID_Hereのところに、GameDBliteのsheetIDを記入する(1箇所だけ)
g2u.gs
//ここにコピー先のsheetIDを入力
var sheetID = 'Paste_Destination_SheetID_Here';
function onOpen(){
//メニューの配列
var myMenu=[
{name: "別のワークブックにコピー", functionName: "copySheetTo"},
{name: "別のワークブックにコピー(クリア)", functionName: "copySheetToWithClear"},
];
//メニューを追加
SpreadsheetApp.getActiveSpreadsheet().addMenu("G2U",myMenu);
}
function copySheetTo(){
//現在のアクティブなシートを取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//sheetIDで指定したのスプレッドシート(コピー先)を取得する
var destination = SpreadsheetApp.openById(sheetID);
//コピー先に同名のシートがあるか確認する
var destSheet = destination.getSheetByName(sheet.getName());
//同名のシートがある場合
if(destSheet != null){
//現在のシートをコピー先に一旦コピーする(コピーすると余計な文字列がつく)
var newSheet = sheet.copyTo(destination);
//元からあるシートを削除して
destination.deleteSheet(destSheet);
//さっきコピーしたシートを元の名前に戻す
newSheet.setName(sheet.getName());
//トースト表示
SpreadsheetApp.getActiveSpreadsheet().toast('上書きしました : ' + destination.getName() );
}
//同名のシートがない場合
else{
//現在のシートをコピー先にコピー、名前を変更する(コピーすると余計な文字列がつく)
sheet.copyTo(destination).setName(sheet.getName());
//トースト表示
SpreadsheetApp.getActiveSpreadsheet().toast('コピーしました : ' + destination.getName() );
}
}
function copySheetToWithClear(){
//まずコピー
copySheetTo();
//sheetIDで指定したのスプレッドシート(コピー先)を取得する
var destination = SpreadsheetApp.openById(sheetID);
//コピー先のシート数を取得
var cnt = destination.getNumSheets();
//(シート数-1)回、1番目のシートを削除する
for(var i = 0; i < cnt - 1; i++){
var sh = destination.getSheets()[0];
destination.deleteSheet(sh);
}
}
スクリプトを実行する
GameDBのメニュー内にG2Uが追加される
別のワークブックにコピー
現在アクティブになっているシートがGameDBliteにコピーされる。
GameDBliteにすでに同名のシートがある場合は上書きされる。
なければ新規作成される。
別のワークブックにコピー(クリア)
GameDBliteにコピーされたシート以外をすべて削除できる。
GameDBliteが膨らんでしまった時に使う。
Unity側でやること
GameDBliteのみを表示する。
(GameDBは目玉アイコンを押して非表示にしておく)
スプレッドシート側でやること
GameDBのみを編集し、GameDBliteは開かない。
コピー作業は全てスクリプト経由にする。
こうすることで、間違ってGameDBliteを編集してしまうことがなくなるのでおすすめ。