Добрый день! Кто-нибудь занимался вопросом формирования 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
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. Может кто окажет консультацию. Заранее благодарен за любой совет!
Добрый день! Кто-нибудь занимался вопросом формирования 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
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
Сообщение отредактировал Wind - Четверг, 18.12.2014, 17:33
Нашел проект по QR кодам,скомпилировал. Работает от от четвертого фреймворка.Если подойдет,могу переделать под командную строку. Вы текст, она в ответ картинку
Нашел проект по QR кодам,скомпилировал. Работает от от четвертого фреймворка.Если подойдет,могу переделать под командную строку. Вы текст, она в ответ картинкуdoober
Благодрю, у меняесть тоже экзешка с консольным приложением, вот только незнаю как ее слить с экселевским файлом. А то файлик хотел в нете разместить. Поэтому и думал онлайн решение чтобы в комплекте екзешке не кидать, а то подумают что вирусняк. Если конечно подскажите как файл в эксельку встроить, да еще оттуда ее и запускать. Было бы супер.
Благодрю, у меняесть тоже экзешка с консольным приложением, вот только незнаю как ее слить с экселевским файлом. А то файлик хотел в нете разместить. Поэтому и думал онлайн решение чтобы в комплекте екзешке не кидать, а то подумают что вирусняк. Если конечно подскажите как файл в эксельку встроить, да еще оттуда ее и запускать. Было бы супер.Wind
Сообщение отредактировал Wind - Четверг, 18.12.2014, 19:14
Хе, этим я тоже пользовался, но в данном варианте с листа файл не запустить, там получается сначала файл копируется в темп, а потом оттуда стартует, как вариант можно, но всеж онлайн формирование интереснее в моем случае, так как не будет экзешников в комплекте, боюсь что с экзешником меня при первом же запуске антивирусник сдаст. )))) Самая тема вообще надстройку забабахать, но до такого еще не дорос...
Хе, этим я тоже пользовался, но в данном варианте с листа файл не запустить, там получается сначала файл копируется в темп, а потом оттуда стартует, как вариант можно, но всеж онлайн формирование интереснее в моем случае, так как не будет экзешников в комплекте, боюсь что с экзешником меня при первом же запуске антивирусник сдаст. )))) Самая тема вообще надстройку забабахать, но до такого еще не дорос...Wind
Сообщение отредактировал Wind - Четверг, 18.12.2014, 21:58
Что-то сразу не сообразил о 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]
Что-то сразу не сообразил о 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
Здесь есть интересное решение, которое работает оффлайн - используется спец шрифт Последняя ссылка И здесь 8-й пост. Хотел вложить файлы - не влазят
Здесь есть интересное решение, которое работает оффлайн - используется спец шрифт Последняя ссылка И здесь 8-й пост. Хотел вложить файлы - не влазят SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Понедельник, 22.12.2014, 23:23
С пост запросом все шикарно отрабатывает. Спасибо большое!!! Есть одно но. Картинка при обновлении текста скачивайтся, но в эксель почему то вставляется первый выриант, такое ощущение что поток гдето в памяти висит. Стоит поменять имя формируемой фотки или адрес сохранения, и подгружается новая, но только первый раз, а потом на ней все и остается. Никак не смог найти решение...
С пост запросом все шикарно отрабатывает. Спасибо большое!!! Есть одно но. Картинка при обновлении текста скачивайтся, но в эксель почему то вставляется первый выриант, такое ощущение что поток гдето в памяти висит. Стоит поменять имя формируемой фотки или адрес сохранения, и подгружается новая, но только первый раз, а потом на ней все и остается. Никак не смог найти решение...Wind
По поводу варианта со шрифтом. Очень давно искал. Но какой то он корявый и висячий. Вроде в текст формирует быстро. Но из-за интервала между строк, разработчики похоже вставляют текст в объект типа ListBox или что то вроде того, и вот в этот момент начинаются жесткие висняки, не пойму почему. Саму идею давно искал, она была бы вообще идеальным вариантом оффлайновой генерации, но вот реализация конечно подкачала, может конечно у меня руки кривые...
По поводу варианта со шрифтом. Очень давно искал. Но какой то он корявый и висячий. Вроде в текст формирует быстро. Но из-за интервала между строк, разработчики похоже вставляют текст в объект типа ListBox или что то вроде того, и вот в этот момент начинаются жесткие висняки, не пойму почему. Саму идею давно искал, она была бы вообще идеальным вариантом оффлайновой генерации, но вот реализация конечно подкачала, может конечно у меня руки кривые...Wind