Estube buscando alguna forma de colocar un código QR o DataMatrix en unas planillas en las que estoy trabajano y me topé con algo ineresante.
Utilizo un servicio web generador de códigos donde se le pasa el texto que se quiere codicar y la respuesta la captura y la inserta en la celda seleccionada.
La idea de colocar un QR o DataMatrix puede servir por ejemplo para colocar un enlace en la planilla ej (Obtener Ayuda) y si se esta en la PC te deriva a la página de ayuda pero si estas viendo la planilla impresa podés escanear el código con una plicación en el celular e ir directamente a la página de ayua. Otra idea podría ser colocar un código en las tarjetas de presentación y cuando se escanea te deriva a la página de la empresa, o ágina personal, etc.
Bueno no los aburro mas y aca les dejo el código y un ejemplo.
Código: Seleccionar todo
REM ***** BASIC *****
Sub Main
if not Estoy_Conectado then ' verifico si estoy conectado a internet
exit sub
end if
TEXTO = ThisComponent.getSheets.getByName("Sheet1").getCellByPosition(1,2 ).String ' Leo la cadena a codificar
Texto_Titulo = " "
msgbox "Texto a codificar:" & Chr(10) & Chr(10) & TEXTO ' Muestro la cadena
oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "C3" )
ThisComponent.getCurrentController.select( oRango )
Texto_Titulo = "QrCode " & Texto
encode_i_nigma(Texto,Texto_Titulo, "Q")
oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "E3" )
ThisComponent.getCurrentController.select( oRango )
Texto_Titulo = "Code DataMatrix " & Texto
encode_i_nigma(Texto,Texto_Titulo, "D")
oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "C5" )
ThisComponent.getCurrentController.select( oRango )
chart_apis_google(Texto)
oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "E5" )
ThisComponent.getCurrentController.select( oRango )
Insert_Image("https://forum.openoffice.org/es/forum/styles/prosilver/imageset/logo_forum_es.png")
oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "A1" )
ThisComponent.getCurrentController.select( oRango )
End Sub
function Estoy_Conectado As boolean
Dim Conexion As Boolean
Conexion = True
oGoogle = "http://google.com"
oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
if oSFA.exists(oGoogle)= false then
MsgBox ("No se puede acceder a " & oGoogle & chr(10) & "Verifique su conección")
Conexion = false
endif
Estoy_Conectado = Conexion
end function
sub encode_i_nigma(Encode_Texto, Texto_Titulo, Qr_DataM)
if len(Encode_Texto) < 1 then
msgbox "Cadena Vacía."
exit sub
elseif len(Encode_Texto) > 1950 then
msgbox "Excedió el límite max de 1950 caracteres."
exit sub
end if
ImgUrl = ""
If UCase(Qr_DataM) = "D" Then
ImgUrl =ConvertToURL("http://encode.i-nigma.com/DMtrx/img.php?d="& Encode_Texto &"&c="& Texto_Titulo &"&s=6")
end if
If UCase(Qr_DataM) = "Q" Then
ImgUrl =ConvertToURL("http://encode.i-nigma.com/QRCode/img.php?d="& Encode_Texto &"&c="& Texto_Titulo &"&s=6")
end if
If ImgUrl = "" Then
msgbox " Error use D Para DataMatrix o Q para QR"
exit Sub
end If
Insert_Image(ImgUrl)
end sub
sub chart_apis_google(Encode_Texto)
sURL = "http://chart.apis.google.com/chart?cht=qr&chs="
ImgUrl = ConvertToURL(sURL & "300x300" & "&chl=" & Encode_Texto & "&choe=UTF-8" )
Insert_Image(ImgUrl)
end sub
Sub Insert_Image(ImgUrl)
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = ImgUrl
args1(1).Name = "FilterName"
args1(1).Value = "<Alle formater>"
args1(2).Name = "AsLink"
args1(2).Value = false
args1(3).Name = "Style"
args1(3).Value = "Grafik"
dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args1())
end sub
PD: La función que inserta el código también sirve para insertar imágenes directamente de la web. Lo único que hay que hacer es pasar como parámetro es la direcceción del enlace.