■Unity開発メモ用のWiki◎現在扱っていること・Unity全般・MMDからUnityへの変換してインポート・MMDの仕様把握・BlenderでMMDモデルのカスタム

目次


スプレッドシート・GAS・独自関数

  • GAS(Google Apps Script)
    • Google Apps Scriptとは、Googleによって開発されたスクリプトプラットフォーム。主にGoogleのサービスを自動化するスクリプト言語
    • JavaScriptと違いGASはサーバーサイドで実行されるため、JavaScriptが持つWinodwオブジェクトなどの関数は実行できない
  • 今までは「ツール→スクリプトエディタ」だったが「拡張機能→Apps Script」に位置が変わっている

カスタム関数を作る01

Container-Bound Scripts(バンドル型スクリプト)
  • バンドル型スクリプトは、G Suiteアプリ(スプレッドシート、ドキュメント、スライド、フォーム等)にくっついて保存されるタイプのスクリプト
  • Googleドライブ上ではくっついている元のファイルのみが表示され、ドライブの検索機能ではスクリプトを見つけることは出来ない
  • バンドル型スクリプトの特徴として、他のタイプでは使うことの出来ないトリガーやコードを利用することが出来る
バンドル型のみ利用できるトリガー

スプレッドシート
・起動時 − スプレッドシートを開いた時にプログラムが起動します。
・編集時 − スプレッドシートの編集時にプログラムが起動します。
・値の変更時 − セルの値を変更時にプログラムが起動します。
・フォーム送信時 − フォームを送信時にプログラムが起動します。

ドキュメント
・起動時 − ドキュメントを開いた時にプログラムが起動します。

フォーム
・起動時 − フォームを開いた時にプログラムが起動します。
・フォーム送信時 − フォームを送信時にプログラムを起動します。

カレンダー
・予定更新時 − カレンダーの予定を更新時にプログラムを起動します。
・これらのトリガーはバンドル型特有のトリガーになります。

バンドル型のみで利用できるコード
・ダイアログを表示する
・サイドバーを表示する
・カスタムメニューを表示する
・カスタム関数を作成する
GAS・カスタム関数作成時のエラーチェックポイント
  • スクリプトはバンドル型として作っているか?
  • "return"を記述しているか?
    • 「不明な関数」としてエラーになる
  • スクリプトを保存したか?

取得したデータをシフトJISからUNICODEへ変換する

参考:「スプレッドシートによるスクレイピング」 で、取得したデータをShift_JISからUNICODEに変換する方法
  • スプレッドシートで「IMPORTXML関数」を使った時、対象のサイトがシフトJISだと文字化けするので、独自関数でユニコードにする
    • Unicode:文字→コードポイントしてくれる表みたいなもの
    • UTF-8:コードポイント→符号してくれる方式の1つ
  • 「拡張機能」→「Apps Script」からスクリプトエディタを開く
  • リンク先の「SHIFTJIS2UNICODE.gs」を丸々コピペ入れ替えする
  • スプレッドシートから「SHIFTJIS2UNICODE」関数を呼ぶ
  • 書式
    • =SHIFTJIS2UNICODE(IMPORTXML(URL , XPathクエリ) )
小さいカタカナの「ュ」が「?」として表示される問題と対策
  • SUBSTITUTE関数を利用する
  • =SUBSTITUTE(SHIFTJIS2UNICODE(IMPORTXML(URL , XPathクエリ) ),"?","ュ")
    • しかし元々「?」の場合も置換してしまうため注意が必要

GASのライブライ化

  • ライブラリを追加・削除した時に「無効なマニフェスト ファイル「appsscript.json」」とエラーがでる
  • 設定から「appsscript.json」マニフェストファイルをエディタに表示するをチェック
  • エディタ欄に「appsscript.json」が追加されるので、上手く消えていないライブラリを手動で消す?


GASの自作ライブラリの作り方

参考:【Google Apps Script】ライブラリの作り方と使い方
  • GASのスクリプトで以下のログに文字列を出力するシンプルな関数を作る
function myFunction() {
    Test_lib.testAlert();
    return;
}
  • 「設定(歯車アイコン)」→「ID」からスクリプトのIDをコピーする
  • 「エディタ(<>アイコン)」→「ライブラリの+アイコン」→ライブラリの追加で先程コピーしたスクリプトIDを貼り付ける
  • IDにライブラリの名前をつける
    • プロジェクト名がライブラリ名になる

  • 「ライブラリのID.自作関数()」でライブラリのスクリプトを実行できる


XML関連のメモ

  • HTML→XML→WevM?
  • 「HTML+CSS」≒「XML+XSL(スタイルシート)」?
  • XMLの練習用にちょうどいいデータは無いか?
  • やりたい事→XMLの指定した要素を表計算方式で表示したい
    • いい感じのフリーソフトはない?

◎CSV形式
  • CSV形式
    • コンマ(”,”)で区切り

◎XML形式
  • XML は、タグ(要素)でデータ(コンテント)を囲み、さらにデータを入れ子構造にできる
  • 文字コードも1行目に宣言するので処理系による文字化けのリスクはテキストの処理に比べると格段に減った

◎JSON(ジェーソン)とは?
  • JSON はデータをタグではなく JavaScript のオブジェクトの形式で記述したもの
  • このデータは辞書型と呼ばれる、一対一対応のような記述方式をとっている
  • JSON は JavaScript のオブジェクトで構成されているため、そのまま JavaScript で記述したプログラムで扱うことができる

・XMLの整形とは?
・XMLパーサとは?
・DOMツリーとは?

Xパスとは?

  • XPathとは?
    • XML文書をクエリ(処理要求)して要素を取り出す仕組み。 XML文書を検索して結果を返す
    • XMLツリー上の位置を特定するために制定した記述言語
  • XPathはXMLPathLanguageの略称
  • XPathは「パスのような」構文を使用し、XMLドキュメント内のノードを識別およびナビゲートする
  • XPathは、パス式を使用して、XMLドキュメント内のノードまたはノードセットを選択する
  • これらのパス式は、従来のコンピューターファイルシステムで使用するパス式と非常によく似ている

◎XPathの用語
  • 参考:XML文書内の位置を正確に指し示すXPath
  • XPathには、要素、属性、テキスト、名前空間、処理命令、コメント、およびドキュメントノードの7種類のノードがある
    • ルートノード:最上位ノード
    • 要素ノード:XMLの要素を表すノード
    • 属性ノード:要素内で指定された属性を表すノード
    • テキストノード:開始タグと終了タグで挟まれた文字列データ
    • 名前空間ノード:名前空間を表すノード
    • 処理命令ノード:処理命令を表すノード
    • コメントノード:コメントを表すノード
  • XMLドキュメントはノードのツリーとして扱われえる。ツリーの最上位の要素はルート要素と呼ばれる。


  • ルートノードはノード位置を特定するための起点となる
  • 属性ノードは要素に従属しているがその要素の子ではない
  • テキストノードがさらに子ノードを持つことはない
  • XML宣言はノードとならない

スプレッドシートでXMLを読み込む:IMPORTXML

  • 公式ドキュメント
  • 概要
    • XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類の構造化データからデータをインポートする
  • 使用例
  • 構文
    • IMPORTXML(URL, XPath クエリ)
    • URL - 検証するページの URL です。プロトコル(http:// など)も含めます。
    • URL の値は二重引用符で囲むか、適切なテキストを含むセルへの参照にする必要があります。
    • XPath クエリ - 構造化データで実行する XPath クエリです。

IMPORTHTML関数とは?

公式ドキュメント
参考:【Googleスプレッドシート | IMPORTHTML関数】 WEBページのデータを抜き出す
  • GoogleスプレッドシートでHTML ページ内の表やリストからデータをインポートします。

◎書式
IMPORTHTML (URL, クエリ, 指数)
  • URL
    • 検証するページの URL です。プロトコル(http:// など)も含めます。
    • URL の値は二重引用符で囲むか、適切なテキストを含むセルへの参照にする必要があります。
  • クエリ
    • 目的のデータを含むアイテムの種類を "list"(リスト)か "table"(表)で指定します。
  • 指数
    • 対象の表またはリストについて、HTML ソース内で定義されている番号で 1 から順に指定します。

◎使用例
  • 以下の例は
    • URL:ウィキペディアの「インドの人口統計」
    • クエリ:table、表(<table>タグ)の内容を抽出する
    • 指数:上から4番目にある<table>タグの内容を抽出する
IMPORTHTML("http://en.wikipedia.org/wiki/Demographics_of_India","table",4)

方法1:GoogleドライブからXMLファイルを直接読み取る

  • この場合、スプレッドシートで使用されるすべてのXMLファイルは、ANYONE_WITH_LINKおよびVIEWとして共有する必要があります。
  • 共有ファイルのURLはhttps://drive.google.com/uc?id=### file id ###&export=downloadです。-したがって、式は次のようになります。
=importXML("https://drive.google.com/uc?id=### file id ###&export=download","### XPath query ###")

方法2:Webアプリを使用して間接的にXMLファイルを読み取る

  • この場合Web Appsがデプロイされているため、スプレッドシートで使用されるXMLファイルを共有する必要はありません。
ただし、この場合はGASが使用されます。このメソッドのインストールは次のとおりです。

◎1.次のスクリプトをコピーしてスクリプトエディタに貼り付けます。
function doGet(e) {
  var xml = DriveApp.getFileById(e.parameters.id).getBlob().getDataAsString();
  return ContentService.createTextOutput(xml).setMimeType(ContentService.MimeType.XML);
}
◎2.展開のWebアプリ
  • スクリプトエディタで「ファイル」→「バージョンの管理」→「新しいバージョンを保存」→「公開」→「Webアプリとしてデプロイ」-> [アプリの実行]で、[アカウント]を選択します
    • アプリにアクセスできるユーザーで、[誰でも、匿名でも]を選択します->「デプロイ」をクリックします
  • 「現在のWebアプリのURL」をコピーします->「OK」をクリックします
  • コピーされた現在のWebアプリのURLはに使用されimportXML()ます。
  • したがって、スプレッドシートの式は次のようになります。
=importXML("https://script.google.com/macros/s/#####/exec?id=#... file id ###","### XPath query ###")

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

管理人/副管理人のみ編集できます