Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Google-таблица не реагирует на excel-ий макрос / 5 сообщений из 5, страница 1 из 1
05.09.2019, 21:53
    #39858153
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Google-таблица не реагирует на excel-ий макрос
Здравствуйте!

Есть Google-таблица. Есть excel-ий файл с макросом, который отправляет запрос в Google-таблицу и получает результат.
VBA
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub sendGET()
    Dim httpRequest As Object
    Dim URL As String
    
    Const webAppId As String = "aaa" 'Id веб-приложения
        
    URL = "https://script.google.com/macros/s/" & webAppId & "/exec" _
        & "?row=" & EncodeUriComponent("Текст1") _
        & "&row=" & EncodeUriComponent("Текст1") _
        & "&row=" & EncodeUriComponent("Текст1")    
    
    Debug.Print URL

    'Set httpRequest = CreateObject("MSXML2.XMLHTTP")
    Set httpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")    
        
    httpRequest.Open "GET", URL, False, "xxx", "yyy"    
    httpRequest.send   
End Sub

Google Apps Script
Код: javascript
1.
2.
3.
4.
5.
6.
7.
function doGet(e){  
  console.log("doGet среагировал");
}

function doPost(e){
  console.log("doPost среагировал");  
}


Если запустить макрос, то Google-таблица не реагирует. В "G Suite Developer" - "Мои выполнения" не появляется строка, что запустилась. А в окне "Watches" объект httpRequestка отображает такие значения:
- readyState = 4
- status = 200
- statusText = "ОК"

Если ввести полученную строку (от Debug.Print URL ) в адресной строке браузера, то пишет что "Скрипт был выполнен, но ничего не возвратил." То есть Google-таблица реагирует. В "G Suite Developer" - "Мои выполнения" появляется строка, что запустилась.

Почему Google-таблица не реагирует на excel-ий макрос? Как правильно написать?
...
Рейтинг: 0 / 0
06.09.2019, 11:27
    #39858326
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Google-таблица не реагирует на excel-ий макрос
В браузере нормально заходишь на Google-страницу, а также можно вводить в адресной строке тот URL, который выдает Debug.Print , и Google-таблица реагирует. Может быть такое, что Google забанил именно подключение от стороннего приложения как Excel с VBA?
...
Рейтинг: 0 / 0
08.09.2019, 13:49
    #39858968
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Google-таблица не реагирует на excel-ий макрос
А если так написать в макросе
Код: vbnet
1.
2.
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
'Set httpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")   

То в окне "Watches" объект httpRequestка отображает такие значения:
- readyState = 4
- status = 0
- statusText = ""
...
Рейтинг: 0 / 0
10.09.2019, 19:08
    #39860013
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Google-таблица не реагирует на excel-ий макрос
ferzmikk, я не знаток хттп. Скоко-то лет назад сделал простую страницу с яваскриптом, получающую значение с сервака через XMLHttpRequest.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
function procGeTtotal() {
    syba= 0;
    // Шлём GET-запрос 
    cnt= Math.random();
    requedata(cnt);
}//end sub
//----------------------------

function requedata(par1) {
	loadXMLDoc('/'+reqall + par1);
}//endsub
//----------------------------

function loadXMLDoc(url) {
try{    
    if (window.XMLHttpRequest) {
        reque = new XMLHttpRequest();
        reque.onreadystatechange = procRequeStateChange;
        reque.open("GET", url, true);
        reque.send(null);

    } else if (window.ActiveXObject) {	// для IE 5.0
        reque= new ActiveXObject("Microsoft.XMLHTTP");
   ......................................
} catch(DOMException) {
}//endtry
}//endsub
//----------------------------

function procRequeStateChange() {
    // Получаем ответ
try{
    pFrm1.state.value = stat(reque.readyState); 
} catch(TypeError) {
} finally {
    if (reque.readyState == 4) {
        // only if "OK"
        if (reque.status == 200) {
            var ss= reque.responseText;
	    pFrm1.Respon.value= procParsXML(ss);
        } else {
            pFrm1.Respon.value= '---';
	    alert("Запрошенные данные не получены:\n" +reque.readyState + reque.status + reque.statusText.Length, 3000);
        }//endif

    }//endif
}//endtry
}//endsub
//----------------------------


У меня отличия от твоего выделил жирным.
reque.onreadystatechange = procRequeStateChange;
reque.open("GET", url, true );

Суть была в чём?
1) Что статус якобы последовательно может проходить значения, прежде чем примет статус=4 (ОК). Поэтому сначала надо было его дождаться, а потом только получить
reque.open("GET", url, true);
2) в строке open() стоит true. В твоём случае false. Совсем не помню что это.
...
Рейтинг: 0 / 0
13.09.2019, 15:38
    #39861618
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Google-таблица не реагирует на excel-ий макрос
exp98,

Это синхронный или асинхронный запрос. В данном случае синхронный
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Google-таблица не реагирует на excel-ий макрос / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]