MALA DIRETA

DANIELFELIX91 22/11/2011 14:05:53
#389721
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!
KERPLUNK 22/11/2011 14:21:20
#389722
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;
DANIELFELIX91 22/11/2011 14:31:46
#389723
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!
KERPLUNK 22/11/2011 16:13:37
#389735
Se vc já tem o template de documento, melhor ainda, basta abrir, substituir os placeholders e salvar/enviar por e-mail/imprimir...
DANIELFELIX91 22/11/2011 17:05:02
#389740
Ok, isso idependente de ser um arquivo em Broffice? e como faço para fazer a conexão do VB neste arquivo?

Obrigado.
KERPLUNK 22/11/2011 17:34:25
#389752
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.
DANIELFELIX91 23/11/2011 08:15:47
#389793
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.
KERPLUNK 23/11/2011 08:50:37
#389801
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