mirror of https://github.com/jumpserver/jumpserver
				
				
				
			perf: 修改 Import export
							parent
							
								
									fa3bfceddc
								
							
						
					
					
						commit
						2ffb9a5aa3
					
				| 
						 | 
				
			
			@ -148,6 +148,9 @@ class BaseFileRenderer(BaseRenderer):
 | 
			
		|||
    def get_rendered_value(self):
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
 | 
			
		||||
    def after_render(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def render(self, data, accepted_media_type=None, renderer_context=None):
 | 
			
		||||
        if data is None:
 | 
			
		||||
            return bytes()
 | 
			
		||||
| 
						 | 
				
			
			@ -176,6 +179,7 @@ class BaseFileRenderer(BaseRenderer):
 | 
			
		|||
            self.initial_writer()
 | 
			
		||||
            self.write_column_titles(column_titles)
 | 
			
		||||
            self.write_rows(rows)
 | 
			
		||||
            self.after_render()
 | 
			
		||||
            value = self.get_rendered_value()
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logger.debug(e, exc_info=True)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ class ExcelFileRenderer(BaseFileRenderer):
 | 
			
		|||
 | 
			
		||||
    def write_row(self, row):
 | 
			
		||||
        self.row_count += 1
 | 
			
		||||
        self.ws.row_dimensions[self.row_count].height = 20
 | 
			
		||||
        column_count = 0
 | 
			
		||||
        for cell_value in row:
 | 
			
		||||
            # 处理非法字符
 | 
			
		||||
| 
						 | 
				
			
			@ -26,6 +27,19 @@ class ExcelFileRenderer(BaseFileRenderer):
 | 
			
		|||
            cell_value = ILLEGAL_CHARACTERS_RE.sub(r'', str(cell_value))
 | 
			
		||||
            self.ws.cell(row=self.row_count, column=column_count, value=str(cell_value))
 | 
			
		||||
 | 
			
		||||
    def after_render(self):
 | 
			
		||||
        for col in self.ws.columns:
 | 
			
		||||
            max_length = 0
 | 
			
		||||
            column = col[0].column_letter
 | 
			
		||||
            for cell in col:
 | 
			
		||||
                if len(str(cell.value)) > max_length:
 | 
			
		||||
                    max_length = len(cell.value)
 | 
			
		||||
            adjusted_width = (max_length + 2) * 1.0
 | 
			
		||||
            adjusted_width = 300 if adjusted_width > 300 else adjusted_width
 | 
			
		||||
            adjusted_width = 30 if adjusted_width < 30 else adjusted_width
 | 
			
		||||
            self.ws.column_dimensions[column].width = adjusted_width
 | 
			
		||||
            self.wb.save('/tmp/test.xlsx')
 | 
			
		||||
 | 
			
		||||
    def get_rendered_value(self):
 | 
			
		||||
        value = save_virtual_workbook(self.wb)
 | 
			
		||||
        return value
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue