質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1032閲覧

【GAS】doPost 日本語が取得できない【Excel VBA】

lazyAnt

総合スコア12

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

0クリップ

投稿2018/10/23 05:39

当方、VBAとGASを勉強中の身のものです。
つたない説明でわかりづらい部分もあると思いますがご教示願います。

業務でIEでないと動作しないWEBシステムを使用しており
システムからデータをコピペすることが多々発生していたので
下記等を参考にしながらExcelVBAでスクレイピングができるようにしました。
https://tonari-it.com/ie-setting-navigate/

すると一部の部署から
スクレイピングしたデータをGoogleスプレッドシートへ自動で入力できないかと言われ
下記の過去記事を参考にしスプレッドシートへ転記する流れはでき、
半角英数字に関しては問題なく転記することもできました。

しかし下記コードで param2 に格納している日本語だけ空値になってしまいました。
日本語と半角英数字を混在させると日本語のみ認識されず
「1あ2」と入れると「12」とスプレッドシート上では値が貼り付けられてしまいました。

GAS側で e のcontentLength では日本語の分もカウントしているようではあるのですが
parameterを見るとやはり日本語だけ認識されていない状態になっていました。

日本語の処理に関して記述している記事などが見つからずご質問をさせていただいています。
そもそも日本語は処理できないものなのでしょうか?それすらもわからないので
諦めようにも諦められない状況です。
それか他に何か良い方法があればご教示いただきたいのでよろしくお願いいたします。

【VBA】【GAS】VBAで送信し、webアプリケーションで処理させたい。

作成したサンプルコードは下記になります。

ExcelVBA

1Public Sub html_post() 2 3' 参照設定 4' Microsoft XML, v6.0 5 6 Dim httpReq As XMLHTTP60 7 Set httpReq = New XMLHTTP60 8 Dim param As Variant 9 Dim url As String 10 url = "ウェブ アプリケーションの URL" 11 12 With httpReq 13 .Open "POST", url, False 14 Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 15 param = _ 16 "param1=" & "TEST&" & _ 17 "param2=" & "テスト&" & _ 18 "param3=" & "123&" 19 .send (param) 20 End With 21 Set httpReq = Nothing 22End Sub 23

GAS

1function doPost(e) { 2 var Id = 'スプレッドシートID'; 3 var ss = SpreadsheetApp.openById(Id); 4 var sh = ss.getSheetByName('log'); 5 var maxRow = sh.getRange('A:A').getValues().filter(String).length + 1; 6 try { 7 var params = e.parameter 8 var ADD_LIST = [[ 9 params.param1, 10 params.param2, 11 params.param3 12 ]]; 13 14 sh.getRange(maxRow,1,ADD_LIST.length,ADD_LIST[0].length).setValues(ADD_LIST); 15 } catch(ex) { 16 sh.getRange(maxRow, 1).setValue('error'); 17 } 18}
papinianus👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

仕様を見た訳ではないですが、encodeだろうなーと思ってやってみました。

同じ問題を再現したうえで、下記のような手当をしたところ、「テスト」が書かれるようになりました。

vba

1Public Sub html_post() 2 3' 参照設定 4' Microsoft XML, v6.0 5 6 Dim httpReq As XMLHTTP60 7 Set httpReq = New XMLHTTP60 8 Dim param As Variant 9 Dim url As String 10 url = "ウェブ アプリケーションの URL" 11 12 ' encodeUrl 13 Dim objSC As Object 14 Dim encodeUrlUtf8 As String 15 Set objSC = CreateObject("ScriptControl") 16 objSC.Language = "Jscript" 17 encodeUrlUtf8 = objSC.CodeObject.encodeURIComponent("テスト") 18 Set objSC = Nothing 19 20 21 With httpReq 22 .Open "POST", url, False 23 Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 24 param = _ 25 "param1=" & "TEST&" & _ 26 "param2=" & encodeUrlUtf8 & "&" & _ 27 "param3=" & "123&" 28 .send (param) 29 End With 30 Set httpReq = Nothing 31End Sub

投稿2018/10/24 02:28

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lazyAnt

2018/10/24 02:42

おっしゃる通りにやってみたところ無事転記ができました!! こんなに早くご返信していただきありがとうございます! Excel側でencodeをこのように変換する方法初めて知りました GAS側の部分ばかり調べていましたのでわからなかったはずです。 関数化して私用させていただきたいと思います。 ありがとうございました!
papinianus

2018/10/24 02:52

> GAS側の部分ばかり調べていましたのでわからなかったはずです。 chromeのアプリ(拡張機能)で、postを手動作成できるツールがあって(例えばPOSTMAN)、そういうのでチェックすると、GAS(受け手)なのか、VBA(送り手)なのか、問題の切り分けができます。私自身、postmanでいけたので、VBAでencodeURIをやってみるかなーと思いました。
lazyAnt

2018/11/14 08:29

ご返信遅くなってしまいすみません! postman ですが、こちらも知りませんでした。。。 デベロッパーツールも使ったことがないのでこれを機に使用し始めてみます^^ とりあえずpostmanの使い方を調べつつインストールしてみます! 回答だけでなくアドバイスもいただき本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問