Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/06/2010, 13:52
Alex_10
 
Fecha de Ingreso: junio-2009
Mensajes: 10
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Escoger datos de las clases modelos

Si esa es una buena idea, voy a ir probando a ver que puedo averiguar, mientras le pongo aqui el codigo de la clase ExcelReport.

Código Python:
Ver original
  1. class ExcelReport(BaseReport):
  2.     """ MS Excel Style Reports """    
  3.     workbook = None
  4.     tempf = None
  5.     CHAR_WIDTH = 275
  6.    
  7.     def __init__(self):
  8.         self.workbook = xl.Workbook()
  9.         self.workbook._Workbook__use_cell_values = 0
  10.         self.cellformatters = {}
  11.         super(ExcelReport, self).__init__()
  12.      
  13.     def __del__(self):
  14.         if self.tempf and not self.tempf.closed:
  15.             self.tempf.close()
  16.    
  17.     def addCellFormatter(self,CellFormatter):
  18.         self.cellformatters[self.current_sheet] = CellFormatter
  19.        
  20.     def getCellFormatter(self):
  21.         return self.cellformatters
  22.    
  23.     def nextsheet(self,name=None):
  24.         """
  25.        Deprecated. Votovox is using this.
  26.        """
  27.         self.addSheet(name)
  28.    
  29.     def output(self):
  30.         """
  31.        Deprecated. Votovox is using this.
  32.        """
  33.         self.writeReport(self)
  34.    
  35.     def writeReport(self):
  36.         if not self.tempf:
  37.             self.tempf = StringIO.StringIO()
  38.            
  39.         for k, v in self.grids.iteritems():
  40.             self.current_x = 0
  41.             self.current_y = 0
  42.             ws = self.workbook.add_sheet(k)
  43.             grid = v.getGrid()
  44.             for col in grid:
  45.                 header_value = ''
  46.                 for item in col:
  47.                     if item.get_type() == ITEM_HEADER:
  48.                         header_value = item.get_value()
  49.                     if self.getFormatter()[k] != {}:
  50.                         if item.get_type() == ITEM_HEADER and self.getFormatter()[k].header_style is not None:
  51.                             self.style = self.getFormatter()[k].getHeaderStyle()
  52.                         elif self.getFormatter()[k].col_styles != {} and self.getFormatter()[k].getColumnStyle().has_key(header_value):
  53.                             self.style = self.getFormatter()[k].getColumnStyle(header_value)
  54.                         elif self.getFormatter()[k].alternate_color_style is not None and not helpers.isodd(self.current_x):
  55.                             self.style = self.getFormatter()[k].getAlternateColorStyle()
  56.                         elif self.getFormatter()[k].body_style is not None:
  57.                             self.style = self.getFormatter()[k].getBodyStyle()
  58.                         else:
  59.                             self.style = ExcelStyle().get_excel_style()
  60.                         if self.getFormatter()[k].getWidth() != {}:
  61.                             if self.getFormatter()[k].getWidth().has_key(header_value):
  62.                                 setwidth = self.getFormatter()[k].getWidth()[header_value]
  63.                                 self.__adjustwidth(item,setwidth)
  64.                             else:
  65.                                 self.__adjustwidth(item)
  66.                     else:
  67.                         self.__adjustwidth(item)
  68.                         self.style = ExcelStyle().get_excel_style()
  69.                     if self.get_format(item) != self.formatters['DEFAULT']:
  70.                         self.style.num_format_str = self.get_format(item)
  71.                     ws.write(
  72.                         self.current_x,
  73.                         self.current_y,
  74.                         item.get_value(),
  75.                         self.style
  76.                         )
  77.                     self.change_column_position()
  78.                 if self.getFormatter()[k] != {}:
  79.                     if self.getFormatter()[k].getFormula().has_key(header_value):
  80.                         excel_formula = '%s(%s%s:%s%s)' % (self.formatter.getFormula()[k][header_value],
  81.                                                            helpers.convert_to_letter(self.current_y),'2',
  82.                                                            helpers.convert_to_letter(self.current_y),
  83.                                                            self.current_x - 1)
  84.                         self.style = ExcelStyle().get_excel_style()
  85.                         ws.write(self.current_x,self.current_y,xl.Formula(excel_formula),self.style)
  86.                 self.change_row_position()
  87.         self.workbook.save(self.tempf)
  88.         return self.tempf.getvalue()
  89.  
  90.  
  91.     def __func_for_nums(item):
  92.         i = 0
  93.         style = '0.'
  94.         while i < item.get_percision():
  95.             style += '0'
  96.             i += 1
  97.         return style
  98.  
  99.  
  100.  
  101.     formatters = {
  102.         ITEM_DATETIME: 'M/D/YYYY h:mm:ss',
  103.         ITEM_DATE: 'M/D/YYYY',
  104.         ITEM_TIME: 'h:mm:ss',
  105.         ITEM_FLOAT: __func_for_nums,
  106.         ITEM_DECIMAL: __func_for_nums,
  107.         ITEM_INT: '0',
  108.         'DEFAULT': u'',
  109.     }
  110.    
  111.    
  112.     # Private internal methods
  113.     def __cellcord(self):
  114.         return self.current_x,self.current_y
  115.    
  116.     def __cursheet(self):
  117.         return self.workbook.get_sheet(self.sheetcount-2)
  118.    
  119.     def __adjustwidth(self,item,setwidth=0):
  120.         newlen =  item.get_length() * self.CHAR_WIDTH
  121.         if self.__cursheet().col(self.current_x).width < newlen:
  122.             if setwidth != 0:
  123.                 newlen = setwidth
  124.             self.__cursheet().col(self.current_y).width = newlen