Ayuda con txt en Macro basic

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
martinq_23
Mensajes: 6
Registrado: Jue Mar 26, 2009 12:44 am

Ayuda con txt en Macro basic

Mensaje por martinq_23 »

Hola, necesito ayuda urgente, tengo una planilla en calc, la cual debe tomar datos de un txt (porcvta.txt), los datos del txt están separados por espacios.
Despues de eso, los tengo que ordenar, que eso ta, busco y veo como lo hago, pero bajé un ejemplo de tomar un txt y no me funciona.
Gracias por la ayuda, espero respuestas
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con txt en Macro basic

Mensaje por FJCC-ES »

Si no funcione este código, puede usted adjuntar un archivo txt?

Código: Seleccionar todo

Dim Propval(1) as New com.sun.star.beans.PropertyValue
Propval(0).Name = "FilterName"
Propval(0).Value = "Text - txt - csv (StarCalc)"
Propval(1).Name = "FilterOptions"
Propval(1).Value ="32,34,0,1,1"   'ASCII  32 = espacio
NombreArchivo = "C:\Documents and Settings\username\Desktop\Archivo.txt"  'Cambie al archivo correcto
ArchivoURL = convertToURL(NombreArchivo)
oCSV = StarDesktop.loadComponentFromURL(ArchivoURL, "_blank", 0, Propval())
martinq_23
Mensajes: 6
Registrado: Jue Mar 26, 2009 12:44 am

Re: Ayuda con txt en Macro basic

Mensaje por martinq_23 »

Muchas gracias FJCC-ES, anduvo impecable el código, si sabes tambien, te podria pasar el archivo, para ver como me queda.
Despues estoy buscando ordenarlo, se que es mas complicado, pero si tienes algun ejemplo que me sirva, te agradeceria.
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con txt en Macro basic

Mensaje por FJCC-ES »

Este código ordena A1:C16

Código: Seleccionar todo

Dim Hoja, Celda, Cellrange
Dim PropVal(4) as New com.sun.star.beans.PropertyValue
Dim aSortFields(1) as New com.sun.star.table.TableSortField

Doc = ThisComponent
Hoja = Doc.Sheets.getByName("Hoja1")
Cellrange = Hoja.getCellRangeByPosition(0,0,2,15)  'A1:C16  Columna A = índice 0,  Fila 1 = índice 0

Celda = Hoja.getCellByPosition(0,20) ' A21

aSortFields(0).Field = 0  'Ordenar primero por la primera columna en CellRange
aSortFields(0).IsAscending = "True"

aSortFields(1).Field = 1  'y después ordena por la segunda columna en CellRange
aSortFields(1).IsAscending = "True"

PropVal(0).Name = "SortFields"
PropVal(0).Value = aSortFields()
PropVal(1).Name = "IsSortColumns"
PropVal(1).Value = False

PropVal(2).Name = "OutputPosition"  'pon el resultado en la posición de Celda
PropVal(2).Value = Celda.CellAddress           
PropVal(3).Name = "CopyOutputData"
PropVal(3).Value = True

PropVal(4).Name = "ContainsHeader"  'La primera fila contiene títulos
PropVal(4).Value = True

Cellrange.sort(PropVal())
martinq_23
Mensajes: 6
Registrado: Jue Mar 26, 2009 12:44 am

Re: Ayuda con txt en Macro basic

Mensaje por martinq_23 »

Te envio el archivo que tengo que tomar en la macro...es un txt
Gracias
Adjuntos
Macro.zip
Va el archivo xls y el txt...También lo tengo guardado como odt
(13.19 KiB) Descargado 334 veces
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con txt en Macro basic

Mensaje por FJCC-ES »

Ahora entiendo el problema. Los espacios en el archivo significan dos cosas
1.Separan columnas de datos
2.Separan palabras - MISTRAL BOXER CLASICO tiene dos espacios pero la intención es que permanezca en la misma columna
Es difícil escribir una macro que distingue entre los dos significados. ¿Se puede usar comas para separar los datos en el txt?
martinq_23
Mensajes: 6
Registrado: Jue Mar 26, 2009 12:44 am

Re: Ayuda con txt en Macro basic

Mensaje por martinq_23 »

Hola, gracias por ver el tema, los espacios en el txt son divisores de datos...
Podrias ayudarme, ya se que te he molestado, pero la verdad lo necesito.
Gracias nuevamente
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con txt en Macro basic

Mensaje por FJCC-ES »

Aquí está una macro nueva. Está versión no usa espacios para separar los datos, usa la opción “Ancho fijo”. Dudo que los datos en otros archivos tengan el mismo ancho, pero mas que esto no puedo hacer.

Código: Seleccionar todo

    Dim Propval(1) as New com.sun.star.beans.PropertyValue
    Propval(0).Name = "FilterName"
    Propval(0).Value = "Text - txt - csv (StarCalc)"
    Propval(1).Name = "FilterOptions"
    Propval(1).Value ="FIX,34,0,1,0/1/1/1/28/1/39/1/47/1/52/1/59/1/65/1/70/1"   
    'Fix = Ancho Fijo, 34 = el arácter " marca texto, 0 = juego de caracteres predeterminado, 1 = empezar con la fila primera
    '0/1 significa que el dato primero empieza en posición 0 y es de el tipo predeterminado, Los otros datos empiezan en posiciones
    ' 1,28,39,47,52,59,65,70 y todos son de el tipo predeterminado

    NombreArchivo = "C:\Documents and Settings\username\Desktop\porcvta.txt"  'Cambie al archivo correcto
    ArchivoURL = convertToURL(NombreArchivo)
    oCSV = StarDesktop.loadComponentFromURL(ArchivoURL, "_blank", 0, Propval())
    
    'Ordenar Filas 1 y 2
    Hoja = oCSV.Sheets.getByIndex(0)
    Cellrange = Hoja.getCellRangeByPosition(1,0,4,0)
    Cell1 = CellRange.getCellByPosition(0,0)
    For i = 1 to 3
    Cell2 = CellRange.getCellByPosition(i,0)
    Cell1.String = Cell1.String + Cell2.String
    Cell2.String = ""
    Next i
    CellRange.Merge(True)
    
    Cell1 = Hoja.getCellByPosition(6,0)
    Cell2 = Hoja.getCellByPosition(7,0)
    Cell1.String = Cell1.String + Cell2.String
    Cell2.String = ""
    
    Cell1 = Hoja.getCellByPosition(2,1)
    Cell2 = Hoja.getCellByPosition(3,1)
    Cell1.String = Cell1.String + Cell2.String
    Cell2.String = ""
martinq_23
Mensajes: 6
Registrado: Jue Mar 26, 2009 12:44 am

Re: Ayuda con txt en Macro basic

Mensaje por martinq_23 »

Muchisimas gracias...la verdad me salvaste.
Impecable el código.
Anda muy bien, el ancho fijo y los datos bien ordenados.
La verdad muy buena la ayuda :geek: :D
Responder