1+
2+
3+ import asyncio
4+ from http .client import HTTPException
5+ import io
6+ from fastapi .responses import StreamingResponse
7+ import pandas as pd
8+
9+
10+ async def downTemplate (trans ):
11+ def inner ():
12+ data = {
13+ trans ('i18n_user.account' ): ['sqlbot1' , 'sqlbot2' ],
14+ trans ('i18n_user.name' ): ['sqlbot_employee1' , 'sqlbot_employee2' ],
15+ trans ('i18n_user.email' ): ['employee1@sqlbot.com' , 'employee2@sqlbot.com' ],
16+ trans ('i18n_user.workspace' ): [trans ('i18n_default_workspace' ), trans ('i18n_default_workspace' )],
17+ trans ('i18n_user.role' ): [trans ('i18n_user.administrator' ), trans ('i18n_user.ordinary_member' )],
18+ trans ('i18n_user.status' ): [trans ('i18n_user.status_enabled' ), trans ('i18n_user.status_disabled' )],
19+ trans ('i18n_user.origin' ): [trans ('i18n_user.local_creation' ), trans ('i18n_user.local_creation' )],
20+ trans ('i18n_user.platform_user_id' ): [None , None ],
21+ }
22+ df = pd .DataFrame (data )
23+ buffer = io .BytesIO ()
24+ with pd .ExcelWriter (buffer , engine = 'xlsxwriter' , engine_kwargs = {'options' : {'strings_to_numbers' : False }}) as writer :
25+ df .to_excel (writer , sheet_name = 'Sheet1' , index = False )
26+
27+ workbook = writer .book
28+ worksheet = writer .sheets ['Sheet1' ]
29+
30+ header_format = workbook .add_format ({
31+ 'bold' : True ,
32+ 'font_size' : 12 ,
33+ 'font_name' : '微软雅黑' ,
34+ 'align' : 'center' ,
35+ 'valign' : 'vcenter' ,
36+ 'border' : 0 ,
37+ 'text_wrap' : False ,
38+ })
39+
40+ for i , col in enumerate (df .columns ):
41+ max_length = max (
42+ len (str (col ).encode ('utf-8' )) * 1.1 ,
43+ (df [col ].astype (str )).apply (len ).max ()
44+ )
45+ worksheet .set_column (i , i , max_length + 12 )
46+
47+ worksheet .write (0 , i , col , header_format )
48+
49+
50+ worksheet .set_row (0 , 30 )
51+ for row in range (1 , len (df ) + 1 ):
52+ worksheet .set_row (row , 25 )
53+
54+ buffer .seek (0 )
55+ return io .BytesIO (buffer .getvalue ())
56+
57+ result = await asyncio .to_thread (inner )
58+ return StreamingResponse (result , media_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" )
59+
60+ async def batchUpload (trans , file ):
61+ ALLOWED_EXTENSIONS = {"xlsx" , "xls" }
62+ if not file .filename .lower ().endswith (tuple (ALLOWED_EXTENSIONS )):
63+ raise HTTPException (400 , "Only support .xlsx/.xls" )
64+ pass
0 commit comments