Django は Excel フォームを生成するための読み取りデータのエクスポートを実装します

目次

1. 簡単な例:

1. ファイル オブジェクトを作成します。

2. ワークシートを追加します。

3. データを書き込みます。

2. 真実を実践する


最初に xlwt モジュールをインストールする必要があります

pip install -i https://pypi.douban.com/simple xlwt

1. 簡単な例:

import xlwt

# 创建一个Excel文件对象
workbook = xlwt.Workbook()

# 添加一个工作表
worksheet = workbook.add_sheet('Sheet1')

# 写入表头
worksheet.write(0, 0, '姓名') 
worksheet.write(0, 1, '年龄')
worksheet.write(0, 2, '性别')

# 写入数据
data = [
    {'name': '张三', 'age': 18, 'gender': '男'},
    {'name': '李四', 'age': 20, 'gender': '女'},
    {'name': '王五', 'age': 22, 'gender': '男'},
]

for index, item in enumerate(data):
    worksheet.write(index+1, 0, item['name'])
    worksheet.write(index+1, 1, item['age'])
    worksheet.write(index+1, 2, item['gender'])

# 保存Excel文件
workbook.save('example.xlsx')

次のコードは次のステップに分かれています。

1. ファイル オブジェクトを作成します。

xlwt.Workbook()

2. ワークシートを追加します。

workbook.add_sheet('Sheet1')

3. データを書き込みます。

worksheet.write(0, 0, '姓名') 

write メソッドには 3 つのパラメータがあります: write(行座標、列座標、データ)

生成されたExcelテーブルの内容は以下の通りです。

2. 真実を実践する

したがって、上記の例によれば、djangoを使用してデータベースデータを読み取り、それをExcelテーブルに書き込みます

views.py

from django.views.generic import View
import xlwt
class ExportExcel(View):
    def post(self, request):
        try:
            # 创建一个Excel文件对象
            workbook = xlwt.Workbook(encoding='utf-8')
            # 添加一个工作表
            worksheet = workbook.add_sheet('Sheet1')
            # 写入表头
            worksheet.write(0, 0, '序号')
            worksheet.write(0, 1, '所属学校')
            worksheet.write(0, 2, '学校代码')
            worksheet.write(0, 3, '课程名称')
            worksheet.write(0, 4, '课程编码')
            worksheet.write(0, 5, '课程类别')
            worksheet.write(0, 6, '课程专家')
            worksheet.write(0, 7, '院校性质')

            # 查询数据库
            lectures = ArtEducationLecture.objects.all()

            # 遍历读取数据并写入
            for index, lecture in enumerate(lectures):
                worksheet.write(index+1, 0, index+1)
                if lecture.colleges:
                    worksheet.write(index + 1, 1, lecture.colleges.school_name)
                    worksheet.write(index + 1, 2, lecture.colleges.username)
                    worksheet.write(index + 1, 7, "艺术" if lecture.colleges.is_artmajor else "非艺术")
                if lecture.category:
                    worksheet.write(index + 1, 5, lecture.category.name)
                worksheet.write(index + 1, 3, lecture.lecture_name)
                worksheet.write(index + 1, 4, lecture.YK_code)
                if lecture.expert:
                    experts = lecture.expert.all()
                    expert_list = [expert.name for expert in experts]
                    expert = ','.join(expert_list)
                    worksheet.write(index + 1, 6, expert)
        except Exception as e:
            return JsonResponse({'status': 1, 'msg': '导出失败:' + str(e)})

        workbook.save('2023课程汇总表.xlsx')
        return JsonResponse({'status': 0, 'msg': '导出成功'})

URL.py

from django.views.decorators.csrf import csrf_exempt

url("^export_excel/$", csrf_exempt(admin_views.ExportExcel.as_view())),  # 导出优课信息

上記のコードは、最初にxlwt.Workbook(encoding='utf-8')を使用してテーブル オブジェクトを作成し、エンコーディングは utf-8 です。これが指定されていない場合、データの書き込み時に次のエラーが報告される可能性があります。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

次に、データベース テーブルの内容をクエリし、lectures = ArtEducationLecture.objects.all()、フィールドの内容を走査して読み取り、Excel テーブルに書き込みます。

ルーティング URL は csrf_exempt を使用して csrf 検証をスキップします

生成されたテーブルの内容は次のとおりです。

おすすめ

転載: blog.csdn.net/qq_37140721/article/details/131125378
おすすめ