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):
|
def get_rendered_value(self):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def after_render(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def render(self, data, accepted_media_type=None, renderer_context=None):
|
def render(self, data, accepted_media_type=None, renderer_context=None):
|
||||||
if data is None:
|
if data is None:
|
||||||
return bytes()
|
return bytes()
|
||||||
|
@ -176,6 +179,7 @@ class BaseFileRenderer(BaseRenderer):
|
||||||
self.initial_writer()
|
self.initial_writer()
|
||||||
self.write_column_titles(column_titles)
|
self.write_column_titles(column_titles)
|
||||||
self.write_rows(rows)
|
self.write_rows(rows)
|
||||||
|
self.after_render()
|
||||||
value = self.get_rendered_value()
|
value = self.get_rendered_value()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(e, exc_info=True)
|
logger.debug(e, exc_info=True)
|
||||||
|
|
|
@ -19,6 +19,7 @@ class ExcelFileRenderer(BaseFileRenderer):
|
||||||
|
|
||||||
def write_row(self, row):
|
def write_row(self, row):
|
||||||
self.row_count += 1
|
self.row_count += 1
|
||||||
|
self.ws.row_dimensions[self.row_count].height = 20
|
||||||
column_count = 0
|
column_count = 0
|
||||||
for cell_value in row:
|
for cell_value in row:
|
||||||
# 处理非法字符
|
# 处理非法字符
|
||||||
|
@ -26,6 +27,19 @@ class ExcelFileRenderer(BaseFileRenderer):
|
||||||
cell_value = ILLEGAL_CHARACTERS_RE.sub(r'', str(cell_value))
|
cell_value = ILLEGAL_CHARACTERS_RE.sub(r'', str(cell_value))
|
||||||
self.ws.cell(row=self.row_count, column=column_count, value=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):
|
def get_rendered_value(self):
|
||||||
value = save_virtual_workbook(self.wb)
|
value = save_virtual_workbook(self.wb)
|
||||||
return value
|
return value
|
||||||
|
|
Loading…
Reference in New Issue