Página 1 de 2
Importando de planilha Excel - nome da planilha
Enviado: 20 Set 2011 14:39
por JoséQuintas
Eu uso esta rotina no VB e funciona normalmente.
No Harbour, a parte pra pegar o nome da planilha não funciona. (está com //)
Há alguma outra forma de pegar o nome da planilha, ou existe algum nome default?
Obs. Só a parte de pegar nome é que não funciona.
Código: Selecionar todos
cnExcel := ConexaoExcel(mFileExcel)
cnExcel:Open()
// rsExcel := CreateObject("ADODB.Recordset")
// rsExcel := cnExcel:OpenSchema(20) // adSchemaTables
// cSheetName := cnExcel:Fields("table_name"):Value
// rsExcel:Close()
// rsExcel := NIL
cSheetName := "[AgenteRegulado$]"
cSql := "SELECT COUNT(*) AS QTD FROM " + cSheetName
rsExcel := cnExcel:Execute(cSql)
nQtdTotal := rsExcel:Fields("QTD"):Value
rsExcel:Close()
cSql := "select * from " + cSheetName
rsExcel := cnExcel:Execute(cSql)
rsExcel:MoveFirst()
Do While .Not. rsExcel:Eof()
rsExcel:MoveNext()
Enddo
RsExcel:Close()
rsExcel := NIL
cnExcel:Close()
cnExcel := NIL
Importando de planilha Excel - nome da planilha
Enviado: 20 Set 2011 22:01
por alxsts
Olá!
As informações do Toledo
neste tópico são bastante úteis. Veja se te ajuda.
Importando de planilha Excel - nome da planilha
Enviado: 21 Set 2011 08:21
por JoséQuintas
O outro tópico é sobre usar o Excel instalado na máquina, é interessante mas não resolve pra onde não tem Excel.
Importando de planilha Excel - nome da planilha
Enviado: 21 Set 2011 08:40
por Itamar M. Lins Jr.
Não sei se é isso, mas...
Código: Selecionar todos
FUNCTION MAIN()
LOCAL oExcel, oSheet
LOCAL nRow
oExcel = win_oleCreateObject( "Excel.Application" )
oExcel:WorkBooks:Add()
oSheet = oExcel:ActiveSheet
USE TEST
nRow = 1
WHILE !EOF()
oSheet:Cells( nRow, 1 ):Value = FIELD -> last
oSheet:Cells( nRow, 2 ):Value = FIELD -> first
nRow++
SKIP
ENDDO
oExcel:Visible = .T.
RETURN NIL
Exemplo reproduzido no grupo internacional de usuários do Harbour.
Tem outro lá zipado.
Saudações,
Itamar M. Lins Jr.
Importando de planilha Excel - nome da planilha
Enviado: 21 Set 2011 10:17
por JoséQuintas
Esse exemplo que colocou faz uma conexão COM O EXCEL APLICATIVO. Só funciona se tiver Excel instalado na máquina.
Mas decidi deixar com nome de planilha fixo. Quando houver mudança gero um novo EXE.
Importando de planilha Excel - nome da planilha
Enviado: 21 Set 2011 12:01
por Itamar M. Lins Jr.
Se observar direito verás que a função é WIN_OleCreateObject, para fazer a conexão, não importa o que seja.
Por exemplo:
Código: Selecionar todos
rsExcel := CreateObject("ADODB.Recordset")
//troque por
rsExcel := Win_OleCreateObject("ADODB.Recordset")
Esse código eu não testei.
Saudações,
Itamar M. Lins Jr.
Importando de planilha Excel - nome da planilha
Enviado: 21 Set 2011 20:32
por JoséQuintas
Estou usando Harbour 3.0.
Nele tem CreateObject() igual xHarbour.
E também tem na hbwin.lib esse outro.
Nenhum dos dois aceitou a função de retornar o nome da planilha.
A importação funciona normal, só a função pra retornar o nome da planilha que não funciona.
Aliás... algumas coisas em OLE parecem não funcionar direito, por causa do tipo de informação que retorna.
Importando de planilha Excel - nome da planilha
Enviado: 22 Set 2011 08:30
por Itamar M. Lins Jr.
Sua versão é depois dessa correção ?
2011-07-23 15:08 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbwin/olecore.c
! fixed to use Harbour STR API instead of hardcoded ANSI CP for
conversions between Harbour and OLE items.
Patch provided by Phil Krylov with some minor modifications.
Saudações,
Itamar M. Lins Jr.
Importando de planilha Excel - nome da planilha
Enviado: 22 Set 2011 08:34
por Itamar M. Lins Jr.
Qual é a função que retorna o nome da planilha ?
Saudações,
Itamar M. Lins Jr.
Importando de planilha Excel - nome da planilha
Enviado: 22 Set 2011 10:40
por JoséQuintas
É nesta parte
rsExcel := CreateObject("ADODB.Recordset")
rsExcel := cnExcel:OpenSchema(20) // adSchemaTables
cSheetName := cnExcel:Fields("table_name"):Value
rsExcel:Close()
Importando de planilha Excel - nome da planilha
Enviado: 22 Set 2011 20:46
por Itamar M. Lins Jr.
Qual linha exatamente ?
Se for nessa cSheetName tente algo similar a isto:
Código: Selecionar todos
oExcel := TOleAuto():New("Excel.Application")
oExcel:WorkBooks:Open( cFile_Excel)
If !Empty( cSheet )
cSheet := Alltrim( cSheet )
oHoja := oExcel:ActiveSheet()
oExcel:Sheets(cSheet):Select()
Endif
oHoja := oExcel:ActiveSheet()
Saudações,
Itamar M. Lins Jr.
Importando de planilha Excel - nome da planilha
Enviado: 22 Set 2011 20:51
por Itamar M. Lins Jr.
Tem mais esse outro exemplo aqui que pega esse tal Sheet...
Código: Selecionar todos
STATIC PROCEDURE Exm_MSExcel()
LOCAL oExcel, oWorkBook, oWorkSheet, oAS
LOCAL nI, nCount
IF ( oExcel := win_oleCreateObject( "Excel.Application" ) ) != NIL
oWorkBook := oExcel:WorkBooks:Add()
// Enumerator test
FOR EACH oWorkSheet IN oWorkBook:WorkSheets
? oWorkSheet:Name
NEXT
// oWorkBook:WorkSheets is a collection
nCount := oWorkBook:WorkSheets:Count()
// Elements of collection can be accessed using :Item() method
FOR nI := 1 TO nCount
? oWorkBook:WorkSheets:Item( nI ):Name
NEXT
// OLE also allows to access collection elements by passing
// indices to :Worksheets property
FOR nI := 1 TO nCount
? oWorkBook:WorkSheets(nI):Name
NEXT
oAS := oExcel:ActiveSheet()
// Set font for all cells
oAS:Cells:Font:Name := "Arial"
oAS:Cells:Font:Size := 12
oAS:Cells( 1, 1 ):Value := "OLE from Harbour"
oAS:Cells( 1, 1 ):Font:Size := 16
// oAS:Cells( 1, 1 ) is object, but oAS:Cells( 1, 1 ):Value has value of the cell
? "Object valtype:", ValType( oAS:Cells( 1, 1 ) ), "Value:", oAS:Cells( 1, 1 ):Value
oAS:Cells( 3, 1 ):Value := "String:"
oAS:Cells( 3, 2 ):Value := "Hello, World!"
oAS:Cells( 4, 1 ):Value := "Numeric:"
oAS:Cells( 4, 2 ):Value := 1234.56
oAS:Cells( 4, 3 ):Value := oAS:Cells( 4, 2 ):Value
oAS:Cells( 4, 4 ):Value := oAS:Cells( 4, 2 ):Value
oAS:Cells( 4, 3 ):Value *= 2
oAS:Cells( 4, 2 ):Value++
oAS:Cells( 5, 1 ):Value := "Logical:"
oAS:Cells( 5, 2 ):Value := .T.
oAS:Cells( 6, 1 ):Value := "Date:"
oAS:Cells( 6, 2 ):Value := DATE()
oAS:Cells( 7, 1 ):Value := "Timestamp:"
oAS:Cells( 7, 2 ):Value := HB_DATETIME()
// Some formatting
oAS:Columns( 1 ):Font:Bold := .T.
oAS:Columns( 2 ):HorizontalAlignment := -4152 // xlRight
oAS:Columns( 1 ):AutoFit()
oAS:Columns( 2 ):AutoFit()
oAS:Columns( 3 ):AutoFit()
oAS:Columns( 4 ):AutoFit()
oAS:Cells( 3, 2 ):Font:ColorIndex := 3 // red
oAS:Range( "A1:B1" ):HorizontalAlignment := 7
oAS:Range( "A3:A7" ):Select()
oExcel:Visible := .T.
oExcel:Quit()
ELSE
? "Error: MS Excel not available. [" + win_oleErrorText()+ "]"
ENDIF
RETURN
Saudações,
Itamar M. Lins Jr.
Importando de planilha Excel - nome da planilha
Enviado: 22 Set 2011 23:05
por JoséQuintas
Minha versão é 3.0 oficial.
Até baixei os fontes aqui da 3.1, do CVS, mas ainda não tentei compilar.
O uso de "Excel.Application" só funciona em máquina com Excel instalado.
Trata-se de usar o próprio Excel, ao contrário do ADO, que faz parte de qualquer Windows, sem precisar instalar nada adicional.
Importando de planilha Excel - nome da planilha
Enviado: 15 Out 2011 20:12
por JoséQuintas
Só hoje, mais tranquilo vi meu erro, na linha que pega o resultado
Código: Selecionar todos
cnExcel := Win_OleConexaoExcel(mFileExcel)
cnExcel:Open()
rsExcel := Win_OleCreateObject("ADODB.Recordset")
rsExcel := cnExcel:OpenSchema(20) // adSchemaTables
cSheetName := rsExcel:Fields("table_name"):Value
rsExcel:Close()
rsExcel := NIL
tinha digitado cnExcel:Fields() ao invés de rsExcel:Fields()
cnExcel = conexão ADO com o banco de dados ou planilha
rsExcel = registros contendo resultado
Agora retorna correto.
Obs.
Troquei CreateObject() por Win_OleCreateObject(), mas isso foi devido a atualização para Harbour 3.1
Importando de planilha Excel - nome da planilha
Enviado: 26 Mai 2012 00:05
por Abel
ola,
nao consigo usar este comando Win_OleCreateObject()
da erro de undefined reference to hb_fun_win_olecreateobject , estava lendo seus posts e vi que vc disse que este comando esta na include "hbwin.ch", mas mesmo assim nao consegui compilar.
sabe dizer o que pode estar faltando.
uso harbour 3.1 nigthy e hbide
abracos
ABEL