Clique abaixo para nos ajudar
Conectar-se

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
28 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 28 Visitantes :: 2 Motores de busca

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 468 em 1/3/2012, 10:43
TRY BEGIN E FLOCK()

17/4/2017, 10:32 por AJC

Pessoal estou tendo alguns problemas de gravação em rede, estou usando
try begin, mas vi algo na …

Comentários: 0

Exportar Dados Campo Memo Tabela DBF

10/4/2017, 10:28 por fcampos

Olá bom dia.

Estou tentando exportar os dados de algumas tabelas em formato dbf pelo foxpro.
O …

Comentários: 2

Função EVL()

8/4/2017, 12:18 por Clebervfp

Bom dia a todos.
Vim compartilhar de uma Função do próprio VFP que me benefício muito.
Função …

Comentários: 0

COMO BLOQUEAR REGISTRO OU TABELA NO VISUAL FOXPRO PARA GRAVAÇÃO EM REDE

3/4/2017, 10:29 por AJC

Pessoal estou tendo um problema que acontece sempre busco na minha tabela de clientes o ultimo …

Comentários: 2

Controlar Scanner Twain

31/3/2017, 17:31 por Kleber R Bento

Estou usando o EZTW32.DLL para criar uma ferramenta que escaneia e gera PDF. Porém com esses …

Comentários: 0

Estatísticas
Temos 7064 usuários registrados
O último usuário registrado atende pelo nome de Rpedrozo

Os nossos membros postaram um total de 48 mensagens em 25 assuntos

Rotina para criar planilha em Excel

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido Rotina para criar planilha em Excel

Mensagem por Linghston em 19/9/2012, 07:31

Como vão todos,
Amigos a muito tempo uso a rotina abaixo para criar de uma forma muito legal e pratica as minhas planilhas em Excel via VFP, porem ela tem um "bugs" que é o seguinte: Se o um determinado campo da tabela dbf de onde ela puxa os dados para gerar a planilha, estiver vazia seja caractere, ou numérico ou sem a data, a rotina trava naquele campo e não carrega a planilha com os restantes dos dados.
Será que alguém poderia me ajudar resolver este "nó" nesta rotina ??

Obrigado
Linghston


ROTINA PARA CRIAR PLANILHA


Código:
With Thisform
   Wait Window "Aguarde, planilha sendo gerada..." Nowait
   Set Refresh To 5
   Set Exclusive Off
   Set Safety Off
   Local i,j,xlsheet,XLApp,tmpsheet

   Use c:\temp_pm Exclusive
   Count To xreg For registro=registro
   Select temp_pm.lista,;
      temp_pm.codigo,;
      temp_pm.denominaca,;
      temp_pm.comprador,;
      temp_pm.ramal,;
      temp_pm.email,;
      temp_pm.qtde_uso,;
      temp_pm.custo_un,;
      temp_pm.stock,;
      temp_pm.vr_stock,;
      temp_pm.aplicacao,;
      temp_pm.dtinclucao From temp_pm Into Array arrSalesincom

   tmpsheet = Getobject('','excel.sheet')
   XLApp = tmpsheet.Application
   XLApp.Visible = .T.
   XLApp.WorkBooks.Add()
   xlsheet = XLApp.ActiveSheet
   xlsheet.Cells(1,1).Value = "Registro"
   xlsheet.Cells(1,1).ColumnWidth = 15
   xlsheet.Cells(1,1).Font.Color = -3407872
   xlsheet.Cells(1,1).Font.TintAndShade = 0
   xlsheet.Cells(1,1).Font.Bold = .T.
   xlsheet.Cells(1,1).HorizontalAlignment = 3

   xlsheet.Cells(1,2).Value = "Codigo"
   xlsheet.Cells(1,2).ColumnWidth = 12
   xlsheet.Cells(1,2).Font.Color = -3407872
   xlsheet.Cells(1,2).Font.TintAndShade = 0
   xlsheet.Cells(1,2).Font.Bold = .T.
   xlsheet.Cells(1,2).HorizontalAlignment = 3

   xlsheet.Cells(1,3).Value = "Denominação"
   xlsheet.Cells(1,3).ColumnWidth = 60
   xlsheet.Cells(1,3).Font.Color = -3407872
   xlsheet.Cells(1,3).Font.TintAndShade = 0
   xlsheet.Cells(1,3).Font.Bold = .T.
   xlsheet.Cells(1,3).HorizontalAlignment = 3

   xlsheet.Cells(1,4).Value = "Comprador"
   xlsheet.Cells(1,4).ColumnWidth = 80
   xlsheet.Cells(1,4).Font.Color = -3407872
   xlsheet.Cells(1,4).Font.TintAndShade = 0
   xlsheet.Cells(1,4).Font.Bold = .T.
   xlsheet.Cells(1,4).HorizontalAlignment = 3

   xlsheet.Cells(1,5).Value = Ramal"
   xlsheet.Cells(1,5).ColumnWidth = 5
   xlsheet.Cells(1,5).Font.Color = -3407872
   xlsheet.Cells(1,5).Font.TintAndShade = 0
   xlsheet.Cells(1,5).Font.Bold = .T.
   xlsheet.Cells(1,5).HorizontalAlignment = 3

   xlsheet.Cells(1,6).Value = "Email"
   xlsheet.Cells(1,6).ColumnWidth = 100
   xlsheet.Cells(1,6).Font.Color = -3407872
   xlsheet.Cells(1,6).Font.TintAndShade = 0
   xlsheet.Cells(1,6).Font.Bold = .T.
   xlsheet.Cells(1,6).HorizontalAlignment = 3

   xlsheet.Cells(1,7).Value = "Qtde Usada"
   xlsheet.Cells(1,7).ColumnWidth = 10
   xlsheet.Cells(1,7).Font.Color = -3407872
   xlsheet.Cells(1,7).Font.TintAndShade = 0
   xlsheet.Cells(1,7).Font.Bold = .T.
   xlsheet.Cells(1,7).HorizontalAlignment = 3

   xlsheet.Cells(1,8).Value = "Custo Un."
   xlsheet.Cells(1,8).ColumnWidth = 30
   xlsheet.Cells(1,8).Font.Color = -3407872
   xlsheet.Cells(1,8).Font.TintAndShade = 0
   xlsheet.Cells(1,8).Font.Bold = .T.
   xlsheet.Cells(1,8).HorizontalAlignment = 3
   xlsheet.Range("J1:J65536").NumberFormat = "$ #,##0.000"

   xlsheet.Cells(1,9).Value = "Stock Almox."
   xlsheet.Cells(1,9).ColumnWidth = 10
   xlsheet.Cells(1,9).Font.Color = -3407872
   xlsheet.Cells(1,9).Font.TintAndShade = 0
   xlsheet.Cells(1,9).Font.Bold = .T.
   xlsheet.Cells(1,9).HorizontalAlignment = 3
   xlsheet.Range("k1:k65536").NumberFormat = "#,##0"

   xlsheet.Cells(1,10).Value = "Valor Stock"
   xlsheet.Cells(1,10).ColumnWidth = 30
   xlsheet.Cells(1,10).Font.Color = -3407872
   xlsheet.Cells(1,10).Font.TintAndShade = 0
   xlsheet.Cells(1,10).Font.Bold = .T.
   xlsheet.Cells(1,10).HorizontalAlignment = 3
   xlsheet.Range("L2:L65536").NumberFormat = "$ #,##0.000"

   xlsheet.Cells(1,11).Value = "Aplicação"
   xlsheet.Cells(1,11).ColumnWidth = 100
   xlsheet.Cells(1,11).Font.Color = -3407872
   xlsheet.Cells(1,11).Font.TintAndShade = 0
   xlsheet.Cells(1,11).Font.Bold = .T.
   xlsheet.Cells(1,11).HorizontalAlignment = 3

   xlsheet.Cells(1,12).Value = "Data Inclusão"
   xlsheet.Cells(1,12).ColumnWidth = 10
   xlsheet.Cells(1,12).Font.Color = -3407872
   xlsheet.Cells(1,12).Font.TintAndShade = 0
   xlsheet.Cells(1,12).Font.Bold = .T.
   xlsheet.Cells(1,12).HorizontalAlignment = 3


**** Seleção dos registros
   For i = 1 To xreg      && total de registros que tem no banco
      For j = 1 To 12
         If Isnull (arrSalesincom(i,j)) Then
            xlsheet.Cells(i+1,j).Value = 0
         Else
            xlsheet.Cells(i+1,j).Value = arrSalesincom(i,j)
         Endif
      Endfor
   Endfor

   With xlsheet
      Erase c:\planilhas\stock.xlsx 
      .SaveAs("c:\planilhas\stock.xlsx ") 
*   .Visible = .F.
   Endwith
   Close Data
   Thisform.Release()
Endwith
avatar
Linghston
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Rotina para criar planilha em Excel

Mensagem por Marcos Guedes em 19/9/2012, 14:05

Tente subistituir o seu SELECT:
Código:
SELECT ;
   temp_pm.lista,;
   temp_pm.codigo,;
   temp_pm.denominaca,;
   temp_pm.comprador,;
   temp_pm.ramal,;
   temp_pm.email,;
   temp_pm.qtde_uso,;
   temp_pm.custo_un,;
   temp_pm.stock,;
   temp_pm.vr_stock,;
   temp_pm.aplicacao,;
   temp_pm.dtinclucao ;
   FROM temp_pm INTO ARRAY arrsalesincom

Por este:
Código:
SELECT ;
      NVL(temp_pm.lista, ' '),;
      NVL(temp_pm.codigo, ' '),;
      NVL(temp_pm.denominaca, ' '),;
      NVL(temp_pm.comprador, ' '),;
      NVL(temp_pm.ramal, ' '),;
      NVL(temp_pm.email, ' '),;
      NVL(temp_pm.qtde_uso, 0),;
      NVL(temp_pm.custo_un, 0),;
      NVL(temp_pm.stock, ' '),;
      NVL(temp_pm.vr_stock, ' '),;
      NVL(temp_pm.aplicacao, ' '),;
      NVL(temp_pm.dtinclucao, CTOD('')) ;
      FROM temp_pm INTO ARRAY arrsalesincom

Observe o uso da função NVL que incluí em seu SELECT.
Tentei adivinhar os tipos de dados das colunas de sua tabela, então dá uma analisada e verifica se corresponde aos tipos que você definiu.

Como você disse que o problema estão nos campos não preenchidos, talvez resolva se você definir um valor padrão para os campos nulos.

Outra alternativa é você analisar o uso do FOR:
Código:
FOR i = 1 TO xreg      && total de registros que tem no banco
      FOR j = 1 TO 12
         IF ISNULL (arrsalesincom(i,j)) THEN
            xlsheet.cells(i+1,j).VALUE = 0
         ELSE
            xlsheet.cells(i+1,j).VALUE = arrsalesincom(i,j)
         ENDIF
      ENDFOR
   ENDFOR
Na condição ELSE substitua o valor atribuído à celular:
Código:
xlsheet.cells(i+1,j).VALUE = arrsalesincom(i,j)
Por um valor qualquer. Por exemplo:
Código:
xlsheet.cells(i+1,j).VALUE = "qualquer valor"

Se gerar o arquivo sem falhas, então trate o valor retornado por:
Código:
arrsalesincom(i,j)

Para caracteres vazios, ente substituir por "-", por exemplo.

Veja também esta rotina para uso do Excel com VFP:
[Você precisa estar registrado e conectado para ver este link.]

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Rotina para criar planilha em Excel

Mensagem por Linghston em 24/9/2012, 11:00

Marcos,
Desculpe por demorar em lhe dar retorno sobre suas dicas, mas é que estive fora e impossibilitado e acessar o fórum.
Com estas suas dicas, consegui resolver este “nó” que estava atrapalhando minha rotina, mais exatamente acrescentando a função NVL como orientou.

Muito Obrigado mais uma vez pela ajuda.

Linghston
avatar
Linghston
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum