Compartilhando Soluções Paliativas-Impressão de Formulários
Enviado: 07 Jun 2007 04:11
Oi, pessoal!
Sei que aqui há muitos mestres, pelos quais não escondo tremenda admiração, mas que também há pessoas que sofrem como eu em algumas soluções... hehehehehe
Pois bem, devido a necessidade de um cliente de utilizar um específico formulário Windows ("formulário" não no sentido de forms, mas sim de documento) totalmente gráfico, inclusive com logotipo, encontrei uma solução que não é nenhuma maravilha, mas que está sendo um bom paliativo na impressão deste formulário e desejo compartilhar.
Para tal, será necessário a "interação" entre o Clipper (uso a versão 5.2e com Blinker 5.1), a biblioteca de terceiros "ClipWKS" e o Excel!
Estou falando de um formulário (nota fiscal, recibo, fatura...) e não de um relatório!
O texto ficará extenso... Mas quem tiver problemas semelhantes ao meu, creio que ajudará, e quem já tiver uma solução, por favor, leia também, pois estou aberto a novas sugestões, e sei que a solução que criei, resolve, mas que certamente há outras melhores, mais fáceis e mais práticas. Inclusive, aceito de bom grado sugestões de melhorar esta solução que estou postando.
No Excel...Numa planilha que gravei como "PLAN.XLS", criei o formulário (trabalhoso, e muito, mas não é difícil).
Desenhei nas células, e não com os recursos de caixa de texto, mas que também é possível, e acho que até mais fácil do que criar formulários diretamente nas células.
O logotipo foi baba, né? Ctrl+C no arquivo .jpg do logotipo, Ctrl+V no Excel, podendo arrastá-lo para onde quiser!
Nas células da planilha que irão os dados, coloquei as fórmulas com vínculos de outra planilha (a PLAN_TMP.XLS) que será criada pelo Clipper.
Depois digo porque da criação desta segunda planilha.
As fórmulas são mais ou menos assim (a condição "SE" é para não ficar com "0" (zero) quando não tiver conteúdo na célula):
Criei uma macro com o nome de auto_open(). Este nome é obrigatório para que a macro seja executada assim que a planilha for aberta sem a intervenção do usuário.
A macro executa uma impressão e fecha a planilha sem salvar e sem a intervenção do usuário.
A macro (não preciso gravar os dados da planilha, que só é utilizada para impressão, pois os dados são gerados pelo Clipper!):
Aí, pelo menu do Excel:
1) "Editar", "Vínculos", botão "Prompt de inicialização...", escolhi a última opção, que é "Não exibir o alerta e atualizar vínculos";
2) "Ferramentas", "Opções...", guia "Editar", demarquei a caixa "Confirmar atualização de vínculos automáticos";
3) "Ferramentas", "Macro", "Segurança", escolhi a última opção, que é "Baixo (não recomendável). Você não está protegido contra macros...".
Os itens 1 e 2, evitam que apareça aquela caixa de alerta perguntando se quer atualizar os vínculos e atualizam-nos automaticamente sem perguntar, e o item 3, é para permitir a execução da macro.
Quando preciso fazer alguma atualização na planilha, é bem arcaico a forma que achei (quando abro-a, ela executa automaticamente e fecha, lembram?); Abro o Excel e no menu "Ferramentas", "Macro", "Segurança", defino "Muito alto. Somente macros...". Aí, abro a planilha, que não se autoexecutará mais, faço as alterações necessárias e volto a definir o modo de segurança de macros como baixo, e salvo-a.
Aceito sugestões... Não sei desativar uma macro!
A parte do Excel, se não esqueci nada, acabou!
No clipper...Aqui é mais baba... Afinal, mesmo com inexperiência, é nosso mundo, né?
Deve ser linkado com o sistema, a biblioteca "clpwks52.lib" (vi que tem também a biblioteca "clpwks53.lib").
Esta biblioteca permite criar e manipular planilhas do Excel até a versão 4.0, é, agora, free e está disponibilizada pelo seu autor no link abaixo:
http://www.jbooth-consulting.com/products_clipwks.asp
Ah, a biblioteca tem um excelente NG!
Aí, no programa, coloquei estes códigos:
Talvez haja algum erro aí nos códigos, troca de nomes de planilhas, sintaxe...
A parte do Clipper, também se não esqueci nada, acabou!
Agora, a resposta da pergunta que certamente farão: "Porque duas planilhas Excel?".
Bom, foi a solução que encontrei para os problemas, e talvez houvessem outras que não fosse necessário a criação de dois arquivos.
E os problemas foram:
1) Formatos... A biblioteca "ClipWKS" tem também a função de leitura e reescrita numa célula, só que aí, toda a formatação da célula (cor de texto, cor de fundo, rachurados, negrito, fontes, tamanho de fontes...) ia tudo por água abaixo!
2) Esta lib trabalha com o Excel até a versão 4.0. Até consegui criar a macro numa planilha salva nesta versão, só que depois dela ter sido salva, ao reabrir, adeus, macro!
Pontos negativos:
1) Uma boa interatividade com o Excel no que diz respeito à criação de documentos;
2) Chato pra caramba... Após imprimir, o foco sai do programa (é que vai para o Excel para a impressão), e não sei voltá-lo ao programa! hehehehehe
Aceito sugestões pro item 2. Será que um comando na macro do Excel resolve? Tipo, recuperar o foco assim que o Excel é aberto e antes de fechar, voltar o foco?
Sei lá... Tô viajando! Não sei trabalhar com macros.
Era isto!
Sei que aqui há muitos mestres, pelos quais não escondo tremenda admiração, mas que também há pessoas que sofrem como eu em algumas soluções... hehehehehe
Pois bem, devido a necessidade de um cliente de utilizar um específico formulário Windows ("formulário" não no sentido de forms, mas sim de documento) totalmente gráfico, inclusive com logotipo, encontrei uma solução que não é nenhuma maravilha, mas que está sendo um bom paliativo na impressão deste formulário e desejo compartilhar.
Para tal, será necessário a "interação" entre o Clipper (uso a versão 5.2e com Blinker 5.1), a biblioteca de terceiros "ClipWKS" e o Excel!
Estou falando de um formulário (nota fiscal, recibo, fatura...) e não de um relatório!
O texto ficará extenso... Mas quem tiver problemas semelhantes ao meu, creio que ajudará, e quem já tiver uma solução, por favor, leia também, pois estou aberto a novas sugestões, e sei que a solução que criei, resolve, mas que certamente há outras melhores, mais fáceis e mais práticas. Inclusive, aceito de bom grado sugestões de melhorar esta solução que estou postando.
No Excel...Numa planilha que gravei como "PLAN.XLS", criei o formulário (trabalhoso, e muito, mas não é difícil).
Desenhei nas células, e não com os recursos de caixa de texto, mas que também é possível, e acho que até mais fácil do que criar formulários diretamente nas células.
O logotipo foi baba, né? Ctrl+C no arquivo .jpg do logotipo, Ctrl+V no Excel, podendo arrastá-lo para onde quiser!
Nas células da planilha que irão os dados, coloquei as fórmulas com vínculos de outra planilha (a PLAN_TMP.XLS) que será criada pelo Clipper.
Depois digo porque da criação desta segunda planilha.
As fórmulas são mais ou menos assim (a condição "SE" é para não ficar com "0" (zero) quando não tiver conteúdo na célula):
Código: Selecionar todos
*******************
=SE('C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$1="";"";'C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$1)
=SE('C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$2="";"";'C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$2)
=SE('C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$3="";"";'C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$3)
*******************A macro executa uma impressão e fecha a planilha sem salvar e sem a intervenção do usuário.
A macro (não preciso gravar os dados da planilha, que só é utilizada para impressão, pois os dados são gerados pelo Clipper!):
Código: Selecionar todos
*******************
Sub auto_open()
' Região de Impressão
Range("A1:AC56").Select
' Imprime a planilha ativa
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Quit Microsoft Excel.
Application.Quit
ThisWorkbook.Close SaveChanges:=False
End Sub
*******************1) "Editar", "Vínculos", botão "Prompt de inicialização...", escolhi a última opção, que é "Não exibir o alerta e atualizar vínculos";
2) "Ferramentas", "Opções...", guia "Editar", demarquei a caixa "Confirmar atualização de vínculos automáticos";
3) "Ferramentas", "Macro", "Segurança", escolhi a última opção, que é "Baixo (não recomendável). Você não está protegido contra macros...".
Os itens 1 e 2, evitam que apareça aquela caixa de alerta perguntando se quer atualizar os vínculos e atualizam-nos automaticamente sem perguntar, e o item 3, é para permitir a execução da macro.
Quando preciso fazer alguma atualização na planilha, é bem arcaico a forma que achei (quando abro-a, ela executa automaticamente e fecha, lembram?); Abro o Excel e no menu "Ferramentas", "Macro", "Segurança", defino "Muito alto. Somente macros...". Aí, abro a planilha, que não se autoexecutará mais, faço as alterações necessárias e volto a definir o modo de segurança de macros como baixo, e salvo-a.
Aceito sugestões... Não sei desativar uma macro!
A parte do Excel, se não esqueci nada, acabou!
No clipper...Aqui é mais baba... Afinal, mesmo com inexperiência, é nosso mundo, né?
Deve ser linkado com o sistema, a biblioteca "clpwks52.lib" (vi que tem também a biblioteca "clpwks53.lib").
Esta biblioteca permite criar e manipular planilhas do Excel até a versão 4.0, é, agora, free e está disponibilizada pelo seu autor no link abaixo:
http://www.jbooth-consulting.com/products_clipwks.asp
Ah, a biblioteca tem um excelente NG!
Aí, no programa, coloquei estes códigos:
Código: Selecionar todos
******************************** BOF File
.
.
.
// Cria Arquivo do Excel na versao 4.0
LOCAL laXls := LCREATE("PLAN_TMP.XLS","E4")
// Caminho e arquivo Excel de impressão que será executado
// Na execução, será aberto o arquivo Plan.xls, e não Plan_Tmp.xls que foi criado
LOCAL lcExec := "C:\ARQUIV~1\MICROS~2\OFFICE11\EXCEL.EXE PLAN.XLS"
LOCAL lcDados1 := "Pode ser uma variável!"
// Se não for possível criar a planilha PLAN_TMP.XLS, mensagem de erro!
IF EMPTY(laXls)
?
? "Nao foi Possivel Criar a Planilha Excel [PLAN_TMP.XLS]"
?
RETURN NIL
ENDIF
// Inclui os dados na planilha criada
// "A1", "A2", "A3"..., são as células que irão os dados
// O apóstrofe simples é para forçar um texto na fórmula. Preferi assim!
LPUT(laXls,"'Aqui pode ser um literal","A1")
LPUT(laXls,"'"+lcDados1,"A2")
LPUT(laXls,"'Pode ser uma fórmula!","A3")
// Fecha a planilha criada
LCLOSE (laXls)
// Chama o Excel e abre uma outra planilha
// Abre Plan.xls, e não Plan_Tmp.xls que foi criado
IF !SWPRUNCMD(lcExec,0)
?
? "Nao foi Possivel Abrir a Planilha Excel PLAN.XLS"
?
ENDIF
.
.
.
******************************** EOF FileA parte do Clipper, também se não esqueci nada, acabou!
Agora, a resposta da pergunta que certamente farão: "Porque duas planilhas Excel?".
Bom, foi a solução que encontrei para os problemas, e talvez houvessem outras que não fosse necessário a criação de dois arquivos.
E os problemas foram:
1) Formatos... A biblioteca "ClipWKS" tem também a função de leitura e reescrita numa célula, só que aí, toda a formatação da célula (cor de texto, cor de fundo, rachurados, negrito, fontes, tamanho de fontes...) ia tudo por água abaixo!
2) Esta lib trabalha com o Excel até a versão 4.0. Até consegui criar a macro numa planilha salva nesta versão, só que depois dela ter sido salva, ao reabrir, adeus, macro!
Pontos negativos:
1) Uma boa interatividade com o Excel no que diz respeito à criação de documentos;
2) Chato pra caramba... Após imprimir, o foco sai do programa (é que vai para o Excel para a impressão), e não sei voltá-lo ao programa! hehehehehe
Aceito sugestões pro item 2. Será que um comando na macro do Excel resolve? Tipo, recuperar o foco assim que o Excel é aberto e antes de fechar, voltar o foco?
Sei lá... Tô viajando! Não sei trabalhar com macros.
Era isto!