Saudações, Toledo e demais colegas.
Toledo escreveu:Marcelo, dê mais detalhes sobre o que está ocorrendo e o código que você está usando? É apresentado alguma mensagem de erro?
O erro que da é: error ToleAuto/-1 toleauto:new
Segue o código, porem funciona perfeitamente em uma maquina com o office full, já em uma maquina com office starter,nao funciona. acho que o starter não possibilita essa automação.
Toledo escreveu:Outra coisa, o Office Starter por padrão salva os arquivos com a extensão XLSX, mas também pode salvar no formato do Excel 97 - 2003, com a extensão XLS. O arquivo que você está lendo está com qual extensão, XLSX ou XLS?
Toledo isso não é problema porque a planilha é gerada do sistema contmatic sem a minha interferência, eu apenas passo as linha para o DBF.
eu peguei a planilha gerada através do contmatic e gerei um dbf que é lido por outro sistema aqui na empresa, o office starter não le e não gera essa planilha. A automação ole acontece dentro do prg em harbour sem a interferência do office starter.
Acho que a citação do nosso colega e interessante, não havia pensado nisso.
Desde já obrigado amigos.
alxsts escreveu:Olá!
Esse tipo de acesso, via automação OLE exige que o Excel esteja instalado na máquina onde a aplicação está sendo executada.
O ideal é deixar a aplicação livre dessa amarra. Para superar isto, pode-se abrir os documentos do Office via ADO. Tem um exemplo de acesso a Excel por esse método aqui no fórum, postado pelo Quintas: Importando de planilha Excel - nome da planilha
Olá!
Esse tipo de acesso, via automação OLE exige que o Excel esteja instalado na máquina onde a aplicação está sendo executada.
O ideal é deixar a aplicação livre dessa amarra. Para superar isto, pode-se abrir os documentos do Office via ADO. Tem um exemplo de acesso a Excel por esse método aqui no fórum, postado pelo Quintas:
Importando de planilha Excel - nome da planilha
#include <hmg.ch>
declare window impcax
FUNCTION ABRE_TXT()
local linhas_excel:={}
LOCAL X , i, contavazias,oarquivo
contavazias:=0
oarquivo:=impcax.text_1.value
x:=impcax.text_2.value
// ---------------------
SELEC 3
use &oarquivo alias caixados
if neterr()
msginfo("NAO FOI POSSIVEL ABRIR O ARQUIVO - FECHAR O SISTEMA DO ALEXANDRE ANTES DE IMPORTAR OS LANÇAMENTOS")
RETURN
endif
// ---------------------
DBGOBOTTOM()
IF LASTREC() <=1
Wzdoc:=0
ELSE
Wzdoc:=lastrec()
ENDIF
// abre planilha do excel
oExcel:=ToleAuto():new("Excel.Application")
oExcel:Workbooks:Open(x)
oExcel:Visible := .F.
for i=5 to 70000 && atenção pega apenas 70000 lancamentos - percorre planilha do excel
VCnpj :=oExcel:Cells( i, 1 ):value
VRazao :=oExcel:Cells( i, 2 ):value
VData :=oExcel:Cells( i, 3 ):value AS STRING
iif(impcax.radiogroup_1.value=1,VSerie:=oExcel:Cells(i,5):value,VSerie:=oExcel:Cells(i,4):value)
iif(impcax.radiogroup_1.value=1,VEspecie:=oExcel:Cells(i,6):value,VEspecie:=oExcel:Cells(i,5):value)
iif(impcax.radiogroup_1.value=1,VNumero:=oExcel:Cells(i,7):value,VNumero:=oExcel:Cells(i,6):value AS STRING )
VCfop:=oExcel:Cells(i,9):value
VVc:=oExcel:Cells( i, 10):value
VBcIcms:=oExcel:Cells( i, 11 ):value
VIcms :=oExcel:Cells( i, 12 ):value
VBcIpi :=oExcel:Cells( i, 17 ):value
VIpi :=oExcel:Cells( i, 18 ):value
if .not. empty(vcnpj)
Aadd(linhas_excel,{vcnpj,vrazao,vdata,vserie,vespecie,vnumero,vcfop,vvc,vbcicms,vicms,vbcipi,vipi})
else
skip
contavazias:=contavazias+1
if contavazias>=30
contaazias:=0
exit
endif
endif
next
oExcel:Workbooks:Close()
// validando variaveis para gravação no dbf
// {vcnpj,vrazao,vdata,vserie,vespecie,vnumero,vcfop,vvc,vbcicms,vicms,vbcipi,vipi}
for i=1 to len(linhas_excel)
wzdoc:=Wzdoc+1
IIF(VALTYPE(linhas_excel[i][3])<>"U",wzdat:=linhas_excel[i][3]+"/"+STR(impcax.SPINNER_1.VALUE,4),wzdat:=ctod(" / / "))
IF VALTYPE(LINHAS_excel[I][7]) ="C"
IF SUBSTR(LINHAS_excel[I][7],1,1) = "1" .OR. SUBSTR(LINHAS_excel[I][7],1,1) ="2" .OR. SUBSTR(LINHAS_excel[I][7],1,1) ="3"
WZHIS:="COMPRAS REALIZADAS CF DUPL"
ELSE
WZHIS:="VENDAS REALIZADAS CF DUPL"
ENDIF
ELSE
msginfo(VALTYPE(LINHAS_excel[I][7])+"Tipo de Campo Invalido - gravou espacos no historico")
WZHIS:=SPACE(10)
ENDIF
WZVAL:= LINHAS_excel[I][8]
WZCOD:=strzero(val(impcax.TEXT_4.VALUE),4)
WZCMP:="NF "+strzero(LINHAS_excel[I][6],6)+" "+LINHAS_excel[I][2]
IIF(impcax.radiogroup_1.value=1,VZOPE:="E",VZOPE:="S")
VZCHI="00"
grava_registro()
next
SELECT 3
CLOSE ALL
msginfo("ARQUIVO GERADO COM SUCESSO")
RETURN
function grava_registro()
append blank
replace zdoc with str(Wzdoc,10)
replace zdat with ctod(wzdat)
replace zope with VZOPE
replace zchi with VZCHI
replace zhis with wzhis
replace zval with wzval
replace zcod with wzcod
replace zcmp with wzcmp
impcax.edit_1.value:=3->zdoc
return