Foros del Web » Programando para Internet » Python »

verificar la estructura de excel es la correcta

Estas en el tema de verificar la estructura de excel es la correcta en el foro de Python en Foros del Web. Hola tengo mi aplicacion que lee 2 tipos de archivos de excel y los datos del excel los guarda en en una base de datos ...
  #1 (permalink)  
Antiguo 24/09/2014, 12:50
 
Fecha de Ingreso: julio-2011
Ubicación: Peru
Mensajes: 92
Antigüedad: 12 años, 9 meses
Puntos: 1
verificar la estructura de excel es la correcta

Hola tengo mi aplicacion que lee 2 tipos de archivos de excel y los datos del excel los guarda en en una base de datos

pero me an pedido que si que alteran el la estructura del archivo del excel y quieran guardarla en al bd de mendiante la aplicacion que salga un mensaje diciendo que no se va poder porque alteraron la estructura
aqui les dejo el codigo esperando su pronta ayuda

views.py
Código Python:
Ver original
  1. class DataExcelProcessView(TemplateView):
  2.     template_name = 'app/volver.html'
  3.  
  4.     def get(self, request, *args, **kwargs):
  5.         return super(DataExcelProcessView, self).get(request, args, kwargs)
  6.  
  7.     def get_context_data(self, **kwargs):
  8.         ctx = super(DataExcelProcessView, self).get_context_data(**kwargs)
  9.         ctx['lista_data'] = self.process_file()
  10.         return ctx
  11.  
  12.     def process_file(self):
  13.         data = DataExcel.objects.get(pk=self.kwargs['pk'])
  14.         book = xlrd.open_workbook(data.file.path)
  15.         hoja1 = book.sheet_by_index(0)
  16.  
  17.         if data.tienda == 1:
  18.  
  19.             fields = ('codsucursal', 'sucursal', 'coddivision', 'division', 'codarea', 'area', 'coddpto', 'dpto', 'codlinea',
  20.                         'linea', 'codsublinea', 'sublinea', 'codmodelo', 'modelo', 'codvariacion', 'variacion', 'codmarca',
  21.                         'marca', 'codproveedor', 'proveedor', 'temporada', 'procedencia', 'tiponeg', 'color', 'talla',
  22.                         'semantig', 'conventa', 'constockoh', 'esrebate', 'concobertura', 'vtaund', 'vtasmf', 'contr',
  23.                         'costo', 'stock_oh', 'costo_oh', 'cbt')
  24.  
  25.             products = [Ripley(id_dataexcel=data,**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})
  26.                                     for rowid in range(1, hoja1.nrows)]
  27.             #print products
  28.  
  29.             for product in products:
  30.                 product.color = str(product.color).replace('.0', '')
  31.                 product.talla = str(product.talla).replace('.0', '')
  32.                 product.semantig = str(product.semantig).replace('.0', '')
  33.                 product.vtaund = str(product.vtaund).replace('.0', '')
  34.                 product.stock_oh = str(product.stock_oh).replace('.0', '')
  35.                 product.cbt = str(product.cbt).replace('.0', '')
  36.  
  37.             try:
  38.                 Ripley.objects.bulk_create(products)
  39.                 data.active= False
  40.                 data.save()
  41.  
  42.             except IntegrityError as e:
  43.                     return False
  44.  
  45.         elif data.tienda == 2:
  46.  
  47.             fields = ('codigo','consignacion','tipo_trx','fecha_proceso','fecha_trx','local',
  48.                         'ccosto','subclase','ean','sku','descripcion_sku','caja_vta','nro_trx_vta','cantidad',
  49.                         'base_imponible_vta','impto_vta','monto_timbrado_vta','tipo_comision','monto_comision',
  50.                         'costo_vta','igv_costo_vta','total_costo_vta','local_trx_ori','fecha_trx_ori','caja_trx_ori','nro_trx_ori')
  51.  
  52.             #print [(fields[i], c) for i, c in enumerate(hoja1.row_values(110))]
  53.  
  54.             products_saga = [Saga(id_dataexcel=data,**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})
  55.                                             for rowid in range(6, hoja1.nrows)]
  56.  
  57.  
  58.             for saga in products_saga:
  59.                 saga.ean = str(int(saga.ean))
  60.                 saga.fecha_proceso = date(1899,12,30) + timedelta(days=(int(saga.fecha_proceso)))
  61.                 saga.fecha_trx = date(1899,12,30) + timedelta(days=(int(saga.fecha_trx)))
  62.  
  63.                 if saga.local_trx_ori == '':
  64.                     saga.local_trx_ori=None
  65.  
  66.                 if saga.fecha_trx_ori == '':
  67.                     saga.fecha_trx_ori = None
  68.                 else:
  69.                    saga.fecha_trx_ori = date(1899,12,30) + timedelta(days=(int(saga.fecha_trx_ori)))
  70.  
  71.                 if saga.caja_trx_ori == '':
  72.                     saga.caja_trx_ori=None
  73.  
  74.                 if saga.nro_trx_ori == '':
  75.                     saga.nro_trx_ori=None
  76.  
  77.  
  78.             try:
  79.                 Saga.objects.bulk_create(products_saga)
  80.                 data.active = False
  81.                 data.save()
  82.             except IntegrityError as e:
  83.                     return False
  #2 (permalink)  
Antiguo 24/09/2014, 14:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: verificar la estructura de excel es la correcta

1. Checa que los headers esten en el orden correcto.
2. Checa cada fila, si esperas un numero que devuelva un numero, si esperas una cadena que devuelva una cadena, si es una fecha que devuelva una fecha. Etc....
3. Si algún fila y campo falla entonces arroja un error.

Así de simple.
  #3 (permalink)  
Antiguo 29/09/2014, 15:00
 
Fecha de Ingreso: julio-2011
Ubicación: Peru
Mensajes: 92
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: verificar la estructura de excel es la correcta

Tiene algun ejemplo o alguiqn q tega algun ejemplo necesitu ayuda por favor

Etiquetas: correcta, estructura, excel, ip, verificar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:52.