Page 1 of 1

¿ Se puede saber el rango de un archivo Excel ?

Posted: Mon Jul 29, 2019 10:16 am
by wyerco613
Estimados Compañeros

Quizás esta pregunta sea un poco extraña, pero no se pierde nada con preguntar: ¿ Se puede conocer el rango de un archivo excel de 5 columnas 2 de caracteres y 3 numéricas (siempre son las mismas) ? Siempre de solo una página ( hoja o sheet ) lo importante es la cantidad de registros que tenga sin abrirla.

¿Se entiende?

Desde ya muchas Gracias

Waldemar

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Mon Jul 29, 2019 3:30 pm
by armando.lagunas
Waldemar, la verdad creo entender de deseas leer un archivo excel con un rango especifico y llevarla a tu sistema, encontré alguna vez esto en el foro y ojala te sirva o te oriente en lo que deseas.

Code: Select all

include "fivewin.ch"
#include "xbrowse.ch"

function Main()

   local oWnd, oBrw, oBar, oFont
   local oRange,  u

   SET DATE ITALIAN
   SET CENTURY ON

   fwNumFormat( 'E', .t. )

   msgRun( "Reading from Excel File",  "PLEASE WAIT", { || ;
   oRange   := GetExcelRange( ExePath() + "xbrtest.xls", "Customers", "A1:E12" ) ;
   } )

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE WINDOW oWnd TITLE "XBrowse Excel Sheet: FWH 11.07"
   oWnd:SetFont( oFont )
   DEFINE BUTTONBAR oBar OF oWnd 2007
   SET MESSAGE OF oWnd TO '' 2007

   @ 0,0 XBROWSE oBrw OF oWnd AUTOCOLS ;
      PICTURES nil, nil, nil, 'dd-mmm-yyyy', NumPict( 12,2 ) ;
      DATASOURCE oRange CELL LINES FOOTERS

   oBrw:Sales:bFooter   := { || oRange:Application:WorkSheetFunction:Sum(oRange:Columns(5)) }
   oBrw:nStretchCol     := 1
   oBrw:CreateFromCode()
   oWnd:oClient   := oBrw

   ACTIVATE WINDOW oWnd
   RELEASE FONT oFont
   oRange:WorkSheet:Parent:Close()

return nil

function ExePath()
return cFilePath( GetModuleFileName() )
 

saludos

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Mon Jul 29, 2019 3:53 pm
by csincuir
Waldemar,
Si ya tienes tu objeto de Excel, puedes usar estar instrucciones de Excel:

nFils := oXls:oSheet:UsedRange:Rows:Count() //<--- No de Filas o registros
nCols := oXls:oSheet:UsedRange:Columns:Count() //<--- No de Columas

Yo lo utilizo, usando la clase TExcelScrip()

Code: Select all

   cFile := "C:\doctos\excel\doctoexcel.xls"
   oXls := TExcelScript():New()
   oXls:Add( cFile )
   nFils := oXls:oSheet:UsedRange:Rows:Count()   //<--- No de Filas o registros
   nCols := oXls:oSheet:UsedRange:Columns:Count()  //<--- No de Columas 
 
Saludos.

Carlos.

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Tue Jul 30, 2019 10:46 am
by wyerco613
armando.lagunas wrote:Waldemar, la verdad creo entender de deseas leer un archivo excel con un rango especifico y llevarla a tu sistema, encontré alguna vez esto en el foro y ojala te sirva o te oriente en lo que deseas.

Code: Select all

include "fivewin.ch"
#include "xbrowse.ch"

function Main()

   local oWnd, oBrw, oBar, oFont
   local oRange,  u

   SET DATE ITALIAN
   SET CENTURY ON

   fwNumFormat( 'E', .t. )

   msgRun( "Reading from Excel File",  "PLEASE WAIT", { || ;
   oRange   := GetExcelRange( ExePath() + "xbrtest.xls", "Customers", "A1:E12" ) ;
   } )

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE WINDOW oWnd TITLE "XBrowse Excel Sheet: FWH 11.07"
   oWnd:SetFont( oFont )
   DEFINE BUTTONBAR oBar OF oWnd 2007
   SET MESSAGE OF oWnd TO '' 2007

   @ 0,0 XBROWSE oBrw OF oWnd AUTOCOLS ;
      PICTURES nil, nil, nil, 'dd-mmm-yyyy', NumPict( 12,2 ) ;
      DATASOURCE oRange CELL LINES FOOTERS

   oBrw:Sales:bFooter   := { || oRange:Application:WorkSheetFunction:Sum(oRange:Columns(5)) }
   oBrw:nStretchCol     := 1
   oBrw:CreateFromCode()
   oWnd:oClient   := oBrw

   ACTIVATE WINDOW oWnd
   RELEASE FONT oFont
   oRange:WorkSheet:Parent:Close()

return nil

function ExePath()
return cFilePath( GetModuleFileName() )
 

saludos
Estimado Armando justamente este es el parámetro ("A1:E12") que necesito, sin abrir el archivo Excel. ¿Abra un a forma?

Atentamente,

Waldemar

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Tue Jul 30, 2019 10:48 am
by wyerco613
csincuir wrote:Waldemar,
Si ya tienes tu objeto de Excel, puedes usar estar instrucciones de Excel:

nFils := oXls:oSheet:UsedRange:Rows:Count() //<--- No de Filas o registros
nCols := oXls:oSheet:UsedRange:Columns:Count() //<--- No de Columas

Yo lo utilizo, usando la clase TExcelScrip()

Code: Select all

   cFile := "C:\doctos\excel\doctoexcel.xls"
   oXls := TExcelScript():New()
   oXls:Add( cFile )
   nFils := oXls:oSheet:UsedRange:Rows:Count()   //<--- No de Filas o registros
   nCols := oXls:oSheet:UsedRange:Columns:Count()  //<--- No de Columas 
 

Saludos.

Carlos.
Estimado Carlos parece que es esto lo que necesito, voy a probar.

Muchas gracias

Saludos

Waldemar

P.D. Una cosa más ¿Cómo cierro el Objeto una vez obtenida la información?

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Tue Jul 30, 2019 11:06 am
by cmsoft

Code: Select all

FUNCTION LeerExcel(cFile)
oExcel:=TOleAuto():New("Excel.Application")
oBook := oExcel:Workbooks:Open(cFile)
oBook:Sheets(1):Select() // Aca si tuviese mas de una hoja podrias elegir cual
oHoja := oExcel:ActiveSheet()
nTotRowCount:= oHoja:UsedRange:Rows:Count()
mregis := nTotRowCount
FOR Q=2 TO nTotRowCount // Arranco desde la segunda fila porque la primera son titulos
    AADD(vColumna1,oHoja:Cells( Q, 1 ):Value)
    AADD(vColumna2,oHoja:Cells( Q, 2 ):Value)
    AADD(vColumna3,oHoja:Cells( Q, 3 ):Value)     
NEXT    
oExcel:WorkBooks:Close()
oExcel:Application:Quit()
oExcel:Quit()

RELEASE oHoja
RELEASE oExcel
RETURN Nil

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Tue Jul 30, 2019 2:58 pm
by wyerco613
cmsoft wrote:

Code: Select all

FUNCTION LeerExcel(cFile)
oExcel:=TOleAuto():New("Excel.Application")
oBook := oExcel:Workbooks:Open(cFile)
oBook:Sheets(1):Select() // Aca si tuviese mas de una hoja podrias elegir cual
oHoja := oExcel:ActiveSheet()
nTotRowCount:= oHoja:UsedRange:Rows:Count()
mregis := nTotRowCount
FOR Q=2 TO nTotRowCount // Arranco desde la segunda fila porque la primera son titulos
    AADD(vColumna1,oHoja:Cells( Q, 1 ):Value)
    AADD(vColumna2,oHoja:Cells( Q, 2 ):Value)
    AADD(vColumna3,oHoja:Cells( Q, 3 ):Value)     
NEXT    
oExcel:WorkBooks:Close()
oExcel:Application:Quit()
oExcel:Quit()

RELEASE oHoja
RELEASE oExcel
RETURN Nil
Estimado Cesar

lo he probado muchas veces pero me da un error que no encuentra el archivo excel

que estaré haciendo mal

Waldemar

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Wed Jul 31, 2019 11:02 am
by cmsoft
Waldemar:
Le estas pasando el nombre y path completo del archivo Excel?
Yo lo tengo funcionando en un programa tal cual te lo pase, levanto el archivo asi:

Code: Select all

cFile := SPACE(50)
DEFINE DIALOG oDlg TITLE "Importar " FROM 05,18 TO 16,62 
   @ 07, 05 SAY "Archivo a Importar" OF oDlg PIXEL
   @ 05, 70 GET oGet VAR cFile ;
   ACTION (oGet:cText := cGetFile( "Archivos Excel (*.xls)|*.xls|Todos los Archivos (*.*)|*.*", "Seleccione archivo a importar",, ".\", .f. ));
   OF oDlg PICTURE "@S20" PIXEL SIZE 70,12 BITMAP "BUSC1"
   @ 20,05 BUTTON oBot1 PROMPT "&Importar" OF oDlg SIZE 30,10 ;
           ACTION ((ok := .t.), oDlg:End() ) PIXEL WHEN(!EMPTY(oGet:cText)) UPDATE
   @ 20,90 BUTTON oBot2 PROMPT "&Cancelar" OF oDlg SIZE 30,10 ;
           ACTION ((ok := .f.), oDlg:End() ) PIXEL
   ACTIVATE DIALOG oDlg CENTER
IF !ok
   RETURN 
ENDIF

Re: ¿ Se puede saber el rango de un archivo Excel ?

Posted: Fri Aug 02, 2019 11:08 am
by wyerco613
cmsoft wrote:Waldemar:
Le estas pasando el nombre y path completo del archivo Excel?
Yo lo tengo funcionando en un programa tal cual te lo pase, levanto el archivo asi:

Code: Select all

cFile := SPACE(50)
DEFINE DIALOG oDlg TITLE "Importar " FROM 05,18 TO 16,62 
   @ 07, 05 SAY "Archivo a Importar" OF oDlg PIXEL
   @ 05, 70 GET oGet VAR cFile ;
   ACTION (oGet:cText := cGetFile( "Archivos Excel (*.xls)|*.xls|Todos los Archivos (*.*)|*.*", "Seleccione archivo a importar",, ".\", .f. ));
   OF oDlg PICTURE "@S20" PIXEL SIZE 70,12 BITMAP "BUSC1"
   @ 20,05 BUTTON oBot1 PROMPT "&Importar" OF oDlg SIZE 30,10 ;
           ACTION ((ok := .t.), oDlg:End() ) PIXEL WHEN(!EMPTY(oGet:cText)) UPDATE
   @ 20,90 BUTTON oBot2 PROMPT "&Cancelar" OF oDlg SIZE 30,10 ;
           ACTION ((ok := .f.), oDlg:End() ) PIXEL
   ACTIVATE DIALOG oDlg CENTER
IF !ok
   RETURN 
ENDIF
Muchas gracias Cesar

El problema es que tengo que pasar todo el PATH sino no encuentra el archivo xlsx

Lo hice así y funciono

Muy agradecido

Bendiciones

Waldemar