MALA DIRETA
Boa Tarde pessoal,
Estou precisando gerar uma mala direta pelo Visual Basic, porem não posso utilizar o Word, gostaria de saber se tenho como utilizar o BrOffice Calc, PDF, ou qualquer outro tipo de software gratuito que possa me ajudar, e como realizar esta programação?
Desde já muito Obrigado!
Estou precisando gerar uma mala direta pelo Visual Basic, porem não posso utilizar o Word, gostaria de saber se tenho como utilizar o BrOffice Calc, PDF, ou qualquer outro tipo de software gratuito que possa me ajudar, e como realizar esta programação?
Desde já muito Obrigado!
Uma mala direta, nada mais é que um template de documento, com alguns placeholders dentro. Esses placeholders vão conter o valor de cada um dos registros selecionados. Mais ou menos assim:
(Template de documento):
dim template as string
template = [Ô]Bom dia Sr. {Nome_Cliente} Informamos que recebemos o pedido de compra número {Numero_Pedido}[Ô]
Com isso, vc faria a seleção dos dados
dim rs as new adodb.Recordset
set rs = new adodb.recordset
rs.open [Ô]Select * from minha_tabela where xxxx = yyyy[Ô], cn
dim TemplatePreenchido as string
do while not rs.eof
TemplatePreenchido = Replace(TemplatePreenchido, [Ô]{Nome_Cliente}[Ô], rs!NomeCliente)
[ô]rotina para mandar por e-mail, imprimir enfim, o que quiser fazer
rs.movenext
loop
A idéia é mais ou menos assim;
(Template de documento):
dim template as string
template = [Ô]Bom dia Sr. {Nome_Cliente} Informamos que recebemos o pedido de compra número {Numero_Pedido}[Ô]
Com isso, vc faria a seleção dos dados
dim rs as new adodb.Recordset
set rs = new adodb.recordset
rs.open [Ô]Select * from minha_tabela where xxxx = yyyy[Ô], cn
dim TemplatePreenchido as string
do while not rs.eof
TemplatePreenchido = Replace(TemplatePreenchido, [Ô]{Nome_Cliente}[Ô], rs!NomeCliente)
[ô]rotina para mandar por e-mail, imprimir enfim, o que quiser fazer
rs.movenext
loop
A idéia é mais ou menos assim;
Olá amigo,
Essa informação foi muito boa para Eu, pois não sabia disso tambem... porem para o que Eu preciso não da certo... Eu ja tenho um termo de resposabilidade pronto com logo da empresa timbrado tudo certinho... ai queria jogar nele, porem não em Word pois não temos licença na Empresa, poderia ser qualquer outro programa gratuito.
Desde já Obrigado!
Essa informação foi muito boa para Eu, pois não sabia disso tambem... porem para o que Eu preciso não da certo... Eu ja tenho um termo de resposabilidade pronto com logo da empresa timbrado tudo certinho... ai queria jogar nele, porem não em Word pois não temos licença na Empresa, poderia ser qualquer outro programa gratuito.
Desde já Obrigado!
Se vc já tem o template de documento, melhor ainda, basta abrir, substituir os placeholders e salvar/enviar por e-mail/imprimir...
Ok, isso idependente de ser um arquivo em Broffice? e como faço para fazer a conexão do VB neste arquivo?
Obrigado.
Obrigado.
rie um módulo e nele adicione:
Public Function MakePropertyValue(cName, uValue) As Object
Dim oStruct, oServiceManager As Object
Set oServiceManager = CreateObject([Ô]com.sun.star.ServiceManager[Ô])
Set oStruct = oServiceManager.Bridge_GetStruct([Ô]com.sun.star.beans.PropertyValue[Ô])
oStruct.Name = cName
oStruct.Value = uValue
Set MakePropertyValue = oStruct
End Function
Public Function CreateUnoService(strServiceName) As Object
Dim oServiceManager As Object
Set oServiceManager = CreateObject([Ô]com.sun.star.ServiceManager[Ô])
Set CreateUnoService = oServiceManager.createInstance(strServiceName)
End Function
Dentro do Form coloque o seguinte código em seu controle (aqui assumo que é cmdabrir_click)
Private Sub Cmdabrir_click
Dim oSM, ODesk, oDoc As Object [ô]OOo objects
Dim OpenParam(1) As Object [ô]Parameters to open the doc
Dim SaveParam(1) As Object [ô]Parameters to save the doc
Dim args()
rchtext.Text = [Ô][Ô]
fn1 = FreeFile
Open [Ô]c:/temp.txt[Ô] For Append As fn1
Close #fn1
Set oSM = CreateObject([Ô]com.sun.star.ServiceManager[Ô])
Set ODesk = oSM.createInstance([Ô]com.sun.star.frame.Desktop[Ô])
arquivo = [Ô]file:///[Ô] + [Ô]c:/arquivoexemplo.odt[Ô] [ô]odt é o formato do Writter
Set OpenParam(0) = MakePropertyValue([Ô]Hidden[Ô], True) [ô] Open the file hidden
Set oDoc = ODesk.loadComponentFromURL(arquivo, [Ô]_blank[Ô], 0, OpenParam())
Set SaveParam(0) = MakePropertyValue([Ô]FilterName[Ô], [Ô]Text[Ô])
Call oDoc.storeToURL([Ô]file:///C:/temp.txt[Ô], SaveParam())
Set ODesk = Nothing
Set oSM = Nothing
oDoc.Close (True)
Set oDoc = Nothing
fn = FreeFile
Open [Ô]c:/temp.txt[Ô] For Input As fn
rchtexto.Text = Input$(LOF(fn), fn)
Close #fn
End sub
Pronto, o conteúdo do arquivo do Writter (.odt), será colocado em um arquivo texto e, depois, em um
controle richtextbox, permitindo sua manipulação, em geral de busca de palavras, já que o Writter não tem a função Pesquisa.
Public Function MakePropertyValue(cName, uValue) As Object
Dim oStruct, oServiceManager As Object
Set oServiceManager = CreateObject([Ô]com.sun.star.ServiceManager[Ô])
Set oStruct = oServiceManager.Bridge_GetStruct([Ô]com.sun.star.beans.PropertyValue[Ô])
oStruct.Name = cName
oStruct.Value = uValue
Set MakePropertyValue = oStruct
End Function
Public Function CreateUnoService(strServiceName) As Object
Dim oServiceManager As Object
Set oServiceManager = CreateObject([Ô]com.sun.star.ServiceManager[Ô])
Set CreateUnoService = oServiceManager.createInstance(strServiceName)
End Function
Dentro do Form coloque o seguinte código em seu controle (aqui assumo que é cmdabrir_click)
Private Sub Cmdabrir_click
Dim oSM, ODesk, oDoc As Object [ô]OOo objects
Dim OpenParam(1) As Object [ô]Parameters to open the doc
Dim SaveParam(1) As Object [ô]Parameters to save the doc
Dim args()
rchtext.Text = [Ô][Ô]
fn1 = FreeFile
Open [Ô]c:/temp.txt[Ô] For Append As fn1
Close #fn1
Set oSM = CreateObject([Ô]com.sun.star.ServiceManager[Ô])
Set ODesk = oSM.createInstance([Ô]com.sun.star.frame.Desktop[Ô])
arquivo = [Ô]file:///[Ô] + [Ô]c:/arquivoexemplo.odt[Ô] [ô]odt é o formato do Writter
Set OpenParam(0) = MakePropertyValue([Ô]Hidden[Ô], True) [ô] Open the file hidden
Set oDoc = ODesk.loadComponentFromURL(arquivo, [Ô]_blank[Ô], 0, OpenParam())
Set SaveParam(0) = MakePropertyValue([Ô]FilterName[Ô], [Ô]Text[Ô])
Call oDoc.storeToURL([Ô]file:///C:/temp.txt[Ô], SaveParam())
Set ODesk = Nothing
Set oSM = Nothing
oDoc.Close (True)
Set oDoc = Nothing
fn = FreeFile
Open [Ô]c:/temp.txt[Ô] For Input As fn
rchtexto.Text = Input$(LOF(fn), fn)
Close #fn
End sub
Pronto, o conteúdo do arquivo do Writter (.odt), será colocado em um arquivo texto e, depois, em um
controle richtextbox, permitindo sua manipulação, em geral de busca de palavras, já que o Writter não tem a função Pesquisa.
Bom Dia Amigo KERPLUNK...
Neste caso Eu vou ter que editar o arquivo, o que Eu preciso seria puxar os valores dos textbox direto para os campos do arquivo mala direta.
Peço desculpas pela minha falta de inteligencia, é que estou no incio ainda, então as vezes não sei expressar o que preciso, e também não consigo entender algumas coisas ainda...
Obrigado.
Neste caso Eu vou ter que editar o arquivo, o que Eu preciso seria puxar os valores dos textbox direto para os campos do arquivo mala direta.
Peço desculpas pela minha falta de inteligencia, é que estou no incio ainda, então as vezes não sei expressar o que preciso, e também não consigo entender algumas coisas ainda...
Obrigado.
Então, é como te mostrei, vc vai abrir o texto do arquivo, substituir os valores e fazer o que precisar com o resultado...
Tópico encerrado , respostas não são mais permitidas