Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отправка таблицы с данными в Телеграм - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отправка таблицы с данными в Телеграм (Макросы/Sub)
Отправка таблицы с данными в Телеграм
lanitfin Дата: Понедельник, 17.05.2021, 13:17 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

Добрый день, эксперты!

Подскажите, пожалуйста, как- то можно отправить через Excel(VBA) таблицу с данными. То есть, к примеру, у меня есть таблица c данными на листе в ячейках B38:J39.
Эту таблицу хотелось бы отправить в телеграм. Вижу пока только два варианта: отправка каждой строки в отдельном сообщении, где построчно будут данные из столбцов каждой строки; Либо отдельным макросом сначала формировать скриншот этого диапазона, отправлять его картинкой и удалять этот скриншот.
Собрал вот такой код, он рабочий, но он отправляет данные только из одной ячейки, и если в ячейке есть переносы на другую строку, то текст всё равно приходит в "слипшимся" виде(т.е. без переносов):
[vba]
Код

Function RussianStringToURLEncode_New(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: t = "%" & Hex(AscW(l) \ 64 \ 64 + 224) & "%" & Hex(AscW(l) \ 64) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case 32: t = "%20"
            Case Else: t = l
        End Select
        RussianStringToURLEncode_New = RussianStringToURLEncode_New & t
    Next
End Function


Sub MessegeToTelegram1()
    Dim Token As String, ChatID As String, message As String, strPhoto As String
    Dim sURL As String, oHttp As Object, sHTML As String
    message = RussianStringToURLEncode_New(Range("B38").Text) ' отправляется текст из ячейки B34
    'message = RussianStringToURLEncode_New(Range("B38").Text)
    'strPhoto = ConvertFileToBase64("C:\Users\.........\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
    Token = "......:........"
    ChatID = "............."
    sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
End Sub
[/vba]

Вообще возможно, чтобы в телеграм сообщение приходило построчно, т.е. одна ячейка= одна строка:
Первое сообщение:
Первая строка: данные из ячейки B38
Вторая строка: данные из ячейки С38
.
.
.
Последняя строка: данные из ячейки J38

Второе сообщение:
Первая строка: данные из ячейки B39
Вторая строка: данные из ячейки С39
.
.
.
Последняя строка: данные из ячейки J39
и т.д.

Не совсем еще представляю как это реально будет выглядеть и "удобочитаемо" ли это будет, по-этому еще пытался сделать отправку скришота таблицы в JPG, но тут так и не понял как правильно отправить файл с локального диска.

Прошу подсказать, где я допускаю ошибку.

Заранее спасибо. :help:
К сообщению приложен файл: _____.xlsm(22.1 Kb)
 
Ответить
СообщениеДобрый день, эксперты!

Подскажите, пожалуйста, как- то можно отправить через Excel(VBA) таблицу с данными. То есть, к примеру, у меня есть таблица c данными на листе в ячейках B38:J39.
Эту таблицу хотелось бы отправить в телеграм. Вижу пока только два варианта: отправка каждой строки в отдельном сообщении, где построчно будут данные из столбцов каждой строки; Либо отдельным макросом сначала формировать скриншот этого диапазона, отправлять его картинкой и удалять этот скриншот.
Собрал вот такой код, он рабочий, но он отправляет данные только из одной ячейки, и если в ячейке есть переносы на другую строку, то текст всё равно приходит в "слипшимся" виде(т.е. без переносов):
[vba]
Код

Function RussianStringToURLEncode_New(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: t = "%" & Hex(AscW(l) \ 64 \ 64 + 224) & "%" & Hex(AscW(l) \ 64) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case 32: t = "%20"
            Case Else: t = l
        End Select
        RussianStringToURLEncode_New = RussianStringToURLEncode_New & t
    Next
End Function


Sub MessegeToTelegram1()
    Dim Token As String, ChatID As String, message As String, strPhoto As String
    Dim sURL As String, oHttp As Object, sHTML As String
    message = RussianStringToURLEncode_New(Range("B38").Text) ' отправляется текст из ячейки B34
    'message = RussianStringToURLEncode_New(Range("B38").Text)
    'strPhoto = ConvertFileToBase64("C:\Users\.........\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
    Token = "......:........"
    ChatID = "............."
    sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
End Sub
[/vba]

Вообще возможно, чтобы в телеграм сообщение приходило построчно, т.е. одна ячейка= одна строка:
Первое сообщение:
Первая строка: данные из ячейки B38
Вторая строка: данные из ячейки С38
.
.
.
Последняя строка: данные из ячейки J38

Второе сообщение:
Первая строка: данные из ячейки B39
Вторая строка: данные из ячейки С39
.
.
.
Последняя строка: данные из ячейки J39
и т.д.

Не совсем еще представляю как это реально будет выглядеть и "удобочитаемо" ли это будет, по-этому еще пытался сделать отправку скришота таблицы в JPG, но тут так и не понял как правильно отправить файл с локального диска.

Прошу подсказать, где я допускаю ошибку.

Заранее спасибо. :help:

Автор - lanitfin
Дата добавления - 17.05.2021 в 13:17
lanitfin Дата: Среда, 19.05.2021, 13:38 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

Добрый день! Тут есть решение какое- то?
 
Ответить
СообщениеДобрый день! Тут есть решение какое- то?

Автор - lanitfin
Дата добавления - 19.05.2021 в 13:38
doober Дата: Среда, 19.05.2021, 20:00 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 753
Репутация: 286 ±
Замечаний: 0% ±

Excel 2010
Чтобы понимал бот html, надо ему это указать
sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message
sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"


 
Ответить
СообщениеЧтобы понимал бот html, надо ему это указать
sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message
sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"

Автор - doober
Дата добавления - 19.05.2021 в 20:00
lanitfin Дата: Четверг, 20.05.2021, 14:20 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

не совсем понимаю что мне это даст.
добавил "&parse_mode=HTML" , но ничего не поменялось.


Сообщение отредактировал Serge_007 - Четверг, 20.05.2021, 14:47
 
Ответить
Сообщениене совсем понимаю что мне это даст.
добавил "&parse_mode=HTML" , но ничего не поменялось.

Автор - lanitfin
Дата добавления - 20.05.2021 в 14:20
doober Дата: Четверг, 20.05.2021, 21:40 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 753
Репутация: 286 ±
Замечаний: 0% ±

Excel 2010
Надо текст формировать в формате html, и тогда можно делать любую разметку.
Таблицу и т.д. оправить


 
Ответить
СообщениеНадо текст формировать в формате html, и тогда можно делать любую разметку.
Таблицу и т.д. оправить

Автор - doober
Дата добавления - 20.05.2021 в 21:40
lanitfin Дата: Пятница, 21.05.2021, 09:48 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

doober, у меня не получается, или до меня не доходит=) у меня еще не такой продвинутый уровень VBA.
можете в коде показать, что нужно добавить/изменить?
 
Ответить
Сообщениеdoober, у меня не получается, или до меня не доходит=) у меня еще не такой продвинутый уровень VBA.
можете в коде показать, что нужно добавить/изменить?

Автор - lanitfin
Дата добавления - 21.05.2021 в 09:48
doober Дата: Воскресенье, 23.05.2021, 21:12 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 753
Репутация: 286 ±
Замечаний: 0% ±

Excel 2010
Отправляемый текст
Message = "B38\tС38\nB39\tС39\nJ38\n\n<a href=""http://www.excelworld.ru/forum/10-47549-1"">ссылка на эту тему</a>"
Результат




Сообщение отредактировал doober - Воскресенье, 23.05.2021, 21:13
 
Ответить
СообщениеОтправляемый текст
Message = "B38\tС38\nB39\tС39\nJ38\n\n<a href=""http://www.excelworld.ru/forum/10-47549-1"">ссылка на эту тему</a>"
Результат

Автор - doober
Дата добавления - 23.05.2021 в 21:12
lanitfin Дата: Понедельник, 24.05.2021, 10:25 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

doober, у нас с Вами могут отличаться версии Excel?

Копирую полностью Вашу строку и получаю:


во-первых Кириллица отображается как "????"
во-вторых: почему - то нет ни пробелов, ни переносов. И указываются не значения ячеек, а адрес ячейки. У Вас тоже приходят адреса ячеек, а не значения ячеек.

Ссылка работает, но замысел был в том, чтобы сриншот/таблица/документ выгружался с локального компьютера.
 
Ответить
Сообщениеdoober, у нас с Вами могут отличаться версии Excel?

Копирую полностью Вашу строку и получаю:


во-первых Кириллица отображается как "????"
во-вторых: почему - то нет ни пробелов, ни переносов. И указываются не значения ячеек, а адрес ячейки. У Вас тоже приходят адреса ячеек, а не значения ячеек.

Ссылка работает, но замысел был в том, чтобы сриншот/таблица/документ выгружался с локального компьютера.

Автор - lanitfin
Дата добавления - 24.05.2021 в 10:25
Serge_007 Дата: Понедельник, 24.05.2021, 10:26 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 14156
Репутация: 2341 ±
Замечаний: ±

Excel 2010
Кириллица отображается как "????"
Копируйте в русской раскладке, а не в ENG


Яндекс-деньги:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Кириллица отображается как "????"
Копируйте в русской раскладке, а не в ENG

Автор - Serge_007
Дата добавления - 24.05.2021 в 10:26
doober Дата: Понедельник, 24.05.2021, 16:00 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 753
Репутация: 286 ±
Замечаний: 0% ±

Excel 2010
И указываются не значения ячеек, а адрес ячейки

А что, у меня есть файл ваш?
Я для примера показал, как перенос, как ссылку вставлять


 
Ответить
Сообщение
И указываются не значения ячеек, а адрес ячейки

А что, у меня есть файл ваш?
Я для примера показал, как перенос, как ссылку вставлять

Автор - doober
Дата добавления - 24.05.2021 в 16:00
lanitfin Дата: Вторник, 25.05.2021, 09:07 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

doober, Я же прикрепил файл к первому сообщению.
Перенос не срабатывает по какой- то причине.
 
Ответить
Сообщениеdoober, Я же прикрепил файл к первому сообщению.
Перенос не срабатывает по какой- то причине.

Автор - lanitfin
Дата добавления - 25.05.2021 в 09:07
doober Дата: Вторник, 25.05.2021, 11:04 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 753
Репутация: 286 ±
Замечаний: 0% ±

Excel 2010
Ваш файл и результат
Перекодировка немного кривая была, добавил табуляцию и перенос строки в перекодировку для упрощения набора сообщения.
К сообщению приложен файл: 4516782.xlsm(22.0 Kb) · 4187141.png(18.4 Kb)


 
Ответить
СообщениеВаш файл и результат
Перекодировка немного кривая была, добавил табуляцию и перенос строки в перекодировку для упрощения набора сообщения.

Автор - doober
Дата добавления - 25.05.2021 в 11:04
lanitfin Дата: Вторник, 25.05.2021, 16:13 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 20% ±

doober, да, работает. Спасибо. коды еще пока не сравнивал.

Подскажите, пожалуйста, правильно ли я делаю построчные сообщения(каждое сообщение- отдельная строка):
[vba]
Код

Sub MessegeToTelegram1()
    Dim Token As String, ChatID As String, message As String, strPhoto As String
    Dim sURL As String, oHttp As Object, sHTML As String
    ' первая строка
                message = Range("B38").Text & "\t" & _
                    " " & Range("j38").Text & "\t" & _
                   " (" & Range("I38").Text & ")" & "\n" & _
            "ИМЯ: " & Range("C38").Text & "\t" & _
                           Range("D38").Text & "\n" & _
          "слово: " & Range("F38").Text & "\n" & _
           "ключ: " & Range("G38").Text & "\n" & _
                           Range("K38").Text & "\n" & _
           "тема: " & Range("H38").Text
  
    'strPhoto = ConvertFileToBase64("C:\Users\.....\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
     message = URLEncode(message)
    Token = ".................."
    ChatID = "......................."
  sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
    
    ' Вторая строка
    message = Range("B39").Text & "\t" & _
                    " " & Range("j39").Text & "\t" & _
                   " (" & Range("I39").Text & ")" & "\n" & _
            "ИМЯ: " & Range("C39").Text & "\t" & _
                           Range("D39").Text & "\n" & _
         "Слово: " & Range("F39").Text & "\n" & _
          "Ключ: " & Range("G39").Text & "\n" & _
                          Range("K39").Text & "\n" & _
         "ТЕМА: " & Range("H39").Text
  
    'strPhoto = ConvertFileToBase64("C:\Users\.....\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
     message = URLEncode(message)
    Token = "............."
    ChatID = "................."
  sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
    
    ' Третья строка- пустая
    message = Range("B39").Text & "\t" & _
                    " " & Range("j40").Text & "\t" & _
                   " (" & Range("I40").Text & ")" & "\n" & _
            "ИМЯ: " & Range("C40").Text & "\t" & _
                          Range("D40").Text & "\n" & _
        "Слово: " & Range("F40").Text & "\n" & _
          "ключ: " & Range("G40").Text & "\n" & _
                          Range("K40").Text & "\n" & _
          "тема: " & Range("H40").Text
  
    'strPhoto = ConvertFileToBase64("C:\Users\.....\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
     message = URLEncode(message)
    Token = "...................."
    ChatID = "..........."
  sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
    
End Sub
[/vba]

Что можно предпринять, чтобы не отправлялась строка(строки), где ячейки пустые. То есть, к примеру, диапозон таблицы B38:J45, сообщения отправляются построчно, но начиная со строки 42 данных в строках нет, и сообщения отправляться не должны.
 
Ответить
Сообщениеdoober, да, работает. Спасибо. коды еще пока не сравнивал.

Подскажите, пожалуйста, правильно ли я делаю построчные сообщения(каждое сообщение- отдельная строка):
[vba]
Код

Sub MessegeToTelegram1()
    Dim Token As String, ChatID As String, message As String, strPhoto As String
    Dim sURL As String, oHttp As Object, sHTML As String
    ' первая строка
                message = Range("B38").Text & "\t" & _
                    " " & Range("j38").Text & "\t" & _
                   " (" & Range("I38").Text & ")" & "\n" & _
            "ИМЯ: " & Range("C38").Text & "\t" & _
                           Range("D38").Text & "\n" & _
          "слово: " & Range("F38").Text & "\n" & _
           "ключ: " & Range("G38").Text & "\n" & _
                           Range("K38").Text & "\n" & _
           "тема: " & Range("H38").Text
  
    'strPhoto = ConvertFileToBase64("C:\Users\.....\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
     message = URLEncode(message)
    Token = ".................."
    ChatID = "......................."
  sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
    
    ' Вторая строка
    message = Range("B39").Text & "\t" & _
                    " " & Range("j39").Text & "\t" & _
                   " (" & Range("I39").Text & ")" & "\n" & _
            "ИМЯ: " & Range("C39").Text & "\t" & _
                           Range("D39").Text & "\n" & _
         "Слово: " & Range("F39").Text & "\n" & _
          "Ключ: " & Range("G39").Text & "\n" & _
                          Range("K39").Text & "\n" & _
         "ТЕМА: " & Range("H39").Text
  
    'strPhoto = ConvertFileToBase64("C:\Users\.....\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
     message = URLEncode(message)
    Token = "............."
    ChatID = "................."
  sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
    
    ' Третья строка- пустая
    message = Range("B39").Text & "\t" & _
                    " " & Range("j40").Text & "\t" & _
                   " (" & Range("I40").Text & ")" & "\n" & _
            "ИМЯ: " & Range("C40").Text & "\t" & _
                          Range("D40").Text & "\n" & _
        "Слово: " & Range("F40").Text & "\n" & _
          "ключ: " & Range("G40").Text & "\n" & _
                          Range("K40").Text & "\n" & _
          "тема: " & Range("H40").Text
  
    'strPhoto = ConvertFileToBase64("C:\Users\.....\Desktop\12.jpg")
    'strPhoto = "C:\Users\.......\Desktop\12.jpg"
     message = URLEncode(message)
    Token = "...................."
    ChatID = "..........."
  sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & "&parse_mode=HTML"
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.Send
    Set oHttp = Nothing
    
End Sub
[/vba]

Что можно предпринять, чтобы не отправлялась строка(строки), где ячейки пустые. То есть, к примеру, диапозон таблицы B38:J45, сообщения отправляются построчно, но начиная со строки 42 данных в строках нет, и сообщения отправляться не должны.

Автор - lanitfin
Дата добавления - 25.05.2021 в 16:13
doober Дата: Вторник, 25.05.2021, 20:39 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 753
Репутация: 286 ±
Замечаний: 0% ±

Excel 2010
Диапазон в массив, в цикле формируете сообщение.При пустом значении пропускаете формирование сообщения


 
Ответить
СообщениеДиапазон в массив, в цикле формируете сообщение.При пустом значении пропускаете формирование сообщения

Автор - doober
Дата добавления - 25.05.2021 в 20:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отправка таблицы с данными в Телеграм (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования Jobsora jooble
© 2010-2021 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!