【MACRO】Google Apps Script 質問スレ【DRIVE】at TECH
【MACRO】Google Apps Script 質問スレ【DRIVE】 - 暇つぶし2ch759:デフォルトの名無しさん
21/04/06 23:13:17.50 ao+gKvtS.net
scrapingのライブラリでParser とcheeriogs以外で良いのあります?
cheerioよさそうだけどjquery知ってる前提でドキュメントが無くてjquery知らないからきつい。メソッドとかjqueryのやつ使えるの?

760:デフォルトの名無しさん
21/04/13 17:26:12.26 o3TSl1rF.net
自宅からスプレッドシートのdoPostに1分毎にテキストを送ってセルに書き込むだけの実験中なのですが、
実行数の所からログを確認すると2000回に1回くらいステータスが「失敗しました」になっています。
自宅の記録ではステータスコードは200が返ってきています。
doPost内をtry~catchにいれてエラーメッセージを書き込もうとしましたが、何も書き込まれていませんでした。
doPostが起動していない…?
なぜ失敗しているか分かる方いませんか。

761:デフォルトの名無しさん
21/04/13 20:44:13.01 YlnYj74B.net
>>755
自作フォームは難しい。
様々なページを作らないといけない
要するにファイルアップローダー、
TeraTerm, Putty みたいな画面が欲しいのでしょ
各顧客用のフォルダを作って、そこへアップロードするのでしょ
自作するのはキツイ。
何かのサービスを使うべき

762:デフォルトの名無しさん
21/04/13 21:04:50.52 YlnYj74B.net
>>759
jQuery で、スクレイピングするだけなら、
要素の取得、HTML・Text の所だけ読めばよい。
全部の文書を、読む必要はない
let abc = $( '#abc' ).html( );
console.log( abc );
$( 'CSS セレクター' ) を書けば、jQuery オブジェクトが取得できる。
jQuery( 'CSS セレクター' )でも良い
これを実行してみれば?
console.log( window.$ );
console.log( window.jQuery );

763:デフォルトの名無しさん
21/04/13 21:11:20.27 YlnYj74B.net
>>760
doPost は同期処理なのか?
非同期処理なら、コンテキストが異なるから、
try~catch で捕捉できないのでは?
async/await なら、捕捉できるのか?

764:デフォルトの名無しさん
21/04/13 21:28:22.61 c7k7neBn.net
なんでjsの話してんの

765:デフォルトの名無しさん
21/04/22 01:56:49.59 zbsSdEd/.net
GASからWindows APIを介してWindowsアプリに指示してWindowsアプリの自動操縦て出来ます?
これのスプレッドシート+GAS版を作りたいんですが。
URLリンク(youtu.be)

766:デフォルトの名無しさん
21/04/22 21:51:19.63 IEn85Cov.net
スプレッドシートのrange.getValues()のreturnで日付が勝手にDate object に変換キャストされるのいらんのだけど
文字列にできますか

767:デフォルトの名無しさん
21/04/22 22:12:53.54 Bcy1rpDS.net
>>766
Utilities.formatDateで変換してください

768:デフォルトの名無しさん
21/04/23 01:28:15.06 KvwPc6n1.net
やっぱ自分でstringに戻すしかないのですね
どうも

769:デフォルトの名無しさん
21/04/23 01:36:47.27 Mr1QFRKK.net
>>765
できない
GASはローカルで動いてるわけじゃないからね

770:デフォルトの名無しさん
21/05/19 06:26:47.48 +jFbNy+f.net
トリガーを使って、"Sheet1"というシートのA1セルが変更された時のみ他の処理をさせたいのですが、
どのように掛けば良いでしょうか
SpreadsheetApp.getActive();
からシート名も取れると思いますが、引数からオブジェクトを指定するなどはできないでしょうか
VBAで書くと以下のような感じです
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Sheet1" Then
Debug.Print "sheet1が変更されました"
End If
End Sub

771:デフォルトの名無しさん
21/05/19 09:54:24.41 iHfxsQ4v.net
>>770
function onEdit( e ) {
if (e.source.getSheetByName() === "Sheet1"
&& e.range.getRow() === 1
&& e.range.getColumn() === 1) {
//なんか処理
}
}

772:デフォルトの名無しさん
21/05/19 21:19:17.86 +jFbNy+f.net
>>771
おっほおおおおおありがとうございますうううううう!!!!
めっちゃ助かりました、この一歩があればあとは 超特急で勉強できそうです、ほんま助かりました

773:デフォルトの名無しさん
21/05/25 09:12:15.05 7Zlc4Jvy.net
function pswV1(contract){
var url = "URLリンク(api.pancakeswap.info) + contract;
var content = UrlFetchApp.fetch(url).getContentText("UTF-8");
var obj = JSON.parse(content);
return Number(obj.data.price);
}
この関数作って使ってるんだけど、
定期的に再実行させるにはどうしたら良いのかな?
可能なら1分に1回再実行させたい。

774:デフォルトの名無しさん
21/05/25 12:30:25.88 UFi3lRqC.net
トリガー使えばええやん

775:デフォルトの名無しさん
21/05/25 14:37:01.15 7Zlc4Jvy.net
>>774
セル内で引数付けて使用してる関数をトリガーで定期実行するにはどうするの?
そういうサンプルがみつからない。

776:766
21/05/25 15:16:25.01 7Zlc4Jvy.net
とりあえずトリガー設定してみたけど最短1時間しかないね。
取得してるのは仮想通貨のレートだから最長でも5分程度にはしておきたい。

777:766
21/05/25 15:20:50.17 7Zlc4Jvy.net
ごめんなさい。
1分ありました。

778:766
21/05/25 15:23:17.48 7Zlc4Jvy.net
何度もすまん。
無効な引数でエラーになる。
やはりセル内で使用する関数にトリガーは使えないのでは?

779:デフォルトの名無しさん
21/05/25 19:19:13.82 bqN1UUYu.net
そのセルの情報も書け

780:766
21/05/25 19:47:34.24 7Zlc4Jvy.net
セル内は
=pswV1("0x27327672d1dc51f4dc58c9f413e1fa7e7ad8245e")
としています。
いまのところロード時とタブ切り替え時の任意リロード時のみ実行されます。

781:デフォルトの名無しさん
21/05/25 20:07:56.28 bqN1UUYu.net
>>780
それはトリガーじゃ無理だねぇ
その関数使うセルって複数ある?

782:766
21/05/25 20:25:01.51 7Zlc4Jvy.net
>>781
複数あります。
いまのところ5個くらいですが日々変動します。
トリガーがダメならセル内から呼び出す関数からは引数とセル位置だけグローバル配列に入れておいて
トリガーから呼んだ関数でまとめて通信させる方法もあるのかなと考え始めてます。
まだ実装してないので動くかわかりませんが。

783:デフォルトの名無しさん
21/05/25 21:36:08.76 FW9zXdEp.net
>>782
それか1分おきにどこでもいいからセル書き換えるようにすれば勝手に再計算されるのでは

784:デフォルトの名無しさん
21/06/03 05:38:31.48 B8Ey28oS.net
GASでPhantom JS cloudで動的なページをスクレイピングする時に、どうやらページが重くて表示に時間がかかるため取得できない値があります
すでに表示されたサイトに対してjQueryで取得したりPythonとseleniumを使って
driver.get(url)
time.sleep(30)
html = driver.page_source
みたいに待機時間を作ればちゃんと取得できるので値は確かに存在しており、GASでうまくいかないのは待機時間がないせいだと思います
Phantom JS cloudでも待機時間を入れたいのですが可能でしょうか?どこに入れればよいのでしょうか?

785:デフォルトの名無しさん
21/06/07 12:08:43.93 tyfu3spt.net
フォームの選択肢ラジオボタンA,B,Cの
それぞれにバラバラの回答数上限を設定する方法を教えてください。さらにラジオボタン横に残数があるとなお嬉しい

786:デフォルトの名無しさん
21/06/07 13:30:55.90 pl6618+T.net
>>784
GAS は知らないけど、
Ruby, Selenium Webdriver, Nokogiri では、
要素の検索の timeout を長くするとか、
driver.manage.timeouts.implicit_wait = 30
それか、sleep するとか、
driver.navigate.to url
sleep 30
doc = Nokogiri::HTML( driver.page_source )

787:デフォルトの名無しさん
21/06/10 08:31:00.19 rZOQ7XKm.net
機能の23時にはちゃんと動いていたスクリプトが、今朝試してみたらエラーが出てしまってる
function doPost(e) {
 const getdata = JSON.parse(e.postData.getDataAsString());
//略
}
という関数を使ってるスクリプトがいくつかあるんだけど、全部
TypeError: e.postData.getDataAsString is not a function
というエラーが出るようになってしまった
同じ人いる?

788:780
21/06/10 08:31:48.52 rZOQ7XKm.net
>>787
誤字失礼。昨日の23時です。

789:デフォルトの名無しさん
21/06/11 01:04:22.78 W2MDAmi/.net
>>787だけど、同じ問題を報告してる人がいた
そして今は治ってる
URLリンク(issuetracker.google.com)

790:デフォルトの名無しさん
21/06/12 21:54:06.58 yi8Rxd+W.net
見当はずれな質問も可能性高いんですが,
GASでうんこした時間をカレンダー登録するだけのスクリプト書いて,
ウェブアプリとしてデプロイしてAndroidのchromeのショートカット作って
それをデスクトップに保存して,そのアイコンをクリックすれば自分の
Googleカレンダーにうんこした時間登録できるとこまではできたんですが,
webショートカットなので当然chromeが起動してエラー画面が表示されちゃう
これをクリックしたらwebページも出さずに処理させる方法ってあるんでしょうか?

791:デフォルトの名無しさん
21/06/13 00:34:56.20 drIN04VN.net
>>790
claspで実行すれば?
URLリンク(github.com)
URLリンク(takuya-1st.hatenablog.jp)
Androidってのがスマホから実行するって意味ならゴメンだけど

792:デフォルトの名無しさん
21/06/13 00:57:33.48 TPT9gOWH.net
>>791
ありがとうございます.
やっぱりそういう目的のものではないんですなあ……
スマホは常時持ち歩いているのでうんこするときに便所でワンクリックで
うんこした時刻を記録したいという目的なのでスマホから実行させたいんですよね
やっぱりアプリ作るしかないのかしら(´・ω・`)

793:デフォルトの名無しさん
21/06/13 19:42:39.72 lkc6O7cF.net
>>792
TermuxのCUIからリクエスト送れないかね

794:デフォルトの名無しさん
21/06/13 22:42:32.09 TPT9gOWH.net
>>793
Termux 上で >>791が教えてくれたclaspをインストールして……
って事ですかね.
現状でもブラウザ開くけど目的の「ワンクリックでうんこした時間を記録」
は叶ってるので,まあうんこした時間記録するだけなのにAndroid上でLinux
環境セットアップしたくないかなって気はする.
……Termuxで実行するときってその実行コマンドをショートカットにして
デスクトップにおけますん?

795:デフォルトの名無しさん
21/06/14 01:54:11.31 btOps/6G.net
>>794
bashで書いたのをctrl + rとかで呼び出せばいいんちゃう

796:デフォルトの名無しさん
21/06/14 14:10:38.65 G+aGjkZp.net
>>792
iPhoneだと↓みたいな感じでできるみたいだから
URLリンク(ntwmachine.com)
Androidでも↓みたいなアプリでできそうじゃない?
HTTP Request Shortcuts
URLリンク(play.google.com)

797:デフォルトの名無しさん
21/06/14 17:48:55.22 WNlBtQy0.net
>>794
TaskerとTermux用Taskerプラグイン買えばショートカットとか色々なトリガーでコマンド実行できる

798:デフォルトの名無しさん
21/06/14 21:57:18.79 m506649G.net
>>790のやりたいこととやってみたことを100%理解してるわけじゃないけど、詳しくないなりに考えたのが、自分ならうんこした時間をカレンダーに記録するスクリプトと連携したスプレッドシートがあったとして、IFTTTでボタンウィジェットを押したらそのスプレッドシートに何でもいいから行が追加されるようにして、うんこ記録関数のトリガーはスプレッドシートが更新された時に発動するようにする

799:デフォルトの名無しさん
21/06/15 16:38:21.05 0GdnjUqP.net
>>790
キチンとhtml出力して、html内にウインドウ閉じるJavaScriptを入れるってのはダメですか?

800:デフォルトの名無しさん
21/06/15 22:38:27.71 Pikc/bWs.net
うわー皆さんいろいろアイディアありがとうございます.
>>799
試してみたんですがAndroid環境だと画面閉じないですね…
>>798
単純にうんこした時間をGoogleカレンダーに登録したいだけなんすよね…
なのでスプレッドシートとかは使いたくなくて,コードは
var date = new Date();
CalendarApp.getDefaultCalendar().createEvent("💩",date , date)
こんな感じで十分なので,できればこれをandroid上でアイコンに割り当てて一発実行したいのです.
>>795
ターミナル開く手間は避けたくて……
>>796
>>797
このどっちかででけそうな気がしてきたのでちょっと試してみます!

801:デフォルトの名無しさん
21/06/15 22:54:32.69 Jy0S46aa.net
絵文字かわヨ

802:デフォルトの名無しさん
21/07/13 10:23:44.28 CjZmk7C6.net
共有しているスプレッドシートの
「編集者は権限を変更して共有できます」のチェックボックスを外す(無効にする)
ソースコードを教えてください
setShareableByEditors(shareable) を使えばできるようなのですが
使い方が分かりません
よろしくお願いいたしますm(_ _)m

803:デフォルトの名無しさん
21/07/13 10:54:14.06 Vr6vzxIM.net
>>802
その関数の引数をfalseにするだけやろ

804:デフォルトの名無しさん
21/07/14 18:54:15.93 GFXnTS4Q.net
グループ内で簡易なうpろだとして使いたいのですが、ファイルのアップロード、コメントが記入できて、
アップロード先のURLとコメントをスプレッドシートにリスト化してくにはどうしたらいいんでしょうか?
ファイルのアップロード、コメント記入してそれをスプレッドシートにリスト化、それぞれは出来たんですが組合わせると動作しません。
なにかサンプルになるようなページを教えていただけると助かります…

805:デフォルトの名無しさん
21/07/15 15:20:59.29 ygp86UHP.net
シートを作る
うpするGASを書く
アップロード先のURLとコメントをスプレッドシートにリスト化
>ファイルのアップロード、コメント記入してそれをスプレッドシートにリスト化、それぞれは出来たんですが
もっと具体的に
出来ればソースとか晒すべき

806:デフォルトの名無しさん
21/07/15 21:16:55.83 gFOIdhYR.net
>>800
>>795
>ターミナルを開く手間は、避けたい
どこかに、ショートカットを作れないの?
例えば、Windows ならデスクトップにショートカットを作って、
リンク先に、コマンドプロンプトを起動して、
Ruby でスクリプトファイルを実行する
C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/script.rb"
注意。書き込めないので、間に@を入れました

807:デフォルトの名無しさん
21/07/18 21:16:48.01 hteKw5EV.net
スプレッドシートのトリガー
onSelectionChangeの挙動ホント悪すぎる
ここらへんVBAと比べてダメ過ぎだな

808:デフォルトの名無しさん
21/07/29 06:32:21.24 RJZsh/tv.net
スプレッドシートのグラフもひどいよ。
setOption(‘vAxes.1.title’,’hoge’)とかも

809:デフォルトの名無しさん
21/08/01 21:02:43.56 zu2woDem.net
スプレッドシートとhtmlserviceで簡単なwebアプリ作ろうと思ったのですが、ユーザー毎のデータも扱う場合、どうやるのがいいんでしょうか。
アプリの実行者を「ログインしているユーザー」にすると、スプレッドシートへのアクセス件が必要だから、他の人のデータにアクセスされそうで怖い。
だからといって、実行者を「自分」(開発者)にすると、操作してるユーザーが誰なのかを判別できないし・・。

810:デフォルトの名無しさん
21/08/05 11:42:49.43 eMHroxtV.net
>>809
ユーザーごとのデータってどんなの?
スプレッドシートの1行で表現できないもの?

811:デフォルトの名無しさん
21/08/08 03:08:43.28 JLttzwiP.net
>>810
user | name | score
aaa@gmail.com | taro | 85
bbb@gmail.com | jiro | 75
みたいにスプレッドシートをDBとして使うWEBアプリの場合、
アプリを「自分(開発者)」として実行すると、ログインユーザーのemailが取得できないから、スプレッドシートから当該ユーザーのデータを取得できない
「アクセスしているユーザー」として実行すれば、ログインユーザーのemailが取得できるけど、このスプレッドシートへのアクセス権を与えないといけないので、他のユーザーの情報も全て見れてしまう
ので、普通はどうするものなのかが知りたいです。(有償のworkspaceは使わない前提です)

812:デフォルトの名無しさん
21/08/10 05:15:26.61 MjVqGGgl.net
>>811
なるほどね
普通がどうだかわからないけど
メアド自動収集をあきらめてユーザーに入力させるか
スプレッドシートをDBにするのをやめてCloudSQLを使う
かなぁ

813:デフォルトの名無しさん
21/08/10 11:13:59.22 9wi/dlAk.net
GAS には、ユーザー認証機能があるの?
認証は、Firebase Authentication じゃないの?

814:デフォルトの名無しさん
21/08/19 04:51:29.28 l+iKsjPF.net
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const pivotSheet = spreadsheet.getSheetByName('a');
const pivotTables = pivotSheet.getPivotTables();
pivotTables.forEach(pivotTable => {
const pivotValues = pivotTable.getPivotValues();
pivotValues.forEach(pivotValue => Logger.log(pivotValue));
});
こんなかんじでpivotTablから値をとりたいのですが、ログとしては
pivotValueという値しか返ってこないのですが、なんででしょうか?
pivotValue.getValue() のようなことがしたいんです。具体的な数値が返ってくるような。

815:デフォルトの名無しさん
21/08/19 08:07:07.49 hKprbQAC.net
>>814
何も調べてないうえにやったこともないけと、文脈から察すると
Logger.log(pivotValue.getValue())
じゃない?

816:デフォルトの名無しさん
21/08/19 12:03:47.46 l+iKsjPF.net
>>815
getValue()は使えないみたいなんですよね、not a functionになって
getValueでしてみたらnullが帰ってきて謎...
ぐぐってもサンプルが出てこなくてまいりましたわ

817:デフォルトの名無しさん
21/08/19 13:20:16.21 JpyvyW0f.net
公式のリファレンス読みなさい

818:デフォルトの名無しさん
21/10/13 00:47:48.09 Qk99MJFD.net
>>811
Webアプリのコードで自分の分だけしかアクセスできないように書けばいいだけだろ?
それともクライアントから任意のコードをサーバ側で実行させられるわけなの?

819:デフォルトの名無しさん
21/10/13 01:39:22.36 sH5qc9+o.net
>>818
何言ってだ

820:デフォルトの名無しさん
21/10/17 20:46:12.87 Nd7q+jNJ.net
ピボットテーブルで出力したテーブルの特定の文字列のセルを非表示にしたいのですが
やり方が御座いましたらご教示お願いいたします
条件付き書式で一致すれば文字を白にするといった「見えなくする」ではなく
セルをコピーしてもコピーされない状態にしたいです
よろしくお願いいたします

821:デフォルトの名無しさん
21/11/01 23:15:46.54 Q50KTbzj.net
公式見てもわからなかったんですが、
新しいスプレッドシートを作る関数→できる
そのスプレッドシートに何か書き込む関数→できる
そのスプレッドシートのスクリプトエディタをいじってスクリプトを付ける関数→?
できるんでしょうか?

822:デフォルトの名無しさん
21/12/02 21:38:11.37 FXlnpm0p.net
>>821
多分できない
あらかじめコピー元テンプレート用のスプレッドシートを用意しておいて
スクリプトも仕込んでおけばいけるかなと思ったけど
実行権限の付与ができないから無理じゃね

823:デフォルトの名無しさん
21/12/18 23:17:06.97 a3T2SFZh.net
はじめまして。
質問ですが、GoogleスプレッドシートのGAS(Google Apps Script)で、
「計算結果のみ」を別のスプレッドシートへコピーする方法を教えてください。
var ss_copyFrom = SpreadsheetApp.openById('コピー元のシートID');
var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet();
var sheet_copyFrom = ss_copyFrom.getSheetByName('シート名');
var sheet_copyTo = ss_copyTo.getSheetByName('別のスプレッドシートのシート名');
var copyValue = sheet_copyFrom.getRange('W3:W200').getValues();
sheet_copyTo.getRange('B4:B201').setValues(copyValue);
上記でコピーそのものはできていますが、表示されるのが
コピー元であるスプレッドシートに入力されている「=T4-U4-V4」の結果
(コピー先のT列、U列、V列には何も入っていないため、「1899/12/30」が表示されています)で、
本当に表示させたいのはコピー元のスプレッドシートで「=T4-U4-V4」が計算された結果の数値「1」なのです。
GASについてはド素人(今月から使い始めました)で、ネット検索で色々調べてみましたが、
これといった解決策がわからず、困り果てています。
何とかお知恵を貸していただけますよう、お願い致します。

824:デフォルトの名無しさん
21/12/19 02:11:05.33 TUb0vitt.net
>>823
単純にスプレッドシートの表示形式が数値か日付かって話じゃないの

825:デフォルトの名無しさん
21/12/19 11:32:13.88 RkNKFft4.net
>>824
その通りでした...ありがとうございます。
表示形式を数値に変えたら、ちゃんと「1」がでました。
こんな単純なことに気づけないとは...失礼しました。

826:デフォルトの名無しさん
21/12/20 12:14:27.96 ViJtvVZ6.net
スプレッドシートのメニューバー変わりましたよね?
拡張機能からスクリプト画面選ぶようになってる…
調べたら10月から順次変わってる…?今日気付いたんですが2ヶ月掛かって更新されたってことでしょうか?

827:デフォルトの名無しさん
21/12/20 14:36:16.49 Xy/RGdSX.net
うちのは10月末に変わってたよ。

828:デフォルトの名無しさん
22/01/15 18:08:24.36 OIci5frO.net
web版のエディタが使いにくい。
ファイル+のとこのペイン?っていうの?あれが邪魔で小さくしたくてデベロッパーコンソールでイジってるんだけどどのcss変えれば小さくできますか?

829:デフォルトの名無しさん
22/01/17 18:17:08.30 ymAJekA/.net
スライドからスクリプト開いてスクルプト書きました。
スライドからそのスクリプト実行したくて、onOpen()でスライド表示時の右サイドバーにスジュリプト起動ボタンを表示するようにしました。
ところが、スライド開いた時にこのonOpenが実行っされません。
トリガーに登録せよ!という情報もあったのですが、トリガー登録画面には、「スライドを開いた時」的なものは無く、
「カレンダーを開いた時」のようなものしかありませんでした。
スライドを開いた時に、スクリプト起動させるボタンのようなものを表示して、そこからスクチプトを起動したいです。
方法があれば教えてください。

830:822
22/01/18 10:50:27.27 Y4BAPieC.net
解決しました。下記に載ってました。
HURLリンク(myfunc.jp)

831:デフォルトの名無しさん
22/02/20 03:04:59.59 kcCfXnh0.net
指定した文字列Aと背景色の2条件で集計したいのですが、書き方を教えて下さい。
文字列Aだけ、背景色だけ、などはいくつか見つけられたのですが、組み合わせ方が分かりません…。

832:デフォルトの名無しさん
22/02/21 21:47:26.46 UKJTHoUK.net
URLリンク(script.google.com)
このページって何処からたどり着くんですか?
googleドライブとかから新規にスクリプトを作成するのは出来るんですけど
何処にも上記のリンクが無いです

833:デフォルトの名無しさん
22/02/28 14:47:01.29 QEzJwIFm.net
出来そうで出来ないというか検索してもやりかたが見つからなかったので
知ってたら助けて欲しい
【やりたいこと】
エクセルファイルをGASでスプレッドシートに変換してスプレッドシートにする
但しエクセルファイルの各シートのセルにはエクセル特有の文法で記載された計算式や関数がふんだんに使われているものとする
【ひっかかっていること】
単純にGASでDriveAppやDrive.Filesを用いてエクセルファイルをスプレッドシートに変換するだけだと
変換されたスプレッドシートのセルにはエクセルの特有の文法で記載された計算式や関数が移植されてきただけで
スプレッドシートではエクセル特有の文法で記載された計算式や関数は処理できないのでやりたいことが出来ない状態
なのでエクセルのセルに埋め込まれてる計算式で求められた計算値だけをスプレッドシートに移植したい

834:デフォルトの名無しさん
22/02/28 20:31:28.47 PjfLudyf.net
関数で計算されてるデータを全て数値などに置き換えた物をアップすれば簡単じゃね?
データとして貼り付ければ一瞬だしマクロ組めるでしょ。

835:デフォルトの名無しさん
22/03/01 18:33:50.02 VTA82jsu.net
そのエクセルが他から提出されてくるもので数百単位であるので
個々にそのマクロを仕込んだものを実行するというのは大変かなぁ
できればエクセルはそのままで一括で読み込んで
GASのなかでやっちゃいたい
無理げかなぁ

836:デフォルトの名無しさん
22/03/01 18:59:33.32 CkaReruZ.net
そういう後だしするからアドバイスするだけ無駄ってのが出てくるんだよね

837:デフォルトの名無しさん
22/03/02 20:59:04.21 CHjRcKIO.net
>>833
スプレッドシートでは処理できない、って言う時点でGASじゃ無理でしょ。
どうしてもやりたいなら、下記くらいしか思いつかない。
①その数式と同じ動きをする関数を自分でGASで実装する
②Winのタスクスケジューラとか使って、VBAでExcel文字列化するなりCSV出力するなりして、それをGASでスプレッドシート化する。GoogleドライブアプリでWinとドライブを同期する

838:デフォルトの名無しさん
22/03/02 21:59:04.64 vYgwEkZg.net
しょうがないから一つヒント
同じフォルダ、若しくは特定のフォルダに入ってるExcelのファイルを全て文字に変換して保存するマクロを組めばOK
何百あろうが一瞬
全てのブックの全てのシートへループでぐるぐる回すだけだから、そんなに難しくないよ

839:デフォルトの名無しさん
22/03/11 16:04:46.03 GfEhxdTj.net
GASのソースコード内でタイムゾーンを変更することはできるのだろうか?
GASのエディタにあるjsonに書いて指定するというのは見つけたが、それだとコード内でgoogleドライブから開いたスプレッドシートには適用されなかった
GASのエディタではTokyoにしてても開いたスプレッドシートはPacificになってる

840:デフォルトの名無しさん
22/03/11 21:23:44.78 gLuUS5Uy.net
それはスプレッドシート自体の設定いじる

841:デフォルトの名無しさん
22/03/11 21:27:52.87 gLuUS5Uy.net
もしくはGoogleアカウント設定のプロフィールのタイムゾーンいじると
それ以降作成したスプレッドシートはデフォルト変わってるはず

842:デフォルトの名無しさん
22/03/11 21:31:24.19 0mAcmeni.net
>>841
デマ回答やめろ😡

843:デフォルトの名無しさん
22/03/16 10:48:26.08 JIpzCEZ0.net
スプレッドシートの複数列を指定して二次元配列に入れる場合のやりかたはわかるんだけど
離れた二つの列を指定することって出来る?
range = Sheet.getRange("D2:E1000");
array1 =range.getValues();
Logger.log(array1);
例えばこれだとD列2行目からE列1000行目までの2列分のデータを二次元配列に格納されるけど
これをD列2行目からD列1000行目とN列2行目からN列1000行目のデータを二次元配列に入れたい
D列とE列は隣り合ってるけど
D列とN列は隣り合ってないからうまく実現できない

844:デフォルトの名無しさん
22/03/16 11:31:39.30 y8PMgdeo.net
Rangeも配列で指定すればいいんじゃね

845:デフォルトの名無しさん
22/03/28 04:13:33.54 XbT1Q7Sk.net
const files1 = DriveApp.getFolderById(folderId1).getFiles();
const files2 = DriveApp.getFolderById(folderId2).getFiles();
こんな感じで異なるフォルダに格納されてるファイルをgetFiles取得した場合
その結果のfiles1とfiles2を合体させてfiles3にするようなことってできる?
いまだとファイルの数だけ繰り返すっていうのでfiles1を回すループ処理とfiles2を回すループ処理という感じで見栄えが悪いから
2つをマージしたfiles3を回すループ処理って感じにしたい

846:デフォルトの名無しさん
22/03/28 09:02:53.32 /mas85k3.net
無理なのでループ処理部分をメソッド化するなりしてどうぞ

847:デフォルトの名無しさん
22/03/28 11:53:32.50 XbT1Q7Sk.net
えぇ~…
残念

848:デフォルトの名無しさん
22/03/31 12:20:31.27 A0O2N5qb.net
GASでセルの値を変更させて変更後の値を読み取ってって一連の処理をしたいんだけど
一連の処理が終わるまでシートに表示される値がリフレッシュされないらしく
処理としてはセルへ値を出力してるけど読み取る値が出力前の値になってる
強制的にシートに表示される値を最新にすることってできないの?

849:デフォルトの名無しさん
22/03/31 13:19:55.86 5pPwE+XM.net
コードを貼れ

850:デフォルトの名無しさん
22/04/01 06:42:07.95 68FipywF.net
setvalueで値をセルに入れるのってリアルタイム反映じゃなくて
スタックしてて処理が終わるみたいな切りがいいところで
まとめて反映する仕様じゃないのけ?
クラウドベースの実行だからサーバー側の負荷軽減のためだと聞いたが
コード云々でなんとかなるなら知りたい

851:デフォルトの名無しさん
22/04/08 13:56:00.62 PYg//+II.net
getValues()で取得したのはrangeで指定したのが1列分のデータであっても2次元配列になっちゃうけれど
getValues()の後ろに続けて.flat().filter(String).map(String) と付ければ1次元配列に変換できることを
ネット上で検索してたら見つけた
range = sheet.getRange("C2:C1000");
result = range.getValues().flat().filter(String).map(String);
実際に上記のようなコードで試したところ確かに1次元配列に変換はされてるけど
空白セルの要素が配列から消滅してしまってる
"A","B","","F","D"
上記のように要素数5個で3番目の要素が空欄の配列が欲しいのだが
"A","B","F","D"
上記のように空欄の要素が消滅して前詰めされた要素数4個になってしまってる
空白セルの要素も残したいんだけど、どうやったらいいのだろうか?

852:デフォルトの名無しさん
22/04/08 18:27:03.86 tiBN51P7.net
>>851
filter()とmap()要らなくない?

853:デフォルトの名無しさん
22/04/08 20:09:46.76 PYg//+II.net
>>852
そうなのかな
ここの記事を読んだんだけど
URLリンク(iwb.jp)

854:デフォルトの名無しさん
22/04/08 20:12:32.05 PYg//+II.net
result = range.getValues().flat()
とりあえず .filter以下を消したら望んでた結果は得られた模様

855:デフォルトの名無しさん
22/04/08 20:16:40.07 tiBN51P7.net
>>853
この記事は空白除去してるじゃん

856:デフォルトの名無しさん
22/04/08 20:28:36.27 uSpd3hvB.net
セルに手入力された5:22とか8:24とかの見た目時間になってる単なる文字列を使って
時間の足し算をしたいんだが、なんかいいアイディアはないだろうか?

857:デフォルトの名無しさん
22/04/08 20:30:57.57 TDBa7GsZ.net
足し算自体はスプレッドシート上の計算式ではなく
値だけ変数に入れてhas上でやりたい

858:デフォルトの名無しさん
22/04/14 12:07:06.46 l9jSNk17.net
スプレッドシートに数十個のボタンを図形描画してスクリプトの割り当てをしたんだが何回設定しても
いつのまにかスクリプトの割り当てで割り当てたスクリプトが空欄に戻ってしまう
これって何か制限があったりするのだろうか
一通り設定して最初のボタンから確認していくと空欄に戻ってしまってて
ボタン押しても反応しない
設定した直後にボタン押すときはスクリプトが動いてるから最初から設定できてないわけではない

859:デフォルトの名無しさん
22/05/24 07:38:06.26 78erdOqF.net
ClassroomAPIを使って
-----
Classroom.Courses.CourseWork.list(クラスルームのID).courseWork.forEach(w =>{
~~~~~~
})
-----
ってかんじで受講しているクラスで出された課題それぞれに対して処理をしているんだけど、
これだと提出済み課題に対しても処理してしまう。
提出済みか判定して、除外するためにはどうしたらいい?

860:デフォルトの名無しさん
22/05/27 11:50:40.73 S0cy91Tb.net
提出済みか判定して、除外す提出済みか判定して、除外すればいい

861:デフォルトの名無しさん
22/05/28 11:07:36.06 81XaDMLN.net
FastAPI
OCID

862:デフォルトの名無しさん
22/05/30 11:13:52 Z6OL71NL.net
Google Apps Web API
URLリンク(www.youtube.com)

863:デフォルトの名無しさん
22/07/22 09:02:24.10 CcjlX4kF.net
質問します
ローカルにあるファイルをメールに添付して
指定時間に送信するみたいなことを
gasでやりたいのですが、
ローカルファイルをGoogleドライブに取り込むところから躓いてます
こういうやり方があるよ、とかこのHPが参考になる、みたいなのはありますか?

864:sage
22/07/28 15:18:39.59 5gdZfTov.net
m5stackでボタンを押す → スプレッドシートに書き込み → 編集をgmailで送信
というのをしたいなと。
参考にしたのはこのページ
URLリンク(knt60345blog.com)
要はボタンを押すとスマホに通知がくるシステムを作りたいのです。ところがgmailの送信がされません。
やったこと
1.スプレッドシートに編集があったときに通知する
→ 手入力だと通知される。しかし、scriptによる編集では通知されない。
2.gas上で編集をトリガーにしてsendgmailを使う
→失敗。おそらく1と同じ理由
3.スプレッドシートを編集するスクリプトの中にsendgmailを記述する
→編集はされるがメールは送信されない
sendmailの使い方を間違えているのかと思いましたがメールを送るだけのコードを実行するときちんと送れていました。
ヒントをもらえるとありがたいです。よろしくお願いします。

865:デフォルトの名無しさん
22/08/03 00:57:44 Mtys3/qj.net
>>863
簡単なのはGoogle DriveアプリでPCと同期させる方法かと思います。

866:デフォルトの名無しさん
22/08/03 15:39:22.24 IS1ZoKH3.net
>>863
ローカルファイルと言うことはトリガー実行じゃないんだよね?
どういう操作を想定してるのかわからんけど、HTMLでダイアログ表示させるかdoGetでHTMLを表示させて
そのHTMLとJSでローカルファイルは読めるよ
URLリンク(tonari-it.com)
>>864
これで普通に出来たぞ
function doPost() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
var range = sheet.getRange('A1');
var values = range.setValue('hoge');
GmailApp.sendEmail('test@example.com', 'subject', 'body');
}

867:デフォルトの名無しさん
22/08/04 08:31:05.67 CP8sLsBT.net
>>865-866
回答ありがとうございます
もう回答もらえないのかな?と諦めておりました
実はローカルファイルをトリガー実行(時間指定)でメールに添付させたいというのが希望する処理なのです
グーグルドライブアプリからならキーも取れそうですね
会社からグーグルドライブアプリの設置許可貰えたらやってみます

868:デフォルトの名無しさん
22/08/26 19:09:52.12 fCaJRqVr.net

有料化

869:デフォルトの名無しさん
22/08/26 20:13:08.31 shwkM977.net
>>868
なんだそれ怖いこと言うなよ
ソースどこ?

870:デフォルトの名無しさん
22/08/31 11:27:16.40 8zP5mkRm.net
googleSpaceのタスクにGASでタスク登録って可能?
登録しようとしても
GoogleJsonResponseException: API call to tasks.tasks.insert failed with error: Invalid task list ID
って吐かれる
IDはスペースのURL末尾を使ってる

871:デフォルトの名無しさん
22/09/15 22:22:03.06 ZhCJ57CK.net
しばらく触ってないうちにスクリプトエディタが変わっていたんですが、新しいエディタでプロジェクトのコピーを保存したい場合ってどうしたら良いんでしょうか?
自作のスクリプトを使ってもらうのにコピーを保存してもらっていたので代わりの方法を探しています

872:デフォルトの名無しさん
22/10/25 20:43:00.01 czhOEshi.net
Googleスプレッドシートの件で質問します。
A11からF11の列に、IMPORTRANGE()によって、他のスプレッドから取り込んだデータが入っています。行の数は未定(約300件ぐらい)です。
このままでは、元データのシートが更新されると、合わせてデータも更新されてしまいます。
この現在表示されているセルの値をそのまま、文字列としてセルに上書きするコードを記入したいのですが、どのように記述するとよいでしょうか?

873:デフォルトの名無しさん
22/10/26 01:21:01.31 Dg1k8nd7.net
やりたいことがわからないのでもう少し詳しく書いてください

874:865
22/10/26 02:36:10.71 wuQKMR4S.net
すみません。自己解決しました。
スレ汚し申し訳ありませんでした。

875:デフォルトの名無しさん
22/10/26 11:11:50.28 t4LQIfXs.net
謝るより原因や解決方法を書いていってほしい
質問と解決法が揃ってればスレ汚しにならない

876:デフォルトの名無しさん
22/11/19 22:03:44.91 7xWc9dNP.net
初心者で勉強中ですがplain bodyとかの正規表現が難しくて泣きそう

877:デフォルトの名無しさん
22/12/16 21:50:55.76 /69Su096.net
1日一回gmailの中のメールをフィルタリングして集計してメールを遅るスクリプトを動かしてます。
今日までは毎日1回動いてましたが
本日近い時間帯で4回トリガーされていました。
このようなことが起こった方他におられませんでしょうか。

878:デフォルトの名無しさん
22/12/17 09:05:35.61 CgXXVcB1.net
>>877
調べてみるのでソースだせる?

879:デフォルトの名無しさん
23/01/16 23:18:09.81 XkS+UaR1.net
ボタンを押下したらテーブルを表示させたいんだけど、どうすればいいのでしょうか?

880:デフォルトの名無しさん
23/01/17 00:42:43.29 fU/PH7pE.net
質問ざっくりしすぎ

881:デフォルトの名無しさん
23/01/18 09:15:14.72 NRwxJvcS.net
毎月の商品ごとの売上グラフを作ってるんですけどAには赤、Bには青、Cには黃というように色指定は出来ますか?
グラフの並び順に1番目から赤、青、黃という順序では出来るんですけど、順番が変動しても大丈夫にしたいです
A2=
if "A", Red
"B", Blue
"C", Yellow
みたいに出来たらいいなと思ってます

882:デフォルトの名無しさん
23/01/20 23:25:45.84 E/iTFMTm.net
二次配列の中の特定要素を一個だけじゃなくて任意の数があるか確認する方法ってある?

883:デフォルトの名無しさん
23/01/21 01:05:54.74 tr5Udobt.net
どういうこと?
何か日本語不得意なやつ多すぎね?
上手く質問できないなら具体例を書けよ
例えば
[
[1, 2, ...],
[3, 4, ...]
]
という二次元があったとき、
○○が○○であることを確認する方法ってある?
みたいな

884:デフォルトの名無しさん
23/01/21 04:21:13.49 a0kfmYv3.net
日本語というかこういうのはちゃんと説明できないからコード書けないんでは

885:デフォルトの名無しさん
23/01/21 16:40:27.15 /REhm/9K.net
ボタンが押下されたら表が動的に表示されるようにしたいのですが、動的に作成された表の値がundefinedになります。
下記の通りに書いたのですが、何故undefinedになるのでしょうか?
<script>
function displayTable() {
var htmlTable = google.script.run.getTable_Area();
document.getElementById("createdTable").innerHTML = htmlTable;
}
</script>
function getTable_Area() {
return '<table>' +
'<thead>' +
'<tr>' +
'<th>Result</th>' +
'</tr>' +
'</thead>' +
'<tbody>' +
'<tr>' +
'<td>Date</td>' +
'<td><input value=<?= new Date();?>></input></td>' +
'</tr>' +
'<tr>' +
'<td>Area</td>' +
'<td><input value=<?= getArea();?>></input></td>' +
'</tr>' +
'</tbody>' +
'</table>';
}

886:デフォルトの名無しさん
23/01/21 20:12:40.75 tr5Udobt.net
>>885
パッと見だけど
displayTableはフロント側の関数だよね
getTable_Areaはgoogle.script.run経由で呼び出してるからgs(バックエンド側)の関数だよね
google.script.runはwithSuccessHandlerのコールバックでレスポンス受け取るから、変数htmlTableはundefinedになるんじゃね?

887:デフォルトの名無しさん
23/01/21 21:05:36.17 EDO4fSiJ.net
>>886
>displayTableはフロント側の関数だよね
>getTable_Areaはgoogle.script.run経由で呼び出してるからgs(バックエンド側)の関数だよね
はい。それぞれフロントとバックエンド側になります。
withSuccessHandlerを以下の通りに使用し、実行したところundefinedは表示されなくなったのですが、表が表示されないということはcalculateArea()の書き方がいけないのでしょうか?
<script>
function calculateArea() {
var htmlTable = "";
google.script.run.withSuccessHandler(function(data) {
htmlTable = data;
}).getTable_Area();
document.getElementById("createdTable").innerHTML = htmlTable;
}
</script>

888:デフォルトの名無しさん
23/01/21 21:11:08.81 tr5Udobt.net
>>887
こうしてみて
function calculateArea() {
google.script.run.withSuccessHandler(function(data) {
document.getElementById("createdTable").innerHTML = data;
}).getTable_Area();
}

889:デフォルトの名無しさん
23/01/21 22:20:43.38 EDO4fSiJ.net
>>888
ありがとうございます!表が表示されるようになりました!
もし可能であれば、もう1点教えていただきたいのですが、
上記 function getTable_Area()には
'<td><input value=<?= getArea();?>></input></td>'
のようにgetArea()などの関数を表が作成される際に呼ばれるよにしています。
しかし、表示されたタブをみてみると
<input value="<?=" getarea();?="">
になっており、エスケープ処理?がされているみたいです。
実際にアプリを開発する際は、何か別の方法でinputの値に関数の戻り値を代入しているのでしょうか?

890:デフォルトの名無しさん
23/01/21 22:36:15.48 tr5Udobt.net
>>889
そのgetAreaはどっちの関数?
フロント?バック?

891:デフォルトの名無しさん
23/01/21 22:50:23.61 EDO4fSiJ.net
>>890
バック(gs)になります。

892:デフォルトの名無しさん
23/01/21 22:59:56.13 tr5Udobt.net
>>891
これで良くない?
function getTable_Area() {
const a = new Date();
const b = getArea();
return '<table>' +
'<thead>' +
'<tr>' +
'<th>Result</th>' +
'</tr>' +
'</thead>' +
'<tbody>' +
'<tr>' +
'<td>Date</td>' +
'<td><input value="' + a + '"></input></td>' +
'</tr>' +
'<tr>' +
'<td>Area</td>' +
'<td><input value="' + b + '"></input></td>' +
'</tr>' +
'</tbody>' +
'</table>';
}

893:デフォルトの名無しさん
23/01/21 23:07:30.06 EDO4fSiJ.net
>>892
なるほど。そのようにすればよかったのですか。
ありがとうございます!大変勉強になりました!

894:デフォルトの名無しさん
23/01/21 23:20:48.89 tr5Udobt.net
>>893
全く説明してなくてごめんね
テンプレートリテラル使うともっと簡潔に書ける
URLリンク(developer.mozilla.org)
あと同期/非同期がわかるといいね

895:デフォルトの名無しさん
23/01/21 23:41:09.53 EDO4fSiJ.net
>>894
いえいえ。重ね重ね、ありがとうございます!
テンプレートリテラルを勉強して使ってみようと思います。
またご推察の通り、同期の問題も発生しておりますので、それも合わせて勉強してみます。

896:デフォルトの名無しさん
23/01/22 09:05:30.28 1NpPY/pK.net
ERB(埋め込み・Embedded RuBy)なら、HTML 内で、
<% ~ %> でRubyのコード片を実行するだけ(出力はしない)。
<%= ~ %> でRubyのコード片を実行して出力する
例えば、a.html.erb が以下なら、
<% ary = [ "<a>", "あ" ] %>
<% ary.each do |item| %>
<input type="text" value="<%= item %>">
<% end %>
a.html は、以下のように出力される
<input type="text" value="<a>">
<input type="text" value="あ">

897:デフォルトの名無しさん
23/01/25 19:23:10.13 EJwoBEnK.net
test

898:デフォルトの名無しさん
23/01/25 19:23:43.80 EJwoBEnK.net
やりたいこと:
Maps.newStaticMap()で作成した画像?をHTML上に表示させたい。
試したこと:
index.htmlから呼ばれるtest.gsの関数内で
var googleMap = Maps.newStaticMap().setCenter(centreY,centreX)
を定義して
return googleMap.getMapUrl();
でそのURLを取得しました。
そのURLをHTMLのIMGタグに
<img src="〇〇〇" width="100px" height="100px">
と入れても画像が表示されませんでした。

HTML上でbodタグの中に画像を表示させようとしているのですが、ファイルアイコンが半分に敗れたものが表示されています。

899:デフォルトの名無しさん
23/01/26 03:32:17.94 n/mKepPR.net
>>898
getUrlで取得されたURLにあるものって画像じゃないよね
画像じゃないものをimgタグにセットしても表示されないよ
URLにあるものを画像化するか
iframe使って表示させるか(未検証)
どっちかのアプローチじゃないかな

900:デフォルトの名無しさん
23/01/26 04:58:55.72 p3aeborJ.net
>>899
わかりました。
ありがとうございます。

901:デフォルトの名無しさん
23/02/02 21:14:34.93 d3AVgBUi.net
GAS愛好家のみなさん
ContactsAppからPeopleAPIへの移行状況はいかがですか?
勝手が違いすぎてよーわからん
公式すらあんまり情報ないしマトモな記事載せてるサイトもないですよね

902:デフォルトの名無しさん
23/02/03 12:45:44.80 0b57qUmd.net
スプレッドシートについての質問をさせてください
条件付き書式で、フォントサイズを変更するにはどうしたらいいでしょうか
表で一定の値の数字以上はフォントサイズが大きくなる、という仕様にしたいです

903:デフォルトの名無しさん
23/02/05 16:08:42.77 2ccsuJcO.net
>>901
どうぞ。
URLリンク(officeforest.org)

904:デフォルトの名無しさん
23/02/15 16:03:34.65 b8FtSvc2.net
GASじゃなくてスプレッドシートなのだけど、
検索窓閉じた時検索結果に跳ぶの避けられませんかね。

905:デフォルトの名無しさん
23/02/18 13:58:20.49 W3nKwjDO.net
やりたいこと
スプレッドシートに沢山ある あ い う とかいう文字列を
i[あ.い.う...]
t[a.b.c...]
という配列使って一度に置換作業がしたい。
i[1]→t[1]みたいな感じで。
replafeとforの組み合わせでなんとかなるかな?と思ったのですが、リファレンス読む限りreplace(a,b)の置換のa部分に変数を用いることは出来ないようなので他の方法を探しています。
ご教授頂きたく。

906:デフォルトの名無しさん
23/02/18 18:58:41.14 W3nKwjDO.net
>>905
自己解決。
というか諦めて別シートに呼び出した後substituteとxlookupの組み合わせで無理やり置換したのを表示させました。

907:デフォルトの名無しさん
23/02/19 14:19:59.95 bukleA+Y.net
>>905
日立?

908:デフォルトの名無しさん
23/02/19 22:06:54.53 sztA44Ir.net
>>905
spliceで置き換える
URLリンク(gray-code.com)

909:デフォルトの名無しさん
23/02/20 02:05:22.77 6OqVkYRD.net
>>908
ありがとうございます!spliceメソッド使ってみます。
その前に1つずつ検索かけるのに手古摺ってますが、なんとかやってみたいと思います。

910:898
23/02/20 16:04:41.81 4jGYSd8p.net
駄目でした…
includesにしてもmatchにしても配列[ ]で指定するとうまく動いてくれません。
配列を作らずfor文で無理やりセルを置換させるという荒業で解決しましたが時間がかかり過ぎて実用的でなく。
やりたいこと
table[[あ],[か],[さ],[た]...]
before[あ][い]...
after[ア][イ]...
以上の配列があり、
tableに対しbefore[i]を総当りで検索し一致したらafter[i]に置き換える。

911:デフォルトの名無しさん
23/02/20 18:43:52.85 czK6pNoa.net
>>910
やりたいことがいまいちわからん
こういうこと?
# ひらがなをカタカナに変換
table = [['あ','ア'], ['い','イ'], ['う','ウ'], ['え','エ'], ['お','オ'] ];
before = ['あ','い','う','え','お'];
after = before.map(b => table.find(a => b === a[0])[1]);

912:898
23/02/20 18:49:29.88 83YdaF3i.net
ありがとうございます。配列の中身は適当です…。
表と配列2種類の3つの要素があって、表にある配列1の要素を見つけたら配列2に置き換えるということをしたかったのです。
ですがお陰様でなんとかなりました!
二次元配列をflat()で一次元にして、splice使いました。
その後再度2次元配列に戻して元の形に直しました。

913:898
23/02/21 00:26:18.85 B3qxCQs3.net
>>911
mapメソッドはまだ理解できておらず…。
その一行で終わらせられるように勉強していきたいと思います。
結局以下のようになりました。ご教授ありがとうございました。
//1次元配列への変換。
let array = array.flat();
//array[x]とbefore[i]が一致したら置換(before→after)
for(let x = 0 ; x < array.length ; i++ ){
for(let i = 0 ; i < before.length ; i++ ){
if(array[x] == be[i]){
array.splice(x,1,after[i]);
}
}
//2次元配列に再変換、あとで貼付する。
let array2 = [];
let numOfElements = 6;//表の元のTableが6列あったので。
for(let t = 0; 0 < array.length ; t){
array2.push(array.splice( t, numOfElements ));
}

914:デフォルトの名無しさん
23/02/21 02:43:28.40 6tAoYaOK.net
>>913
flat使わなくてもいい
for(let i = 0; i< array.length; i++) {
for(let j = 0; j< array[i].length; j++) {
if(before.includes(array[i][j])) {
array[i][j] = after[before.indexOf(array[i][j])];
}
}
}
map使うなら
array2 = array.map(r => r.map(c => before.includes(c) ? after[before.indexOf(c)] : c));

915:898
23/02/21 08:58:31.52 B3qxCQs3.net
>>914
そのarray[i][j]の[j]を入れるとindexOfにしてもincludesにしてもうちの環境?では何故かエラー出て読み込めなかったんですよ。(
確かcannot read properties of undefinedだった筈)
それ外すとエラーなく読んだので仕方なくflat入れた次第です。
因みに
arrayX=array[x]
arrayY=array[y]
みたいに入れ子しても駄目でした。

916:898
23/02/21 09:10:16.56 B3qxCQs3.net
確認したらエラー全然違うし書いてること散々でした
訂正
出てたエラーは多分is not defined
下の入れ子は
arrayX=array[x]
arrayY=arrayX[y]
みたいにしても同じエラーだったかと。

917:デフォルトの名無しさん
23/02/21 23:07:45.74 6tAoYaOK.net
>>915
>そのarray[i][j]の[j]を入れるとindexOfにしてもincludesにしてもうちの環境?では何故かエラー出て
たぶん配列の添字が範囲外になってるんだろうけど
for文よりfor ofとかforEachのほうがシンプルにかける
const array2 = [];
for(let row of array) {
let cols = [];
for(let col of row) {
if(before.includes(col)) {
cols.push(after[before.indexOf(col)]);
}
else {
cols.push(col);
}
}
array2.push(cols);
}
const array2 = [];
array.forEach(function(row, i) {
row.forEach(function(col, j) {
if(before.includes(col)) {
array[i][j] = after[before.indexOf(col)];
}
});
});

918:デフォルトの名無しさん
23/02/21 23:08:33.93 6tAoYaOK.net
あと上のmapは省略しすぎてわかりにくかったのでアロー関数と三項演算子をやめたらこうなる
const array2 = array.map(function(row) {
return row.map(function(col) {
if(before.includes(col)) {
return after[before.indexOf(col)];
}
else {
return col;
}
});
});

919:898
23/02/22 11:50:37.27 7vReBJfV.net
>>917-918
何度もありがとうございます。
仰るとおり2度目の添字は一切読み込んでくれないので…
>>918のmap参考にしながら勉強させていただきます。
とりあえず長くなってしまったのでこの辺りで。また不具合出てきたら改めて質問したいと思います。
ありがとうございました!

920:デフォルトの名無しさん
23/02/28 21:38:42.26 8PRLUyLU.net
スプレッドシートの共有で閲覧権限を持っている人の
印刷は可能でファイルのダウンロードだけ禁止することは可能でしょうか?

921:デフォルトの名無しさん
23/03/01 10:13:26.28 NPxLOyBL.net
共有アイテムのファイルにスターをつける方法を教えてください
宜しくお願いしますm(_ _)m

922:デフォルトの名無しさん
23/03/01 14:17:21.21 csCK6+UB.net
sheetクラスを取得する方法ってgetSheetByNameとgetActiveSheetしかないよね?
getSheetBySheetIdがないのが謎なんだけどシートはシート名で管理するしかない?

923:914
23/03/12 00:26:03.80 ZZBXPzbK.net
>>921
自己解決しました

924:デフォルトの名無しさん
23/03/24 19:19:34.21 GCLzu5nr.net
Rangeオブジェクトから、セルアドレスの文字列を取得したい場合
Excelならr.Address()で相対参照や絶対参照を取得できますが
GASで同じようなことできるメソッドあります?
getA1Notation()だと相対アドレスでしか取得できないようで…

925:デフォルトの名無しさん
23/03/24 20:40:28.68 h6PMjTMa.net
>>924
よく分かってないけどそれ意味あるの?
ただの文字列なんだから相対も絶対もないような

926:デフォルトの名無しさん
23/03/25 11:52:56.28 TC3JXJ5y.net
>>925
例えば
A1のRangeオブジェクトから
$A$1という文字列を取得できないかなと
GASから条件付き書式を設定するのに使いたいです
なぜ使いたいかというと
複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうので
それを上書きリセットするためです
逆に、条件付書式だけロックかけて切り取ったり貼り付けたり出来ない設定ができるならそれで十分なのですが…

927:デフォルトの名無しさん
23/03/25 17:53:03.57 nYxwu6kr.net
>>926
>複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうのでそれを上書きリセットするためです
通常の書式ならonEditで変更されたセルの書式を変更するだけでいいけど
条件付き書式をGAS上で扱ったことなかったから調べたけどちょっと面倒だね
そんでよくよく考えてみたらそもそもGAS使うならonEditで書式変更すればいいだけだから条件付き書式を使う必要がないと思った

928:デフォルトの名無しさん
23/04/04 12:37:38.49 dAPefWGR.net
スプレッドシートにスクリプト作成して権限付与して動作するように設定したあと
そのスプレッドシートをコピーするとスクリプトもコピーされるようですが
スクリプトの権限やトリガーは設定しなおしが必要のようです。
イメージ的には、vba付のExcelをコピーして別ファイルとして保存して
毎月のデータを作成していく、みたいなことがしたいんですが
その辺コピーするだけで全部引き継がれるみたいな設定ないのでしょうか?

929:デフォルトの名無しさん
23/04/11 18:45:08.89 u8YBlLPL.net
類似画像を判別できるようなライブラリとか公開されてるコードありますか?
検索するとpythonだとImageHashってライブラリがあるんだけどGASで同じようなことしたい

930:デフォルトの名無しさん
23/04/21 16:25:28.26 vnxhj4My.net
ごめんgoogleスプレッドシートの質問スレがみつからずこちらで質問させてください。

シートのある列をユーザーごとの閲覧を制限かけたい
有効な方法ありますか?

931:デフォルトの名無しさん
23/04/21 16:53:56.40 8VcMj5ya.net
閲覧の制限はファイル単位でしか出来ないでしょ
シート、セル(列/行)単位は編集の制限しか出来ない

932:デフォルトの名無しさん
23/04/21 17:40:05.18 vnxhj4My.net
ありがとうございます。
確かに「表示」→「保護されている範囲」でできそうだったけど。やっぱりだめでした。
諦めて、もう一つリンクしたファイルのシート作ってそちらに閲覧されたくない列を追加します。

933:デフォルトの名無しさん
23/05/02 21:52:22.95 39G20EoK.net
Googleカレンダーに予定を追加するプログラムを使ってるんだけど、「場所を追加」ちゃんと場所を追加したいです

以下詳細

普通に手作業でGoogleカレンダーに予定を追加するときは、「場所を追加」に場所の名前を入力すると候補が出てきて、そこから選ぶと、そこに間に合うためには何時に家を出ればいいかの通知が来たり、Android版のGoogleカレンダーだと予定の背景がその場所の写真になったりします。

で、GASで予定を追加するとき、場所を指定するためにGoogleマップのURLを使ってるんだけど、それだとURLが表示されるのみで、上記の通知とか背景写真とかが実行されません。
公式ドキュメントでも {location: 'Conference Room'}とされており、Googleマップ上の場所を使う気がなさそうです。

ちゃんとした「場所の追加」は、ウェブ上でマウスで操作しないとできないのでしょうか?

934:デフォルトの名無しさん
23/05/03 00:25:10.26 2fvruydV.net
>>933
URLじゃなくてその場所の名前か住所、もしくは緯度経度を入れればいいんじゃないの?

935:デフォルトの名無しさん
23/05/03 03:09:39.55 CT7gAj9T.net
>>934
それが名前や住所を入れても、その文字列が表示されるだけのようです
こんな感じ
URLリンク(i.imgur.com)
ブラウザかアプリで場所を選択した時には場所と認識されるのか、こう表示されます
URLリンク(i.imgur.com)

936:デフォルトの名無しさん
23/05/16 22:03:10.90 9Kd/3stA.net
ゲッ!!(/||| ̄▽)y-ξ⌒◇ヾ( ̄  ̄;)ジュッ

937:デフォルトの名無しさん
23/07/08 12:42:20.50 CwJ0Byq0.net
質問させてください
Googleフォームの送信時イベントで入力された値を取るために
イベントを作成しましたが、どうしてもイベントパラメータがnullになってしまいます
Webページにあるサンプルではeからいろいろな情報が取れるように書かれているのですが、nullとなってしまう理由がわからずに困っています
function myFunction(e) {
Logger.log("myFunction start")
Logger.log(e)
}
— ログ
12:27:10 お知らせ 実行開始
12:27:10 情報 myFunction start
12:27:10 情報 null
12:27:10 お知らせ 実行完了

938:デフォルトの名無しさん
23/07/08 17:00:03.61 IeBiUrvH.net
>>937
トリガーの設定してる?

939:デフォルトの名無しさん
23/08/22 23:04:26.43 +ZplHR9+.net
GASではなく、スプレッドシートの質問なのですが、もし適切なスレッドがあったら誘導お願いします
セルに例えば「130409.67」と入力し、
表示形式>数字>通貨(端数切り捨て)
に設定すると、小数点以下が切り捨てではなく四捨五入されてしまいます。
これはなにか私の使い方がおかしいのでしょうか?
また、他の方法でも良いので、内部的には小数点を保持しつつ、表示上だけ小数点以下を切り捨てる(非表示)する方法があれば教えてください。宜しくお願いします。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch