【问题标题】:Django-Import-Export assign Field to specific columnDjango-Import-Export 将字段分配给特定列
【发布时间】:2022-01-18 10:17:51
【问题描述】:

我有一个工作表单,它使用 django-import-export 包中的资源和字段将所有数据导出到 xls。但现在我需要更进一步,让它更先进一点。我需要将所有数据导出到现有的 Excel 模板中,将每个字段分配给特定的列,例如:字段 1 需要填写在 B3 中,字段 2 需要填写在 C4 中等等。

我在想after_export() 可以在这里使用,但文档没有详细说明如何使用此方法。有人对这个包有一些经验吗?

我没有使用管理员集成。

【问题讨论】:

    标签: python django excel django-import-export


    【解决方案1】:

    after_export() 是一种您可以重写以在返回数据之前对其进行修改的方法。

    默认情况下它什么都不做。但是,它提供data 对象,这是一个Dataset 实例。如果您访问dict 属性,那么您将拥有与查询集返回的每一行相对应的OrderedDict 实例列表。因此,您可以构建一个与您需要的格式匹配的全新数据集(dicts 列表)。

    例如,如果您希望第一行的第一列出现在单元格 B3 中,您可以这样做:

        def after_export(self, queryset, data, *args, **kwargs):
            newdata = tablib.Dataset()
            cell1_val = data.dict[0].get("col1", "")
            for i, row in enumerate(data):
                if i == 1:
                    newrow = list(row)
                    # cell b3
                    newrow[2] = cell1_val
                    row = newrow
                newdata.append(row)
            data.dict = newdata.dict
    

    但是,您会注意到这种方法不容易阅读并且非常笨拙。因此,如果您不需要 django-import-export 的任何其他功能,那么使用像 openpyxl 这样的库可能是更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2013-11-13
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多