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

Вход

Регистрация

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

 

= Мир MS Excel/Формирование QR-кода в эксель - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Формирование QR-кода в эксель (Макросы/Sub)
Формирование QR-кода в эксель
Wind Дата: Четверг, 18.12.2014, 17:31 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Кто-нибудь занимался вопросом формирования qr в Excel? У меня на данный момент задача сделать хотя бы онлайн формирование, используя какой нибудь интернет ресурс.
Из того что нашел, это сервер для перегона небольшого текста в qr-код используя ресурс google по адресу: https://developers.google.com/chart/infographics/docs/qr_codes

Сам код программы тоже нашел в инете:
[vba]
Код
Function URL_QRCode_SERIES( _
       ByVal PictureName As String, _
       ByVal QR_Value As String, _
       Optional ByVal PictureSize As Long = 150, _
       Optional ByVal DisplayText As String = "", _
       Optional ByVal Updateable As Boolean = True) As Variant

Dim oPic As Shape, oRng As Excel.Range
Dim vLeft As Variant, vTop As Variant
Dim sURL As String

Const sRootURL As String = "https://chart.googleapis.com/chart?"
Const sSizeParameter As String = "chs="
Const sTypeChart As String = "cht=qr"
Const sDataParameter As String = "chl="
Const sJoinCHR As String = "&"

If Updateable = False Then
       URL_QRCode_SERIES = "outdated"
       Exit Function
End If

Set oRng = Application.Caller.Offset(, 1)
On Error Resume Next
Set oPic = oRng.Parent.Shapes(PictureName)
If Err Then
       Err.Clear
       vLeft = oRng.Left + 4
       vTop = oRng.Top
Else
       vLeft = oPic.Left
       vTop = oPic.Top
       PictureSize = Int(oPic.Width)
       oPic.Delete
End If
On Error GoTo 0

If Len(QR_Value) = 0 Then
       URL_QRCode_SERIES = CVErr(xlErrValue)
       Exit Function
End If

sURL = sRootURL & _
          sSizeParameter & PictureSize & "x" & PictureSize & sJoinCHR & _
          sTypeChart & sJoinCHR & _
          sDataParameter & UTF8_URL_Encode(VBA.Replace(QR_Value, " ", "+"))

Set oPic = oRng.Parent.Shapes.AddPicture(sURL, True, True, vLeft, vTop, PictureSize, PictureSize)
oPic.Name = PictureName
URL_QRCode_SERIES = DisplayText
End Function
[/vba]

Но вот возникла проблема, передавая на этот ресурс через адресную строку, у меня возникает ограничение что то около 350 символов. В описании данного ресурса, сказано что можно использовать метод POST-запроса, но я с таким методом не знаком, и тем более не знаю как это реализовать в vba. Может кто окажет консультацию.
Заранее благодарен за любой совет!


Сообщение отредактировал Wind - Четверг, 18.12.2014, 17:33
 
Ответить
СообщениеДобрый день!
Кто-нибудь занимался вопросом формирования qr в Excel? У меня на данный момент задача сделать хотя бы онлайн формирование, используя какой нибудь интернет ресурс.
Из того что нашел, это сервер для перегона небольшого текста в qr-код используя ресурс google по адресу: https://developers.google.com/chart/infographics/docs/qr_codes

Сам код программы тоже нашел в инете:
[vba]
Код
Function URL_QRCode_SERIES( _
       ByVal PictureName As String, _
       ByVal QR_Value As String, _
       Optional ByVal PictureSize As Long = 150, _
       Optional ByVal DisplayText As String = "", _
       Optional ByVal Updateable As Boolean = True) As Variant

Dim oPic As Shape, oRng As Excel.Range
Dim vLeft As Variant, vTop As Variant
Dim sURL As String

Const sRootURL As String = "https://chart.googleapis.com/chart?"
Const sSizeParameter As String = "chs="
Const sTypeChart As String = "cht=qr"
Const sDataParameter As String = "chl="
Const sJoinCHR As String = "&"

If Updateable = False Then
       URL_QRCode_SERIES = "outdated"
       Exit Function
End If

Set oRng = Application.Caller.Offset(, 1)
On Error Resume Next
Set oPic = oRng.Parent.Shapes(PictureName)
If Err Then
       Err.Clear
       vLeft = oRng.Left + 4
       vTop = oRng.Top
Else
       vLeft = oPic.Left
       vTop = oPic.Top
       PictureSize = Int(oPic.Width)
       oPic.Delete
End If
On Error GoTo 0

If Len(QR_Value) = 0 Then
       URL_QRCode_SERIES = CVErr(xlErrValue)
       Exit Function
End If

sURL = sRootURL & _
          sSizeParameter & PictureSize & "x" & PictureSize & sJoinCHR & _
          sTypeChart & sJoinCHR & _
          sDataParameter & UTF8_URL_Encode(VBA.Replace(QR_Value, " ", "+"))

Set oPic = oRng.Parent.Shapes.AddPicture(sURL, True, True, vLeft, vTop, PictureSize, PictureSize)
oPic.Name = PictureName
URL_QRCode_SERIES = DisplayText
End Function
[/vba]

Но вот возникла проблема, передавая на этот ресурс через адресную строку, у меня возникает ограничение что то около 350 символов. В описании данного ресурса, сказано что можно использовать метод POST-запроса, но я с таким методом не знаком, и тем более не знаю как это реализовать в vba. Может кто окажет консультацию.
Заранее благодарен за любой совет!

Автор - Wind
Дата добавления - 18.12.2014 в 17:31
doober Дата: Четверг, 18.12.2014, 18:26 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Нашел проект по QR кодам,скомпилировал.
Работает от от четвертого фреймворка.Если подойдет,могу переделать под командную строку.
Вы текст, она в ответ картинку
К сообщению приложен файл: QR.rar (56.5 Kb)




Сообщение отредактировал doober - Четверг, 18.12.2014, 18:28
 
Ответить
СообщениеНашел проект по QR кодам,скомпилировал.
Работает от от четвертого фреймворка.Если подойдет,могу переделать под командную строку.
Вы текст, она в ответ картинку

Автор - doober
Дата добавления - 18.12.2014 в 18:26
Wind Дата: Четверг, 18.12.2014, 19:08 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Благодрю, у меняесть тоже экзешка с консольным приложением, вот только незнаю как ее слить с экселевским файлом. А то файлик хотел в нете разместить. Поэтому и думал онлайн решение чтобы в комплекте екзешке не кидать, а то подумают что вирусняк.
Если конечно подскажите как файл в эксельку встроить, да еще оттуда ее и запускать. Было бы супер.


Сообщение отредактировал Wind - Четверг, 18.12.2014, 19:14
 
Ответить
СообщениеБлагодрю, у меняесть тоже экзешка с консольным приложением, вот только незнаю как ее слить с экселевским файлом. А то файлик хотел в нете разместить. Поэтому и думал онлайн решение чтобы в комплекте екзешке не кидать, а то подумают что вирусняк.
Если конечно подскажите как файл в эксельку встроить, да еще оттуда ее и запускать. Было бы супер.

Автор - Wind
Дата добавления - 18.12.2014 в 19:08
doober Дата: Четверг, 18.12.2014, 19:34 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Как встроить файл в книгу


 
Ответить
СообщениеКак встроить файл в книгу

Автор - doober
Дата добавления - 18.12.2014 в 19:34
Wind Дата: Четверг, 18.12.2014, 21:56 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Хе, этим я тоже пользовался, но в данном варианте с листа файл не запустить, там получается сначала файл копируется в темп, а потом оттуда стартует, как вариант можно, но всеж онлайн формирование интереснее в моем случае, так как не будет экзешников в комплекте, боюсь что с экзешником меня при первом же запуске антивирусник сдаст. ))))
Самая тема вообще надстройку забабахать, но до такого еще не дорос...


Сообщение отредактировал Wind - Четверг, 18.12.2014, 21:58
 
Ответить
СообщениеХе, этим я тоже пользовался, но в данном варианте с листа файл не запустить, там получается сначала файл копируется в темп, а потом оттуда стартует, как вариант можно, но всеж онлайн формирование интереснее в моем случае, так как не будет экзешников в комплекте, боюсь что с экзешником меня при первом же запуске антивирусник сдаст. ))))
Самая тема вообще надстройку забабахать, но до такого еще не дорос...

Автор - Wind
Дата добавления - 18.12.2014 в 21:56
doober Дата: Воскресенье, 21.12.2014, 19:08 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Что-то сразу не сообразил о POST запросе
Так работает[vba]
Код
Private Sub UseGoogle()
ssl = ""
For n = 1 To 1000
ssl = ssl & n
Next
URL = "https://chart.googleapis.com/chart"
DownloadFile URL, "c:\y.png", "chs=400x400&cht=qr&chl=" & ssl & "&chld=L|1&choe=UTF-8"

End Sub
Function DownloadFile(ByVal URL$, ByVal LocalPath$, sss) As Boolean
      Dim XMLHTTP, ADOStream, FileName
       On Error Resume Next: Kill LocalPath$
       Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
       XMLHTTP.Open "Post", Replace(URL$, "\", "/"), "False"
       XMLHTTP.setRequestHeader "Accept-Encoding", "gzip,deflate"
       XMLHTTP.setRequestHeader "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"
       XMLHTTP.send sss
     If XMLHTTP.Status = 200 Then
           Set ADOStream = CreateObject("ADODB.Stream")
           ADOStream.Type = 1: ADOStream.Open
           ADOStream.Write XMLHTTP.responseBody
           ADOStream.SaveToFile LocalPath$, 2
           ADOStream.Close: Set ADOStream = Nothing
           DownloadFile = True
    End If
       Set XMLHTTP = Nothing
End Function
[/vba]




Сообщение отредактировал doober - Воскресенье, 21.12.2014, 19:11
 
Ответить
СообщениеЧто-то сразу не сообразил о POST запросе
Так работает[vba]
Код
Private Sub UseGoogle()
ssl = ""
For n = 1 To 1000
ssl = ssl & n
Next
URL = "https://chart.googleapis.com/chart"
DownloadFile URL, "c:\y.png", "chs=400x400&cht=qr&chl=" & ssl & "&chld=L|1&choe=UTF-8"

End Sub
Function DownloadFile(ByVal URL$, ByVal LocalPath$, sss) As Boolean
      Dim XMLHTTP, ADOStream, FileName
       On Error Resume Next: Kill LocalPath$
       Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
       XMLHTTP.Open "Post", Replace(URL$, "\", "/"), "False"
       XMLHTTP.setRequestHeader "Accept-Encoding", "gzip,deflate"
       XMLHTTP.setRequestHeader "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"
       XMLHTTP.send sss
     If XMLHTTP.Status = 200 Then
           Set ADOStream = CreateObject("ADODB.Stream")
           ADOStream.Type = 1: ADOStream.Open
           ADOStream.Write XMLHTTP.responseBody
           ADOStream.SaveToFile LocalPath$, 2
           ADOStream.Close: Set ADOStream = Nothing
           DownloadFile = True
    End If
       Set XMLHTTP = Nothing
End Function
[/vba]

Автор - doober
Дата добавления - 21.12.2014 в 19:08
SLAVICK Дата: Понедельник, 22.12.2014, 23:00 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Здесь есть интересное решение, которое работает оффлайн - используется спец шрифт :D
Последняя ссылка ;)
И здесь 8-й пост.
Хотел вложить файлы - не влазят :o


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 22.12.2014, 23:23
 
Ответить
СообщениеЗдесь есть интересное решение, которое работает оффлайн - используется спец шрифт :D
Последняя ссылка ;)
И здесь 8-й пост.
Хотел вложить файлы - не влазят :o

Автор - SLAVICK
Дата добавления - 22.12.2014 в 23:00
Wind Дата: Пятница, 26.12.2014, 15:53 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
С пост запросом все шикарно отрабатывает. Спасибо большое!!!
Есть одно но. Картинка при обновлении текста скачивайтся, но в эксель почему то вставляется первый выриант, такое ощущение что поток гдето в памяти висит. Стоит поменять имя формируемой фотки или адрес сохранения, и подгружается новая, но только первый раз, а потом на ней все и остается. Никак не смог найти решение...
 
Ответить
СообщениеС пост запросом все шикарно отрабатывает. Спасибо большое!!!
Есть одно но. Картинка при обновлении текста скачивайтся, но в эксель почему то вставляется первый выриант, такое ощущение что поток гдето в памяти висит. Стоит поменять имя формируемой фотки или адрес сохранения, и подгружается новая, но только первый раз, а потом на ней все и остается. Никак не смог найти решение...

Автор - Wind
Дата добавления - 26.12.2014 в 15:53
Wind Дата: Пятница, 26.12.2014, 15:56 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
По поводу варианта со шрифтом. Очень давно искал. Но какой то он корявый и висячий. Вроде в текст формирует быстро. Но из-за интервала между строк, разработчики похоже вставляют текст в объект типа ListBox или что то вроде того, и вот в этот момент начинаются жесткие висняки, не пойму почему. Саму идею давно искал, она была бы вообще идеальным вариантом оффлайновой генерации, но вот реализация конечно подкачала, может конечно у меня руки кривые...
 
Ответить
СообщениеПо поводу варианта со шрифтом. Очень давно искал. Но какой то он корявый и висячий. Вроде в текст формирует быстро. Но из-за интервала между строк, разработчики похоже вставляют текст в объект типа ListBox или что то вроде того, и вот в этот момент начинаются жесткие висняки, не пойму почему. Саму идею давно искал, она была бы вообще идеальным вариантом оффлайновой генерации, но вот реализация конечно подкачала, может конечно у меня руки кривые...

Автор - Wind
Дата добавления - 26.12.2014 в 15:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Формирование QR-кода в эксель (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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