Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Google-таблица не реагирует на excel-ий макрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1903
Здравствуйте!

Есть Google-таблица. Есть excel-ий файл с макросом, который отправляет запрос в Google-таблицу и получает результат.
+VBA
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
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-ий макрос? Как правильно написать?
5 сен 19, 21:53    [21964943]     Ответить | Цитировать Сообщить модератору
 Re: Google-таблица не реагирует на excel-ий макрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1903
В браузере нормально заходишь на Google-страницу, а также можно вводить в адресной строке тот URL, который выдает Debug.Print, и Google-таблица реагирует. Может быть такое, что Google забанил именно подключение от стороннего приложения как Excel с VBA?
6 сен 19, 11:27    [21965190]     Ответить | Цитировать Сообщить модератору
 Re: Google-таблица не реагирует на excel-ий макрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1903
А если так написать в макросе
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
'Set httpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")   
То в окне "Watches" объект httpRequestка отображает такие значения:
- readyState = 4
- status = 0
- statusText = ""
8 сен 19, 13:49    [21966282]     Ответить | Цитировать Сообщить модератору
 Re: Google-таблица не реагирует на excel-ий макрос  [new]
exp98
Member

Откуда:
Сообщений: 1791
ferzmikk, я не знаток хттп. Скоко-то лет назад сделал простую страницу с яваскриптом, получающую значение с сервака через XMLHttpRequest.
+
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. Совсем не помню что это.
10 сен 19, 19:08    [21968054]     Ответить | Цитировать Сообщить модератору
 Re: Google-таблица не реагирует на excel-ий макрос  [new]
VSVLAD
Member

Откуда: Краснодар
Сообщений: 1314
exp98,

Это синхронный или асинхронный запрос. В данном случае синхронный
13 сен 19, 15:38    [21970482]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить