Задать вопрос
  • Как объеденить одинаковые ячейки в столбце при помощи python xlwt?

    @vveyss Автор вопроса
    Так ничего и не вышло у меня с библиотекой xlwt.
    Пришлось использовать библиотеку openpyxl.
    Код рабочий, только не стал объединять ячейки из последнего столбца.
    Может кому-нибудь пригодится.
    def export_excel(request):
    
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response['Content-Disposition'] = ("attachment; filename=Numbers_" + str(datetime.datetime.now().strftime("%d/%m/%y")) + '.xlsx')
        workbook = openpyxl.Workbook()
        sheet = workbook.active
        headers = ('Подразделение',
                   'Номер',
                   'Сумма',
                   'Итог (Сумма+ндс+абон.плата)',
                   'Итог по подразделению')
    
        rows_parser = ReportFilter(request.GET, queryset=Parser.objects.all().values_list(
            'attachment__attachment', 'number', 'pay', 'result'
        )).qs
        rows_numbers = ReportFilterNumbers(request.GET, queryset=Numbers.objects.filter(is_enabled=True).values_list(
            'attachment__attachment', 'number'
        )).qs
    
        res = 0
        temp = []
        subFee = float(str(SubscriptionFee.objects.get(pk=1)))
    
        for item1 in rows_parser:
            temp.append(item1)
            res += item1[3]
    
        for item2 in rows_numbers:
            if Parser.objects.filter(number=item2[1]):
                None
            else:
                if Numbers.objects.filter(number=item2[1], cf=True):
                    item2 = list(item2)
                    item2.extend([0, 0])
                    res += item2[3]
                    item2 = tuple(item2)
                    temp.append(item2)
                else:
                    item2 = list(item2)
                    item2.extend([subFee, subFee])
                    res += item2[3]
                    item2 = tuple(item2)
                    temp.append(item2)
    
        temp.sort()
    
        itog = 0
        for row in range(len(temp)):
            itog += temp[row][3]
    
        temp.insert(0, headers)
        temp = tuple(temp)
    
        current_value = temp[1][0]
        start_row_index = 1
        now3 = 0
        sheet.append(headers)
    
        for row_index in range(1, len(temp)):
            cell_value = temp[row_index][0]
            if cell_value != current_value:
                sheet.append(temp[row_index])
                sheet.cell(row=row_index, column=5).value = now3
                now3 = temp[row_index][3]
                start_row_index = row_index
                current_value = cell_value
    
            elif cell_value == current_value:
                now3 += temp[row_index][3]
                sheet.append(temp[row_index])
                sheet.merge_cells(start_row=start_row_index + 1, start_column=1, end_row=row_index + 1, end_column=1)
                start_row_index = row_index
                current_value = cell_value
    
        sheet.cell(row=row_index + 1, column=5).value = now3
        sheet.cell(row=row_index + 2, column=3).value = 'ОБЩИЙ ИТОГ:'
        sheet.cell(row=row_index + 2, column=4).value = itog
        workbook.save(response)
        
        return response
    Ответ написан
    Комментировать