python - 预期的“姜戈
问题描述
我正在创建一个 API 来从 django 模型获取数据到 excel 工作表。
这样做时,我收到了标题中提到的错误。
模型.py
class Task(models.Model):
Id=models.IntegerField()
Name=models.CharField(max_length=50,null=False,blank=True)
Image1=models.FileField(blank=True, default="",
upload_to="media/images",null=True)
Image2=models.FileField(blank=True, default="",
upload_to="media/images",null=True)
Date=models.DateField(null=True,blank=True)
def __str__(self):
return str(self.Name)
视图.py
class TaskViewSet(viewsets.ViewSet):
def list(self,request):
try:
queryset=Task.objects.all()
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="users.xls'
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Your Title"
row_num=0
columns=['Id','Name','Image1','Image2','Date']
for col_num in range(len(columns)):
c = ws.cell(row=row_num + 1, column=col_num + 1)
c.value = columns[col_num][0]
ws.column_dimensions[get_column_letter(col_num + 1)].width = columns[col_num][1]
for obj in queryset:
row_num += 1
row = [
obj.Id,
obj.Name,
obj.Image1,
obj.Image2,
obj.Date,
]
for col_num in range(len(row)):
c = ws.cell(row=row_num + 1, column=col_num + 1)
c.value = row[col_num]
wb.save(response)
return response
except Exception as error:
traceback.print_exc()
return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)
追溯:
Traceback (most recent call last):
File "/home/ashu/Desktop/django/task/office/views.py", line 54, in list
ws.column_dimensions[get_column_letter(col_num + 1)].width = columns[col_num][1]
File "/home/ashu/Desktop/django/venv/lib/python3.6/site-packages/openpyxl/descriptors/base.py", line 67, in __set__
value = _convert(self.expected_type, value)
File "/home/ashu/Desktop/django/venv/lib/python3.6/site-packages/openpyxl/descriptors/base.py", line 57, in _convert
raise TypeError('expected ' + str(expected_type))
TypeError: expected <class 'float'>
解决方案
这行代码似乎是错误的:
ws.column_dimensions[get_column_letter(col_num + 1)].width = columns[col_num][1]
你定义了
columns = ['Id','Name','Image1','Image2','Date']
所以该部分columns[col_num][1]
将返回单个字符(columns[col_num]
是一个字符串,并[1]
从该字符串返回第二个字符。)
但ws.column_dimensions[get_column_letter(col_num + 1)].width
应该是浮点数,而不是字符串/字符。
推荐阅读
- amazon-web-services - 如何将 Aurora Mysql ddl 翻译成 Redshift ddl
- python - 如何计算python中2个日期时间之间的差异
- python - 您可以在本地计算机上运行 Google Colab 吗?
- python - 为 4 个数组类型的观察设置观察空间
- webrtc - 如何使用 PeerJS 实现多方 P2P 视频会议?
- react-native - 在 React Native Android 的项目 ':app' 中找不到路径为 ':react-native-google-sign-in' 的项目
- java - 为 Java 子进程 (ProcessBuilder) 分配名称
- c - 传递指针时不使用'&'
- javascript - 如何从 React JS 中的 2 个坐标(及其距离)中获取路线?
- json - 我可以使用结构向接口添加字段吗?