Excels, POO, y Source!

IPv7 listas.internet en gmail.com
Mie Feb 18 01:46:44 CET 2009


Disculpen no se por que no llego quizas los attach no estan
permitidos, copio el codigo aquí, no es mucho.
De paso, contesto:
El script surgio por un tema en el trabajo:
Todos los dias debo utilizas una "base de datos" la cual me la dan en
excels, estos se renuevan dia a dia,
y son muchisimos, ademas de ser grande cada uno de ellos.
No conocia esa libreria, le exploraré, y veré si se puede usar para lo
que necesito.
Eso si... es completamente impractico pasar 60 excels por dia a otro
formato manualmente.
Pero en caso de de que se se pueda hacer automaticamente, con gusto
los pasaria para usar una libreria y un formato libre.
Muchas graicas por tu aporte!

#!/usr/bin/python

"""  Libreria/Script para:
	listar columnas de un excel
	listar filas de un excel
	buscar un valor dentro de todas las celdas del excel
	imprimir un celda en particular  """
from os import path
import sys
from xlrd import *
class excelent ():
	""" Clase que carga un excel y pemite buscar e imprimir valores del excel"""
	def __init__(self,filename):
		""" Inicializa el objeto cargando el ecxel,
			carga los valores por defecto y
			comprueba si existe el archivo """
		self.filename = filename
		self.show_zeros = 0
		self.show_blank = 0
		self.n_sheet = 0
		if not path.exists(self.filename):
			print "El archivo " + self.filename + " no existe "
			exit (1)
		try:
			self.book = open_workbook ( self.filename )
		except:
			print "No se pudo cargar el archivo " + self.filename
		
	def __load_sheet__(self, ns = 0):
		""" Carga la tab pasada como argumento. Primero verifica si existe """
		self.n_sheet = ns
		if self.n_sheet > self.book.nsheets or self.n_sheet < 0:
			print "La hoja elegida no existe o no se puede cargar"
		else:
			self.sheet = self.book.sheet_by_index(self.n_sheet)

	def __show_data__(self, datastack, sz = 0, sb = 0):
		""" Imprime los valores pasados como argumento, verifica si los
valores son 0 o nulos"""
		self.show_zeros = sz
		self.show_blank = sb	
		for i in datastack:
			if self.show_zeros != 0:
				if i.value == 0 or i.value == "0":
					pass
				else:
					print i.value
			elif self.show_blank != 0:
				if i.value == "":
					pass
				else:
					print i.value
			else:
				print i.value
					
	
	def print_col (self,n_col=0,s=0):
		""" Imprime un columna dada"""
		self.__load_sheet__(s)	
		if n_col > self.sheet.ncols:
			print "La columna elegida no existe"
			exit(1)
		else:
			self.__show_data__ ( self.sheet.col_slice(n_col) )
			
	def print_row (self,n_row=0,s=0):A
		""" Imprime una fila dada"""
		self.__load_sheet__(s)
		if n_row > self.sheet.nrows:
			print "La fila elegida no existe"
			exit(1)
		else:
			self.__show_data__ ( self.sheet.row_slice(n_row) )

	def print_cell (self,n_row,n_col,s=0):
		""" Imprime una celda dada"""
		self.__load_sheet__(s)
		if n_row < self.sheet.nrows and n_col < self.sheet.ncols:
			c = self.sheet.cell(n_row,n_col)	
			print c.value
		else:
			print "La celda no existe"
			exit(1)
	
	def __search__ (sefl, word, data_array):
		""" Busca el primer argumento en el array (segundo argumento) """
		search_count = 0
		field_found = []
		for examined in data_array:
			if examined.value == word:
				field_found.append( search_count )
			search_count += 1
		return field_found

	def sheet_search (self, word, n_sheet):
		""" Busca un valor en todas las columnas de una tab dada"""
		self.__load_sheet__(n_sheet)
		col_count = 0
		result = {}

		for col in range(0,self.sheet.ncols):
			found = self.__search__(word, self.sheet.col_slice(col))
			if len ( found ) > 0:
				result[col_count] = found
			col_count += 1
		return result
	
	def search ( self, word ):
		""" Busca un valor en todo el excel (tab por tab, columna por columna) """
		matchs = {}
		for sheet in range(0,self.book.nsheets ):
			srch = self.sheet_search(word,sheet)
			matchs[sheet] = srch
		return matchs


if __name__ == "__main__":
	file = sys.argv[1]
	b = excelent(file)
	r =  o.search("Valor a buscar")
	for a in r:
		print "Se encontro coincidencias en la tab ", a
		for b in r[a]:
			print "		En la columna ", b
			for c in r[a][b]:
				print "				Fila ", c
	o.print_col(0)






#!/usr/bin/python
"""  Libreria/Script para:
	listar columnas de un excel
	listar filas de un excel
	buscar un valor dentro de todas las celdas del excel
	imprimir un celda en particular  """
from os import path
import sys
from xlrd import *
class excelent ():
	""" Clase que carga un excel y pemite buscar e imprimir valores del excel"""
	def __init__(self,filename):
		""" Inicializa el objeto cargando el ecxel,
			carga los valores por defecto y
			comprueba si existe el archivo """
		self.filename = filename
		self.show_zeros = 0
		self.show_blank = 0
		self.n_sheet = 0
		if not path.exists(self.filename):
			print "El archivo " + self.filename + " no existe "
			exit (1)
		try:
			self.book = open_workbook ( self.filename )
		except:
			print "No se pudo cargar el archivo " + self.filename
		
	def __load_sheet__(self, ns = 0):
		""" Carga la tab pasada como argumento. Primero verifica si existe """
		self.n_sheet = ns
		if self.n_sheet > self.book.nsheets or self.n_sheet < 0:
			print "La hoja elegida no existe o no se puede cargar"
		else:
			self.sheet = self.book.sheet_by_index(self.n_sheet)

	def __show_data__(self, datastack, sz = 0, sb = 0):
		""" Imprime los valores pasados como argumento, verifica si los
valores son 0 o nulos"""
		self.show_zeros = sz
		self.show_blank = sb	
		for i in datastack:
			if self.show_zeros != 0:
				if i.value == 0 or i.value == "0":
					pass
				else:
					print i.value
			elif self.show_blank != 0:
				if i.value == "":
					pass
				else:
					print i.value
			else:
				print i.value
					
	
	def print_col (self,n_col=0,s=0):
		""" Imprime un columna dada"""
		self.__load_sheet__(s)	
		if n_col > self.sheet.ncols:
			print "La columna elegida no existe"
			exit(1)
		else:
			self.__show_data__ ( self.sheet.col_slice(n_col) )
			
	def print_row (self,n_row=0,s=0):A
		""" Imprime una fila dada"""
		self.__load_sheet__(s)
		if n_row > self.sheet.nrows:
			print "La fila elegida no existe"
			exit(1)
		else:
			self.__show_data__ ( self.sheet.row_slice(n_row) )

	def print_cell (self,n_row,n_col,s=0):
		""" Imprime una celda dada"""
		self.__load_sheet__(s)
		if n_row < self.sheet.nrows and n_col < self.sheet.ncols:
			c = self.sheet.cell(n_row,n_col)	
			print c.value
		else:
			print "La celda no existe"
			exit(1)
	
	def __search__ (sefl, word, data_array):
		""" Busca el primer argumento en el array (segundo argumento) """
		search_count = 0
		field_found = []
		for examined in data_array:
			if examined.value == word:
				field_found.append( search_count )
			search_count += 1
		return field_found

	def sheet_search (self, word, n_sheet):
		""" Busca un valor en todas las columnas de una tab dada"""
		self.__load_sheet__(n_sheet)
		col_count = 0
		result = {}

		for col in range(0,self.sheet.ncols):
			found = self.__search__(word, self.sheet.col_slice(col))
			if len ( found ) > 0:
				result[col_count] = found
			col_count += 1
		return result
	
	def search ( self, word ):
		""" Busca un valor en todo el excel (tab por tab, columna por columna) """
		matchs = {}
		for sheet in range(0,self.book.nsheets ):
			srch = self.sheet_search(word,sheet)
			matchs[sheet] = srch
		return matchs


if __name__ == "__main__":
	file = sys.argv[1]
	b = excelent(file)
	r =  o.search("Valor a buscar")
	for a in r:
		print "Se encontro coincidencias en la tab ", a
		for b in r[a]:
			print "		En la columna ", b
			for c in r[a][b]:
				print "				Fila ", c
	o.print_col(0)


2009/2/17 Henry Sanchez <henry_092 en yahoo.com>:
>
> Hola,
>
> El problema con pyuno de OpenOffice es que no hay documentacion, por lo menos en español, mientras que se se quiere programar en Excel, hay infinidad de manuales de VBA y algo de VSTO.
>
> Personalmente, tengo una aplicacion (muy buena, creo yo) realizada en VBA, es decir, para Excel y alguna vez se me ocurrio hacer eso mismo para Calc, me dedique un buen tiempo a buscar informacion respecto a pyuno, pero nada, finalmente desisti del proyecto.
>
> Saludos,
>
> Henry
>
>
> --- El mar 17-feb-09, Miguel Ángel García <magmaxlistas en gmail.com> escribió:
>
>> De: Miguel Ángel García <magmaxlistas en gmail.com>
>> Asunto: Re: [Python-es] Excels, POO, y Source!
>> A: "Lista de discusión sobre python en castellano" <python-es en aditel.org>
>> Fecha: martes, 17 febrero, 2009, 2:41 pm
>> Hola.
>>
>> Pues el código no ha llegado. De todas maneras, ¿por qué
>> usar una
>> librería privativa que sólo me deja leer un formato
>> privativo pudiendo
>> utilizar pyuno (de openoffice) que me permite leer y
>> modificar :-P
>>
>> Pues eso: que podrías echar un ojo a pyuno, con la que se
>> supone que se
>> puede hacer eso mismo y muchísimo más. Y está orientada
>> a objetos :D
>>
>> Ciao!!
>>
>> El Tue, 17 Feb 2009 13:34:24 -0200
>> IPv7 <listas.internet en gmail.com> escribió:
>>
>> > Estimados compañeros:
>> >     Estoy iniciandome en python y en la POO. Una de
>> las primeras cosas
>> > que me toco experimentar, fue con la libreria: XLRD
>> > Esta libreria (xlrd) sirve para leer los datos de los
>> archivos excel
>> > (los de MS) (no sirve para modificarlos).
>> > Mis problemas me requerian poder listar ciertos datos
>> de un excel en
>> > la consola, para usarlos en un script.
>> > Asi que desarrolle un script en python que hacia esto,
>> pero era bien
>> > simple. Un dia un compañero me recomendo que probara
>> programando
>> > orientado a objetos, y eso intente hacer:
>> > Codee un/a mini script/libreria que permite listar
>> > columnas/filas/celdas y buscar valores de un excel.
>> >
>> > Les comparto el codigo, para quien quiera mirar y
>> aprender, pero mas
>> > aun, para que la critiquen (constructivamente)
>> > y me aconsejen que cosas y conceptos se podrian
>> mejorar.
>> >
>> > Saludos a todos y muchas gracias!
>>
>>
>> --
>> In a world without walls and fences, who needs Windows and
>> Gates?
>> "Microsoft ha lanzado una nueva versión, Windows XP,
>> que según todo el
>> mundo 'es la versión más fiable de Windows hasta la
>> fecha'. Para mí,
>> esto es como decir que el espárrago es el vegetal más
>> articulado que
>> ha existido nunca"
>>      -- Dave Barry
>> _______________________________________________
>> Lista de correo Python-es
>> http://listas.aditel.org/listinfo/python-es
>> FAQ: http://listas.aditel.org/faqpyes
>
>
>      ¡Sé el Bello 51 de People en Español! ¡Es tu oportunidad de Brillar! Sube tus fotos ya. http://www.51bello.com/
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>



-- 
---------------------------------------
-   El conocimiento es poder   -
- y el saber nos hace libres.    -
---------------------------------------
irrealnet.blogspot.com
Linux User #405757
Machine Linux #310536
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es