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!




