Example #1
0
def SetCell(ws,wsRow,wsCol,val,fmt):

  align  = None
  fill   = None
  numFmt = None
  border = None

  c = ws.cell(row=wsRow,column=wsCol)

  for i in fmt:
    #logging.debug(i)

    if (i == 'hAlign'): 
      if (not align): align = Alignment()
      align.horizontal = alignType[fmt[i]]

    if (i == 'vAlign'): 
      if (not align): align = Alignment()
      align.vertical   = alignType[fmt[i]]

    if (i == 'wrap'):
      if (not align): align = Alignment()
      if (fmt[i] == '1'):
        align.wrap_text = 1
      else:
        align.wrap_text = 0

    if (i == 'border'): 
      if (not align): align = Alignment()
      side = Side(style='thin')
      border = Border(left=side,right=side,top=side,bottom=side)

    if (i == 'fill'): 
      color = ColorTable[fmt[i]]
      fill = PatternFill(start_color=color,end_color='FFFFFFFF',fill_type='solid')

    if (i == 'orient'): 
      pass

    if (i == 'bg'):
      fill = PatternFill(start_color='FFEE1111',end_color='FFEE1111',fill_type='solid')

    if (i == 'numFmt'):
      numFmt = fmt[i]

  if (align):
    c.alignment = align.copy()

  if (border):
    c.border = border.copy()

  if (fill):
    c.fill = fill.copy()

  if (numFmt):
    c.number_format = numFmt

  c.value = val
Example #2
0
def style(ws, fieldnames, report_type):
    font = Font(name='Calibri',
                size=11,
                bold=False,
                italic=False,
                vertAlign=None,
                underline='none',
                strike=False,
                color='FF000000')
    font2 = Font(name='Calibri',
                 size=11,
                 bold=True,
                 italic=False,
                 vertAlign=None,
                 underline='none',
                 strike=False,
                 color='FF000000')
    color = Font(name='Calibri',
                 size=11,
                 bold=False,
                 italic=False,
                 vertAlign=None,
                 underline='none',
                 strike=False,
                 color='FFFFFF')
    border = Border(left=Side(border_style=BORDER_THIN, color='FF000000'),
                    right=Side(border_style=BORDER_THIN, color='FF000000'),
                    top=Side(border_style=BORDER_THIN, color='FF000000'),
                    bottom=Side(border_style=BORDER_THIN, color='FF000000'))

    thin_border = Border(left=Side(border_style=BORDER_THIN, color='00000000'),
                         right=Side(border_style=BORDER_THIN,
                                    color='00000000'),
                         top=Side(border_style=BORDER_THIN, color='00000000'),
                         bottom=Side(border_style=BORDER_THIN,
                                     color='00000000'))
    fill = PatternFill(start_color='00C0C0C0',
                       end_color='00C0C0C0',
                       fill_type='solid')

    fill2 = PatternFill(start_color='ebd3ae',
                        end_color='ebd3ae',
                        fill_type='solid')

    fill3 = PatternFill(start_color='f6fcc0',
                        end_color='f6fcc0',
                        fill_type='solid')

    fill4 = PatternFill(start_color='ffffff',
                        end_color='ffffff',
                        fill_type='solid')

    dd = Font(underline='single', color='000000FF')
    # row_count = ws.max_row
    # column_count = ws.max_column

    for cell1 in ws['1:1']:
        # cell2.fill = fill
        cell1.font = font2

    for cell2 in ws['2:2']:
        cell2.fill = fill
        cell2.font = font

    ws.row_dimensions[2].height = 40
    # ws.row_dimensions[1].height = 40

    for row in ws:
        for cell1 in row:
            cell1.border = border
            cell1.alignment = Alignment(wrap_text=True,
                                        horizontal='center',
                                        vertical='center')

    column_widths = []
    for col in fieldnames:
        for i in range(len(col)):
            if len(column_widths) > i:
                if len(col) > column_widths[i]:
                    column_widths[i] = len(col)
            else:
                column_widths += [len(col)]
        for i, column_width in enumerate(column_widths):
            ws.column_dimensions[get_column_letter(i + 1)].width = 20
Example #3
0
def xls_add_format(PA):
    constantPA = PA
    XLSFilepath = outputDir + constantPA + '\\' + constantPA + ' news items ' + highlightDate + '.xlsx'

    wb = openpyxl.load_workbook(filename=XLSFilepath)
    worksheet = wb.active
    worksheet.column_dimensions['F'].hidden = True  #hide column

    thin_border = Border(left=Side(style='thin'),
                         right=Side(style='thin'),
                         top=Side(style='thin'),
                         bottom=Side(style='thin'))

    #for col in worksheet.columns:
    #    max_length = 0
    #    column = str(col[0].column) # Get the column name
    #    print('Column: ' + column)
    #    if column in ['B', 'F', 'G']: worksheet.column_dimensions[column].width = 50
    #    else:
    #        if column == 'C': worksheet.column_dimensions[column].width = 60
    #else: worksheet.column_dimensions[column].width = 20

    worksheet.column_dimensions['A'].width = 20
    worksheet.column_dimensions['B'].width = 50
    worksheet.column_dimensions['C'].width = 60
    worksheet.column_dimensions['D'].width = 20
    worksheet.column_dimensions['E'].width = 20
    worksheet.column_dimensions['F'].width = 50
    worksheet.column_dimensions['G'].width = 50
    worksheet.column_dimensions['H'].width = 20
    worksheet.column_dimensions['I'].width = 20
    worksheet.column_dimensions['J'].width = 20

    worksheet.sheet_view.zoomScale = 80
    #print(column)
    ListOfRowsWithDateDiffs = []
    for rows in worksheet.iter_rows(min_row=1, min_col=1):
        for cell in rows:
            rowNumber = re.search('^\D(.*)', cell.coordinate).group(1)
            colNumber = re.search('(^\D).*', cell.coordinate).group(1)

            worksheet[cell.coordinate].alignment = Alignment(vertical="top",
                                                             horizontal="left",
                                                             wrap_text=True)
            worksheet[cell.coordinate].border = thin_border
            if (int(rowNumber) % 2) == '0':  #check if row is even number
                worksheet[cell.coordinate].fill = PatternFill(
                    fgColor="ccddff",
                    fill_type="solid")  #if yes fill cell contents with color
            else:
                worksheet[cell.coordinate].fill = PatternFill(
                    fgColor="ffffff",
                    fill_type="solid")  #turn white background
            if colNumber == 'K':
                if str(cell.value) == 'True':
                    ListOfRowsWithDateDiffs.append(rowNumber)
                    print(str(cell.value))
                    worksheet[cell.coordinate].fill = PatternFill(
                        fgColor="ffff00", fill_type="solid"
                    )  #if yes fill cell contents with color

            if colNumber == 'J':
                #print('cell %s %s' % (cell.coordinate,cell.value))
                worksheet[cell.coordinate].hyperlink = cell.value
                worksheet[cell.coordinate].value = "View on PSL"
                worksheet[cell.coordinate].font = Font(color=colors.BLUE,
                                                       bold=True)
                #print('cell %s %s' % (cell.coordinate,cell.value))
                #print(colNumber)

    #loop through rows again to highlight any rows that have dates that are different from eachother
    for rows in worksheet.iter_rows(min_row=1, min_col=1):
        for cell in rows:
            rowNumber = re.search('^\D(.*)', cell.coordinate).group(1)
            if rowNumber in ListOfRowsWithDateDiffs:
                worksheet[cell.coordinate].fill = PatternFill(
                    fgColor="ffff00", fill_type="solid")

    #worksheet.set_column(excel_header, 20)

    worksheet.column_dimensions[
        'K'].hidden = True  #hide column    worksheet.auto_filter.ref = "A:J"
    try:
        wb.save(XLSFilepath)
    except PermissionError:
        log('COULD NOT EXPORT DUE TO PERMISSION ERROR: ' + XLSFilepath)
#TODO: Refactor function names and variables (low-hyphen instead of camelcase)

import yaml
import openpyxl
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
import time
import sys
from tqdm import tqdm

YELLOW_HIGHLIGHT = PatternFill(start_color='ffff00',
				   end_color='ffff00',
				   fill_type='solid')
GREEN_HIGHLIGHT = PatternFill(start_color='90ee90',
				   end_color='90ee90',
				   fill_type='solid')
ORANGE_HIGHLIGHT = PatternFill(start_color='ffa500',
				   end_color='ffa500',
				   fill_type='solid')

#Retrieves data from the YAML file and returns a dictionary with the vals.
def get_config_variables():
	with open('config.yaml') as f:
		data = yaml.load(f, Loader=yaml.FullLoader)
		return data

def add_text(worksheet, title, overall_text):
	worksheet['A1'] = title
	cnt = 0
	name_array= []
Example #5
0
def fill_cvant_2 (flag, obj1, obj2, new_flag):
    if new_flag == 1:
        if flag == 0:
            temp = obj1.time_w8
            for j in range(int(obj1.time + obj1.time_start + obj1.time_w8)):
                if j< obj1.time_start:
                    continue
                while temp:
                    sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
            expecttion (data, obj2)
            temp = obj2.time_w8
            for i in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
                if i< obj2.time_start:
                    continue
                while temp:
                    sheet.cell(row =6, column=i+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    i += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =6, column=i+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1

        elif flag == 1:
            temp = obj2.time_w8            
            for j in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
                if j< obj2.time_start:
                    continue
                while temp:
                    sheet.cell(row =6, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =6, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
            expecttion (data, obj1)
            temp = obj1.time_w8
            for i in range(int(obj1.time + obj1.time_start + obj1.time_w8)):
                if i< obj1.time_start:
                    continue
                while temp:
                    sheet.cell(row =5, column=i+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    i += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =5, column=i+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[i] += 1
    elif new_flag == 2:
        if flag == 0:
            temp = obj1.time_w8
            for j in range(int(obj1.time_start + obj1.time_w8 + obj1.time)):
                if j< obj1.time_start:
                    continue
                while temp:
                    sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
            expecttion (data, obj2)
            temp = obj2.time_w8
            for i in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
                if i< obj2.time_start:
                    continue
                while temp:
                    sheet.cell(row =6, column=i+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    i += 1
                if data[i] != 0:
                    continue
                sheet.cell(row =6, column=i+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[i] += 1

        elif flag == 1:
            temp = obj2.time_w8            
            for j in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
                if j< obj2.time_start:
                    continue
                while temp:
                    sheet.cell(row =6, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =6, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
            expecttion (data, obj1)
            temp = obj1.time_w8
            for j in range(int(obj1.time + obj1.time_start + obj1.time_w8)):
                if j< obj1.time_start:
                    continue
                while temp:
                    sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
    elif new_flag == 3:
        if flag == 0:
            temp = obj1.time_w8
            for j in range(int(obj1.time + obj1.time_start + obj1.time_w8)):
                if j< obj1.time_start:
                    continue
                while temp:
                    sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
            expecttion (data, obj2)
            temp = obj2.time_w8  
            for j in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
                if j< obj2.time_start:
                    continue
                while temp:
                    sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
        elif flag == 1:
            temp = obj2.time_w8            
            for j in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
                if j< obj2.time_start:
                    continue
                while temp:
                    sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
            expecttion (data, obj1)
            temp = obj1.time_w8  
            for j in range(int(obj1.time + obj1.time_start + obj1.time_w8)):
                if j< obj1.time_start:
                    continue
                while temp:
                    sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                    temp -=1
                    j += 1
                if data[j] != 0:
                    continue
                sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
                data[j] += 1
Example #6
0
if min_start > secound.time_start:
    min_start = secound.time_start
    flag = 1
if min_start > third.time_start:
    min_start = third.time_start
    flag = 2
if min_start > fourth.time_start:
    min_start = fourth.time_start
    flag = 3
 
 #Заполнение квантов процессов. После заполнения одного процесса, идёт перерасчёт штрафного времени
if flag == 0:
    for j in range(int(first.time + first.time_start)):
        if j < first.time_start:
            continue
        sheet.cell(row =3, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
        data[j]+=1
        
    expecttion (data, secound)
    expecttion (data, third)
    expecttion (data, fourth)
    max_pen = penalty_against(secound)
    if max_pen < penalty_against(third):
        max_pen = penalty_against(third)
        flag = 1
    if max_pen < penalty_against(fourth):
        max_pen = penalty_against(fourth)
        flag = 2
    fill_cvant_1(flag, secound, third, fourth)

elif flag == 1:
Example #7
0
ws1 = wb.create_sheet('COVER', 0)
ws3 = wb.create_sheet('environment', 1)
ws4 = wb.create_sheet('Data', 4)
ws1.sheet_properties.tabColor = "1072BA"  #设定sheet的标签的背景颜色
ws1.column_dimensions['B'].width = 80.0
ws1.row_dimensions[7].height = 70.0
cover_font = Font(name='Arial Unicode MS',
                  size=11,
                  bold=True,
                  italic=True,
                  vertAlign=None,
                  underline='none',
                  strike=True,
                  color='000000',
                  shadow=False)
data_fill = PatternFill('solid', fgColor='FFCC66')
title = [
    'Channel', 'Path_Loss(dB)', 'Angle', 'DS_Throughput', 'DS_Throughput_avg',
    'US_Throughput', 'US_Throughput_avg', 'Sta_Rssi', 'Sta_Rssi_avg',
    'AP_Rssi', 'AP_Rssi_avg', 'DS_Rate', 'DS_Rate_avg', 'US_Rate',
    'US_Rate_avg', 'Time', 'MCS(DS)', 'MCS(US)', 'NSS(DS)', 'NSS(US)',
    'BW(DS)', 'BW(US)', 'STA RSSI(per chain)', 'AP POWER',
    'AP RSSI(per chain)', 'STA POWER'
]
ws1.append(title)
for comlumn in range(len(title)):
    comlumn += 1
    ws1.cell(1, comlumn).font = cover_font
    ws1.cell(1, comlumn).fill = data_fill
posX = ord('A')
posY = 2
Example #8
0
def generate_excel(report, name, reporting_start_datetime_local,
                   reporting_end_datetime_local, period_type):

    wb = Workbook()
    ws = wb.active

    # Row height
    ws.row_dimensions[1].height = 102

    for i in range(2, 2000 + 1):
        ws.row_dimensions[i].height = 42
    #
    # for i in range(2, 37 + 1):
    #     ws.row_dimensions[i].height = 30
    #
    # for i in range(38, 90 + 1):
    #     ws.row_dimensions[i].height = 30

    # Col width
    ws.column_dimensions['A'].width = 1.5

    ws.column_dimensions['B'].width = 25.0

    for i in range(ord('C'), ord('L')):
        ws.column_dimensions[chr(i)].width = 15.0

    # Font
    name_font = Font(name='Constantia', size=15, bold=True)
    title_font = Font(name='宋体', size=15, bold=True)
    data_font = Font(name='Franklin Gothic Book', size=11)

    table_fill = PatternFill(fill_type='solid', fgColor='1F497D')
    f_border = Border(left=Side(border_style='medium', color='00000000'),
                      right=Side(border_style='medium', color='00000000'),
                      bottom=Side(border_style='medium', color='00000000'),
                      top=Side(border_style='medium', color='00000000'))
    b_border = Border(bottom=Side(border_style='medium', color='00000000'), )

    b_c_alignment = Alignment(vertical='bottom',
                              horizontal='center',
                              text_rotation=0,
                              wrap_text=True,
                              shrink_to_fit=False,
                              indent=0)
    c_c_alignment = Alignment(vertical='center',
                              horizontal='center',
                              text_rotation=0,
                              wrap_text=True,
                              shrink_to_fit=False,
                              indent=0)
    b_r_alignment = Alignment(vertical='bottom',
                              horizontal='right',
                              text_rotation=0,
                              wrap_text=True,
                              shrink_to_fit=False,
                              indent=0)
    c_r_alignment = Alignment(vertical='bottom',
                              horizontal='center',
                              text_rotation=0,
                              wrap_text=True,
                              shrink_to_fit=False,
                              indent=0)

    # Img
    img = Image("excelexporters/myems.png")
    img.width = img.width * 0.85
    img.height = img.height * 0.85
    # img = Image("myems.png")
    ws.add_image(img, 'B1')

    # Title
    ws.row_dimensions[3].height = 60

    ws['B3'].font = name_font
    ws['B3'].alignment = b_r_alignment
    ws['B3'] = 'Name:'
    ws['C3'].border = b_border
    ws['C3'].alignment = b_c_alignment
    ws['C3'].font = name_font
    ws['C3'] = name

    ws['D3'].font = name_font
    ws['D3'].alignment = b_r_alignment
    ws['D3'] = 'Period:'
    ws['E3'].border = b_border
    ws['E3'].alignment = b_c_alignment
    ws['E3'].font = name_font
    ws['E3'] = period_type

    ws['F3'].font = name_font
    ws['F3'].alignment = b_r_alignment
    ws['F3'] = 'Date:'
    ws['G3'].border = b_border
    ws['G3'].alignment = b_c_alignment
    ws['G3'].font = name_font
    ws['G3'] = reporting_start_datetime_local + "__" + reporting_end_datetime_local
    ws.merge_cells("G3:H3")

    if "reporting_period" not in report.keys() or \
            "names" not in report['reporting_period'].keys() or len(report['reporting_period']['names']) == 0:
        filename = str(uuid.uuid4()) + '.xlsx'
        wb.save(filename)

        return filename
    #################################################
    # First: 能耗分析
    # 6: title
    # 7: table title
    # 8~10 table_data
    # Total: 5 rows
    # if has not energy data: set low height for rows
    #################################################
    reporting_period_data = report['reporting_period']

    has_energy_data_flag = True
    if "names" not in reporting_period_data.keys() or \
            reporting_period_data['names'] is None or \
            len(reporting_period_data['names']) == 0:
        has_energy_data_flag = False

    if has_energy_data_flag:
        ws['B6'].font = title_font
        ws['B6'] = name + ' 能耗分析'

        category = reporting_period_data['names']
        ca_len = len(category)

        ws.row_dimensions[7].height = 60
        ws['B7'].fill = table_fill
        ws['B7'].border = f_border

        ws['B8'].font = title_font
        ws['B8'].alignment = c_c_alignment
        ws['B8'] = '能耗'
        ws['B8'].border = f_border

        ws['B9'].font = title_font
        ws['B9'].alignment = c_c_alignment
        ws['B9'] = '单位面积能耗'
        ws['B9'].border = f_border

        ws['B10'].font = title_font
        ws['B10'].alignment = c_c_alignment
        ws['B10'] = '环比'
        ws['B10'].border = f_border

        col = ''

        for i in range(0, ca_len):
            col = chr(ord('C') + i)
            row = '7'
            cell = col + row
            ws[col + '7'].fill = table_fill
            ws[col + '7'].font = name_font
            ws[col + '7'].alignment = c_c_alignment
            ws[col + '7'] = reporting_period_data['names'][
                i] + " (" + reporting_period_data['units'][i] + ")"
            ws[col + '7'].border = f_border

            ws[col + '8'].font = name_font
            ws[col + '8'].alignment = c_c_alignment
            ws[col + '8'] = round(reporting_period_data['subtotals'][i], 2)
            ws[col + '8'].border = f_border

            ws[col + '9'].font = name_font
            ws[col + '9'].alignment = c_c_alignment
            ws[col + '9'] = round(
                reporting_period_data['subtotals_per_unit_area'][i], 2)
            ws[col + '9'].border = f_border

            ws[col + '10'].font = name_font
            ws[col + '10'].alignment = c_c_alignment
            ws[col + '10'] = str(round(reporting_period_data['increment_rates'][i] * 100, 2)) + "%" \
                if reporting_period_data['increment_rates'][i] is not None else "-"
            ws[col + '10'].border = f_border

        # TCE TCO2E
        end_col = col
        # TCE
        tce_col = chr(ord(end_col) + 1)
        ws[tce_col + '7'].fill = table_fill
        ws[tce_col + '7'].font = name_font
        ws[tce_col + '7'].alignment = c_c_alignment
        ws[tce_col + '7'] = "吨标准煤 (TCE)"
        ws[tce_col + '7'].border = f_border

        ws[tce_col + '8'].font = name_font
        ws[tce_col + '8'].alignment = c_c_alignment
        ws[tce_col + '8'] = round(
            reporting_period_data['total_in_kgce'] / 1000, 2)
        ws[tce_col + '8'].border = f_border

        ws[tce_col + '9'].font = name_font
        ws[tce_col + '9'].alignment = c_c_alignment
        ws[tce_col + '9'] = round(
            reporting_period_data['total_in_kgce_per_unit_area'] / 1000, 2)
        ws[tce_col + '9'].border = f_border

        ws[tce_col + '10'].font = name_font
        ws[tce_col + '10'].alignment = c_c_alignment
        ws[tce_col + '10'] = str(round(reporting_period_data['increment_rate_in_kgce'] * 100, 2)) + "%" \
            if reporting_period_data['increment_rate_in_kgce'] is not None else "-"
        ws[tce_col + '10'].border = f_border

        # TCO2E
        tco2e_col = chr(ord(end_col) + 2)
        ws[tco2e_col + '7'].fill = table_fill
        ws[tco2e_col + '7'].font = name_font
        ws[tco2e_col + '7'].alignment = c_c_alignment
        ws[tco2e_col + '7'] = "吨二氧化碳排放 (TCO2E)"
        ws[tco2e_col + '7'].border = f_border

        ws[tco2e_col + '8'].font = name_font
        ws[tco2e_col + '8'].alignment = c_c_alignment
        ws[tco2e_col + '8'] = round(
            reporting_period_data['total_in_kgco2e'] / 1000, 2)
        ws[tco2e_col + '8'].border = f_border

        ws[tco2e_col + '9'].font = name_font
        ws[tco2e_col + '9'].alignment = c_c_alignment
        ws[tco2e_col + '9'] = round(
            reporting_period_data['total_in_kgco2e_per_unit_area'] / 1000, 2)
        ws[tco2e_col + '9'].border = f_border

        ws[tco2e_col + '10'].font = name_font
        ws[tco2e_col + '10'].alignment = c_c_alignment
        ws[tco2e_col + '10'] = str(round(reporting_period_data['increment_rate_in_kgco2e'] * 100, 2)) + "%" \
            if reporting_period_data['increment_rate_in_kgco2e'] is not None else "-"
        ws[tco2e_col + '10'].border = f_border
    else:
        for i in range(6, 10 + 1):
            ws.row_dimensions[i].height = 0.1
    #################################################
    # Second: 分时电耗
    # 12: title
    # 13: table title
    # 14~17 table_data
    # Total: 6 rows
    ################################################
    has_ele_peak_flag = True
    if "toppeaks" not in reporting_period_data.keys() or \
            reporting_period_data['toppeaks'] is None or \
            len(reporting_period_data['toppeaks']) == 0:
        has_ele_peak_flag = False

    if has_ele_peak_flag:
        ws['B12'].font = title_font
        ws['B12'] = name + ' 分时电耗'

        ws.row_dimensions[13].height = 60
        ws['B13'].fill = table_fill
        ws['B13'].font = name_font
        ws['B13'].alignment = c_c_alignment
        ws['B13'].border = f_border

        ws['C13'].fill = table_fill
        ws['C13'].font = name_font
        ws['C13'].alignment = c_c_alignment
        ws['C13'].border = f_border
        ws['C13'] = '分时电耗'

        ws['B14'].font = title_font
        ws['B14'].alignment = c_c_alignment
        ws['B14'] = '尖'
        ws['B14'].border = f_border

        ws['C14'].font = title_font
        ws['C14'].alignment = c_c_alignment
        ws['C14'].border = f_border
        ws['C14'] = round(reporting_period_data['toppeaks'][0], 2)

        ws['B15'].font = title_font
        ws['B15'].alignment = c_c_alignment
        ws['B15'] = '峰'
        ws['B15'].border = f_border

        ws['C15'].font = title_font
        ws['C15'].alignment = c_c_alignment
        ws['C15'].border = f_border
        ws['C15'] = round(reporting_period_data['onpeaks'][0], 2)

        ws['B16'].font = title_font
        ws['B16'].alignment = c_c_alignment
        ws['B16'] = '平'
        ws['B16'].border = f_border

        ws['C16'].font = title_font
        ws['C16'].alignment = c_c_alignment
        ws['C16'].border = f_border
        ws['C16'] = round(reporting_period_data['midpeaks'][0], 2)

        ws['B17'].font = title_font
        ws['B17'].alignment = c_c_alignment
        ws['B17'] = '谷'
        ws['B17'].border = f_border

        ws['C17'].font = title_font
        ws['C17'].alignment = c_c_alignment
        ws['C17'].border = f_border
        ws['C17'] = round(reporting_period_data['offpeaks'][0], 2)

        pie = PieChart()
        pie.title = name + ' 分时电耗'
        labels = Reference(ws, min_col=2, min_row=14, max_row=17)
        pie_data = Reference(ws, min_col=3, min_row=13, max_row=17)
        pie.add_data(pie_data, titles_from_data=True)
        pie.set_categories(labels)
        pie.height = 7.25  # cm 1.05*5 1.05cm = 30 pt
        pie.width = 9
        # pie.title = "Pies sold by category"
        s1 = pie.series[0]
        s1.dLbls = DataLabelList()
        s1.dLbls.showCatName = False  # 标签显示
        s1.dLbls.showVal = True  # 数量显示
        s1.dLbls.showPercent = True  # 百分比显示
        # s1 = CharacterProperties(sz=1800)     # 图表中字体大小 *100

        ws.add_chart(pie, "D13")

    else:
        for i in range(12, 18 + 1):
            ws.row_dimensions[i].height = 0.1
        # end_row 10
        # start_row 12
    ################################################
    # Third: 子空间能耗
    # 19: title
    # 20: table title
    # 21~24 table_data
    # Total: 6 rows
    ################################################
    has_child_flag = True
    # Judge if the space has child space, if not, delete it.
    if "child_space" not in report.keys() or "energy_category_names" not in report['child_space'].keys() or \
            len(report['child_space']["energy_category_names"]) == 0 \
            or 'child_space_names_array' not in report['child_space'].keys() \
            or report['child_space']['energy_category_names'] is None \
            or len(report['child_space']['child_space_names_array']) == 0 \
            or len(report['child_space']['child_space_names_array'][0]) == 0:

        has_child_flag = False

    current_row_number = 19

    if has_child_flag:
        child = report['child_space']
        child_spaces = child['child_space_names_array'][0]
        child_subtotals = child['subtotals_array'][0]

        ws['B19'].font = title_font
        ws['B19'] = name + ' 子空间能耗'

        ws.row_dimensions[20].height = 60
        ws['B20'].fill = table_fill
        ws['B20'].border = f_border
        ca_len = len(child['energy_category_names'])

        table_start_row_number = 20

        for i in range(0, ca_len):
            row = chr(ord('C') + i)
            ws[row + '20'].fill = table_fill
            ws[row + '20'].font = title_font
            ws[row + '20'].alignment = c_c_alignment
            ws[row + '20'].border = f_border
            ws[row + '20'] = child['energy_category_names'][i] + ' (' + child[
                'units'][i] + ')'

        space_len = len(child['child_space_names_array'][0])

        for i in range(0, space_len):
            row = str(i + 21)

            ws['B' + row].font = name_font
            ws['B' + row].alignment = c_c_alignment
            ws['B' + row] = child['child_space_names_array'][0][i]
            ws['B' + row].border = f_border

            for j in range(0, ca_len):
                col = chr(ord('C') + j)
                ws[col + row].font = name_font
                ws[col + row].alignment = c_c_alignment
                ws[col + row] = round(child['subtotals_array'][j][i], 2)
                ws[col + row].border = f_border

        table_end_row_number = 20 + space_len
        chart_start_row_number = 20 + space_len + 1

        for i in range(0, ca_len):
            # pie
            # 25~30: pie
            pie = PieChart()
            pie.title = ws.cell(column=3 + i, row=table_start_row_number).value
            labels = Reference(ws,
                               min_col=2,
                               min_row=table_start_row_number + 1,
                               max_row=table_end_row_number)
            pie_data = Reference(ws,
                                 min_col=3 + i,
                                 min_row=table_start_row_number,
                                 max_row=table_end_row_number)
            pie.add_data(pie_data, titles_from_data=True)
            pie.set_categories(labels)
            pie.height = 6.6  # cm 1.05*5 1.05cm = 30 pt
            pie.width = 8
            # pie.title = "Pies sold by category"
            s1 = pie.series[0]
            s1.dLbls = DataLabelList()
            s1.dLbls.showCatName = False  # 标签显示
            s1.dLbls.showVal = True  # 数量显示
            s1.dLbls.showPercent = True  # 百分比显示
            # s1 = CharacterProperties(sz=1800)     # 图表中字体大小 *100
            chart_cell = ''
            if i % 2 == 0:
                chart_cell = 'B' + str(chart_start_row_number)
            else:
                chart_cell = 'E' + str(chart_start_row_number)
                chart_start_row_number += 5
            # ws.add_chart(pie, chart_cell)
            # chart_col = chr(ord('B') + 2 * j)
            # chart_cell = chart_col + '25'
            ws.add_chart(pie, chart_cell)

        current_row_number = chart_start_row_number

        if ca_len % 2 == 1:
            current_row_number += 5

        current_row_number += 1

    ################################################
    # Fourth: 能耗详情
    # current_row_number: title
    # current_row_number+1 ~ current_row_number+1+ca_len*6-1: line
    # current_row_number+1+ca_len*6: table title
    # current_row_number+1+ca_len*6~: table_data
    ################################################
    reporting_period_data = report['reporting_period']
    times = reporting_period_data['timestamps']
    has_detail_data_flag = True
    ca_len = len(report['reporting_period']['names'])
    table_row = current_row_number + 1 + ca_len * 6
    chart_start_row_number = current_row_number + 1
    if "timestamps" not in reporting_period_data.keys() or \
            reporting_period_data['timestamps'] is None or \
            len(reporting_period_data['timestamps']) == 0:
        has_detail_data_flag = False

    if has_detail_data_flag:
        ws['B' + str(current_row_number)].font = title_font
        ws['B' + str(current_row_number)] = name + ' 详细数据'

        ws.row_dimensions[table_row].height = 60
        ws['B' + str(table_row)].fill = table_fill
        ws['B' + str(table_row)].font = title_font
        ws['B' + str(table_row)].border = f_border
        ws['B' + str(table_row)].alignment = c_c_alignment
        ws['B' + str(table_row)] = '日期时间'
        time = times[0]
        has_data = False
        max_row = 0
        if len(time) > 0:
            has_data = True
            max_row = table_row + len(time)
            print("max_row", max_row)

        if has_data:
            for i in range(0, len(time)):
                col = 'B'
                row = str(table_row + 1 + i)
                # col = chr(ord('B') + i)
                ws[col + row].font = title_font
                ws[col + row].alignment = c_c_alignment
                ws[col + row] = time[i]
                ws[col + row].border = f_border

            for i in range(0, ca_len):
                # 38 title
                col = chr(ord('C') + i)

                ws[col + str(table_row)].fill = table_fill
                ws[col + str(table_row)].font = title_font
                ws[col + str(table_row)].alignment = c_c_alignment
                ws[col + str(table_row)] = reporting_period_data['names'][i] + \
                    " (" + reporting_period_data['units'][i] + ")"
                ws[col + str(table_row)].border = f_border

                # 39 data
                time = times[i]
                time_len = len(time)

                for j in range(0, time_len):
                    row = str(table_row + 1 + j)
                    # col = chr(ord('B') + i)
                    ws[col + row].font = title_font
                    ws[col + row].alignment = c_c_alignment
                    ws[col + row] = round(
                        reporting_period_data['values'][i][j], 2)
                    ws[col + row].border = f_border

            current_row_number = table_row + 1 + len(times[0])

            ws['B' + str(current_row_number)].font = title_font
            ws['B' + str(current_row_number)].alignment = c_c_alignment
            ws['B' + str(current_row_number)].border = f_border
            ws['B' + str(current_row_number)] = '小计'

            for i in range(0, ca_len):
                col = chr(ord('C') + i)
                ws[col + str(current_row_number)].font = title_font
                ws[col + str(current_row_number)].alignment = c_c_alignment
                ws[col + str(current_row_number)].border = f_border
                ws[col + str(current_row_number
                             )] = reporting_period_data['subtotals'][i]

                # line
                # 39~: line
                line = LineChart()
                line.title = '报告期消耗 - ' + ws.cell(column=3 + i,
                                                  row=table_row).value
                labels = Reference(ws,
                                   min_col=2,
                                   min_row=table_row + 1,
                                   max_row=max_row)
                line_data = Reference(ws,
                                      min_col=3 + i,
                                      min_row=table_row,
                                      max_row=max_row)  # openpyxl bug
                line.add_data(line_data, titles_from_data=True)
                line.set_categories(labels)
                line_data = line.series[0]
                line_data.marker.symbol = "circle"
                line_data.smooth = True
                line.x_axis.crosses = 'min'
                line.height = 8.25  # cm 1.05*5 1.05cm = 30 pt
                line.width = 24
                # pie.title = "Pies sold by category"
                line.dLbls = DataLabelList()
                line.dLbls.dLblPos = 't'
                # line.dLbls.showCatName = True  # label show
                line.dLbls.showVal = True  # val show
                line.dLbls.showPercent = True  # percent show
                # s1 = CharacterProperties(sz=1800)     # font size *100
                chart_col = 'B'
                chart_cell = chart_col + str(chart_start_row_number + 6 * i)
                ws.add_chart(line, chart_cell)

    filename = str(uuid.uuid4()) + '.xlsx'
    wb.save(filename)

    return filename
    def get (self, request, *args, **kwargs):

        query = TiempoMuertonDet.objects.all()
        wb = Workbook()

        ws = wb.active
        ws.tittle='Tiempos Muertos'


        #Establer el nombre del archivo
        nombre_archivo = "Reporte Tiempos Muertosw.xlsx"
        ws['B1'].alignment= Alignment(horizontal='left', vertical='center')
        ws['B1'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))

        ws['B1'].fill = PatternFill(start_color='66FFCC', end_color='66FFCC', fill_type='solid')
        ws['B1'].font = Font(name='calibri', size=12, bold=True)
        ws['B1']='Company'

        ws.merge_cells('B1:F1')

        ws['B2'].alignment= Alignment(horizontal='left', vertical='center')
        ws['B2'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))

        ws['B2'].fill = PatternFill(start_color='66FFCC', end_color='66FFCC', fill_type='solid')
        ws['B2'].font = Font(name='calibri', size=12, bold=True)
        ws['B2']='Department'

        ws.merge_cells('B2:F2')
        ws['B3'].alignment= Alignment(horizontal='left', vertical='center')
        ws['B3'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))

        ws['B3'].fill = PatternFill(start_color='66FFCC', end_color='66FFCC', fill_type='solid')
        ws['B3'].font = Font(name='calibri', size=12, bold=True)
        ws['B3']='Reporte de Tiempos Muertos'

        ws.merge_cells('B3:F3')

        ws.row_dimensions[1].height=20
        ws.row_dimensions[2].height=20
        ws.row_dimensions[3].height=20

        ws.column_dimensions['B'].width=20
        ws.column_dimensions['C'].width=20
        ws.column_dimensions['D'].width=20
        ws.column_dimensions['E'].width=40
        ws.column_dimensions['F'].width=20
        ws.column_dimensions['G'].width=60
        ws.column_dimensions['H'].width=60
        ws.column_dimensions['G'].width=20
        ws.column_dimensions['J'].width=60


        ws['B6'].alignment= Alignment(horizontal='center', vertical='center')
        ws['B6'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))
        ws['B6'].fill = PatternFill(start_color='66CFCC', end_color='66CFCC', fill_type='solid')
        ws['B6'].font = Font(name='calibri', size=11, bold=True)
        ws['B6']='Fecha'


        ws['C6'].alignment= Alignment(horizontal='center', vertical='center')
        ws['C6'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))
        ws['C6'].fill = PatternFill(start_color='66CFCC', end_color='66CFCC', fill_type='solid')
        ws['C6'].font = Font(name='calibri', size=11, bold=True)
        ws['C6']='Planta'

        ws['D6'].alignment= Alignment(horizontal='center', vertical='center')
        ws['D6'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))
        ws['D6'].fill = PatternFill(start_color='66CFCC', end_color='66CFCC', fill_type='solid')
        ws['D6'].font = Font(name='calibri', size=11, bold=True)
        ws['D6']='Línea'

        ws['E6'].alignment= Alignment(horizontal='center', vertical='center')
        ws['E6'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))
        ws['E6'].fill = PatternFill(start_color='66CFCC', end_color='66CFCC', fill_type='solid')
        ws['E6'].font = Font(name='calibri', size=11, bold=True)
        ws['E6']='Supervisor'

        ws['F6'].alignment= Alignment(horizontal='center', vertical='center')
        ws['F6'].border =Border(left=Side(border_style='thin'),right=Side(border_style='thin'),
                            top=Side(border_style='thin'), bottom=Side(border_style='thin'))
        ws['F6'].fill = PatternFill(start_color='66CFCC', end_color='66CFCC', fill_type='solid')
        ws['F6'].font = Font(name='calibri', size=11, bold=True)
        ws['F6']='Turno'
Example #10
0
def main(_argv):
    physical_devices = tf.config.experimental.list_physical_devices('GPU')
    if len(physical_devices) > 0:
        tf.config.experimental.set_memory_growth(physical_devices[0], True)
    yolo = YoloV3(classes=total_number_of_logos) # number of classes/logos, needs to be updated if another logo is added
    yolo.load_weights('./weights/yolov3-custom.tf').expect_partial() # file path to weights
    class_names = [c.strip() for c in open('./data/labels/custom.names').readlines()] # file path to classes list, needs to be updated if another logo is added
    if FLAGS.count:
        count = FLAGS.count
    excel = []
    images = []
    for i in range(count):
        con = convert_from_path('data/pdf/test (' + str(i+1) + ').pdf', output_folder='data/images', fmt="jpg", single_file=True, output_file='test (' + str(i+1) + ')')
        excel.append('data/excel/test (' + str(i+1) + ').xlsx')
        images.append('data/images/test (' + str(i+1) + ').jpg')
    raw_images = []
    for image in images:
        img_raw = tf.image.decode_image(
            open(image, 'rb').read(), channels=3)
        raw_images.append(img_raw)
    i = 0 # index number for main loop
    logos = [] # list of detected logos for each image
    approvals = [] # list of excel data for each image
    for raw_img in raw_images:
        img = tf.expand_dims(raw_img, 0)
        img = transform_images(img, 416) # image size
        t1 = time.time()
        boxes, scores, classes, nums = yolo(img)
        t2 = time.time()
        logging.info('time: {}'.format(t2 - t1))
        img = cv2.cvtColor(raw_img.numpy(), cv2.COLOR_RGB2BGR)
        img = draw_outputs(img, (boxes, scores, classes, nums), class_names)
        cv2.imwrite('./detections/detection (' + str(i+1) + ').jpg', img) # image output
# LABEL EXTRACTION
        temp_names = [] # temporary list for each image's logo detections
        for j in range(nums[0]):
            repeat = True
            temp_pair = [] # temporary list for each logo and its status
            if (j > 0):
                for k in range(len(temp_names)):
                    if (class_names[int(classes[0][j])] == temp_names[k][0]):
                        repeat = False
                        break
            if (repeat): # if not a repeated logo, update main logo list
                temp_pair.append(class_names[int(classes[0][j])]) # append logo 
                temp_pair.append(False) # append status
                temp_names.append(temp_pair) # append pair
        logos.append(temp_names) # append names list to main logo list
# EXCEL EXTRACTION
        wb = load_workbook(excel[i])
        sheet = wb.active
        rows = sheet.max_row
        temp_sheet = [] # temporary list for each image's excel data
        for j in range(rows-1):
            temp_rows = [] # temporary list for each row's excel data
            temp_rows.append(str(sheet.cell(row=j+2, column=4).value).upper().strip())
            temp_rows.append(str(sheet.cell(row=j+2, column=5).value).upper().strip())
            temp_rows.append("00FF0000") # Red by default
            temp_sheet.append(temp_rows)
        approvals.append(temp_sheet) # append sheet list to main approvals list
# EXCEL TRANSLATION
        for j in range(len(approvals[i])):
            if (approvals[i][j][0] in extola):
                temp_trans = extola[approvals[i][j][0]]
            else:
                temp_trans = ["NAL"] # No Associated Logo
            approvals[i][j][0] = temp_trans
# EXCEL COMPARED TO LABEL
# "APPROVAL STATUS"             "On label"   "Not on label"
# "APPROVED"                    "Green"     "Red"
# "NO REQUIREMENTS"             "Red"       "Green"
# "APPROVAL NOT APPLICABLE"     "Red"       "Green"
# "APPROVAL NOT REQUIRED"       "Red"       "Green"
# "CONTACT CISCO PARTNER/IOR"   "Red"       "Green"
# "NOT APPROVED"                "Red"       "Green"
# "PENDING"                     "Red"       "Green"
# "RENEWAL IN PROGESS"          "Red"       "Green"
# "NONE"/"UNKNOWN"              "Red"       "Red"
# 
# "00FF0000" (Red) needs attention
# "0000FF00" (Green) good to go
# "000000FF" (Blue) missing logo
#         
        for j in range(len(approvals[i])):
            flag = True
            k = 0
            temp_count = 0
            while (flag):
                if (k == len(logos[i])): # logo not on label
                    flag = False
                    if (approvals[i][j][1] == "APPROVED"):
                        approvals[i][j][2] = "00FF0000" # Red
                    elif ((approvals[i][j][1] == "APPROVAL NOT APPLICABLE")or(approvals[i][j][1] == "APPROVAL NOT REQUIRED")or(approvals[i][j][1] == "CONTACT CISCO PARTNER/IOR")or
                          (approvals[i][j][1] == "NOT APPROVED")or(approvals[i][j][1] == "PENDING")or(approvals[i][j][1] == "RENEWAL IN PROGESS")or(approvals[i][j][1] == "NO REQUIREMENTS")):
                        approvals[i][j][2] = "0000FF00" # Green
                    elif ((approvals[i][j][1] == "NONE")or(approvals[i][j][1] == "UNKNOWN")):
                        approvals[i][j][2] = "00FF0000" # Red
                        sheet.cell(row=j+2, column=5).value = "Unknown"
                elif (approvals[i][j][0][0] == "NAL"): # no logo to detect
                    flag = False
                    if ((approvals[i][j][1] == "APPROVAL NOT APPLICABLE")or(approvals[i][j][1] == "APPROVAL NOT REQUIRED")or(approvals[i][j][1] == "CONTACT CISCO PARTNER/IOR")or
                        (approvals[i][j][1] == "NOT APPROVED")or(approvals[i][j][1] == "PENDING")or(approvals[i][j][1] == "RENEWAL IN PROGESS")or(approvals[i][j][1] == "APPROVED")or(approvals[i][j][1] == "NO REQUIREMENTS")):
                        approvals[i][j][2] = "0000FF00" # Green
                    elif ((approvals[i][j][1] == "NONE")or(approvals[i][j][1] == "UNKNOWN")):
                        approvals[i][j][2] = "00FF0000" # Red
                        sheet.cell(row=j+2, column=5).value = "Unknown"  
                else: # continue or logo on label
                    for X in range(len(approvals[i][j][0])):
                        if (approvals[i][j][0][X] == logos[i][k][0]): # logo on label
                            logos[i][k][1] = True
                            temp_count+=1
                            if (temp_count == len(approvals[i][j][0])):
                                flag = False
                            if ((approvals[i][j][1] == "APPROVAL NOT APPLICABLE")or(approvals[i][j][1] == "APPROVAL NOT REQUIRED")or(approvals[i][j][1] == "CONTACT CISCO PARTNER/IOR")or
                                (approvals[i][j][1] == "NOT APPROVED")or(approvals[i][j][1] == "PENDING")or(approvals[i][j][1] == "RENEWAL IN PROGESS")):
                                approvals[i][j][2] = "00FF0000" # Red
                            elif ((temp_count == len(approvals[i][j][0]))and(approvals[i][j][1] == "APPROVED")or(approvals[i][j][1] == "NO REQUIREMENTS")):
                                approvals[i][j][2] = "0000FF00" # Green
                            elif ((approvals[i][j][1] == "NONE")or(approvals[i][j][1] == "UNKNOWN")):
                                approvals[i][j][2] = "00FF0000" # Red
                                sheet.cell(row=j+2, column=5).value = "Unknown"
                k+=1
            sheet.cell(row=j+2, column=5).fill = PatternFill(start_color=approvals[i][j][2], end_color=approvals[i][j][2], fill_type='solid')
# LABEL COMPARED TO EXCEL
        new_row=1
        for j in range(len(logos[i])):
            if (logos[i][j][1] == False): # not on excel so add it in a new row
                sheet.cell(row=new_row+rows, column=1).value = str(sheet.cell(row=rows, column=1).value) #1 Product Name
                sheet.cell(row=new_row+rows, column=3).value = str(sheet.cell(row=rows, column=3).value) #3 Desc
                sheet.cell(row=new_row+rows, column=4).value = logos[i][j][0] #4 Country
                sheet.cell(row=new_row+rows, column=5).value = "Unknown" #5 Approval Status
                sheet.cell(row=new_row+rows, column=5).fill = PatternFill(start_color="000000FF", end_color="000000FF", fill_type='solid') #5 Blue
                for k in range(5):
                    sheet.cell(row=new_row+rows, column=k+6).value = str(sheet.cell(row=rows, column=k+6).value) #6-10
                new_row+=1
        wb.save(excel[i])
        i+=1
# DISPLAY
    for j in range(i):
        print("\nL" + str(j+1) + ": ", end="")
        temp_print = []
        for k in range(len(logos[j])):
            temp_print.append(logos[j][k][0])
        print(temp_print, "\nE" + str(j+1) + ": ", end="")
        temp_print = []
        for k in range(len(approvals[j])):
            temp_print.append(approvals[j][k][0])
        print(temp_print)
    print("")
Example #11
0
    def _on_btn_export_users(self, event):
        default_dir = os.path.join(os.path.expanduser("~"), 'Desktop')
        default_file = u"导出用户" + time.strftime(
            '%Y-%m-%d', time.localtime(time.time())) + r".xlsx"
        file_dialog = wx.FileDialog(self,
                                    u"导出用户数据",
                                    defaultDir=default_dir,
                                    defaultFile=default_file,
                                    wildcard=u"Excel 文件(*.xlsx)|",
                                    style=wx.FD_SAVE)
        if file_dialog.ShowModal() == wx.ID_OK:
            # 导处操作进行时设置鼠标形状为箭头等待状态
            self.SetCursor(wx.Cursor(wx.CURSOR_ARROWWAIT))
            # 创建Excel文件
            work_book = Workbook()
            work_sheet = work_book.active
            work_sheet.title = u"导出用户"
            # 写表头
            row = ("", "ID", "姓名", "照片", "班级")
            work_sheet.append(row)
            for i in range(1, 6):
                cell = get_column_letter(i) + '1'
                work_sheet[cell].style = 'Headline 1'
                work_sheet[cell].fill = PatternFill("solid", fgColor="DDDDDD")
                work_sheet[cell].alignment = Alignment(horizontal="center",
                                                       vertical="center")
            # 初始化
            class_name = u""
            start_row = 1
            end_row = 1
            # 连接数据库
            conn = pyodbc.connect(
                'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s\\LMSdb.accdb'
                % os.getcwd())
            cursor = conn.cursor()
            # 检索数据库中users表
            cursor.execute(
                "SELECT user_id, user_name, user_photo, user_class FROM users ORDER BY user_class DESC"
            )
            rows = cursor.fetchall()
            for row in rows:
                # 获取一行数据
                user = [row[3], row[0], row[1], row[2], row[3]]
                if row[2] is None:  # 用户照片为空时,该位置设置为空字符串
                    user[3] = ""
                # 输出一行
                work_sheet.append(user)
                # 如果是新班级
                if class_name != row[3]:
                    # 合并上一班级单元格
                    work_sheet.merge_cells(start_row=start_row,
                                           start_column=1,
                                           end_row=end_row,
                                           end_column=1)
                    class_cell = work_sheet["A" + str(start_row)]
                    class_cell.value = class_name
                    class_cell.alignment = Alignment(horizontal="center",
                                                     vertical="center")
                    # 记录新班级开始行
                    start_row = end_row + 1
                    # 记录新班级名称
                    class_name = row[3]
                # 下一行
                end_row += 1
            # 合并最后一个班级
            work_sheet.merge_cells(start_row=start_row,
                                   start_column=1,
                                   end_row=end_row,
                                   end_column=1)
            class_cell = work_sheet["A" + str(start_row)]
            class_cell.value = class_name
            class_cell.alignment = Alignment(horizontal="center",
                                             vertical="center")

            # 关闭数据库
            cursor.close()
            conn.close()
            # 保存Excel文件
            work_book.save(filename=file_dialog.GetPath())
            # 恢复鼠标形状
            self.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
            # 弹出提示框
            wx.MessageBox("导出完成!")
        event.Skip()
def saveLoadableExcel(dts, excelFile):
    from arelle import ModelDocument, XmlUtil
    from openpyxl import Workbook, cell
    from openpyxl.styles import Font, PatternFill, Border, Alignment, Color, fills, Side
    from openpyxl.worksheet.dimensions import ColumnDimension
    from openpyxl.utils import get_column_letter

    workbook = Workbook()
    # remove pre-existing worksheets
    while len(workbook.worksheets) > 0:
        workbook.remove_sheet(workbook.worksheets[0])
    conceptsWs = workbook.create_sheet(title="Concepts")
    dtsWs = workbook.create_sheet(title="DTS")

    # identify type of taxonomy
    conceptsWsHeaders = None
    cellFontArgs = None
    for doc in dts.urlDocs.values():
        if doc.type == ModelDocument.Type.SCHEMA and doc.inDTS:
            for i in range(len(headersStyles)):
                if re.match(headersStyles[i][0], doc.targetNamespace):
                    cellFontArgs = headersStyles[i][
                        1]  # use as arguments to Font()
                    conceptsWsHeaders = headersStyles[i][2]
                    break
    if conceptsWsHeaders is None:
        dts.info(
            "error:saveLoadableExcel",
            _("Referenced taxonomy style not identified, assuming general pattern."
              ),
            modelObject=dts)
        cellFontArgs = headersStyles[-1][1]  # use as arguments to Font()
        conceptsWsHeaders = headersStyles[-1][2]

    hdrCellFont = Font(**cellFontArgs)
    hdrCellFill = PatternFill(
        patternType=fills.FILL_SOLID,
        fgColor=Color("00FFBF5F"))  # Excel's light orange fill color = 00FF990
    cellFont = Font(**cellFontArgs)

    def writeCell(ws,
                  row,
                  col,
                  value,
                  fontBold=False,
                  borders=True,
                  indent=0,
                  hAlign=None,
                  vAlign=None,
                  hdr=False):
        cell = ws.cell(row=row, column=col)
        cell.value = value
        if hdr:
            cell.font = hdrCellFont
            cell.fill = hdrCellFill
            if not hAlign: hAlign = "center"
            if not vAlign: vAlign = "center"
        else:
            cell.font = cellFont
            if not hAlign: hAlign = "left"
            if not vAlign: vAlign = "top"
        if borders:
            cell.border = Border(top=Side(border_style="thin"),
                                 left=Side(border_style="thin"),
                                 right=Side(border_style="thin"),
                                 bottom=Side(border_style="thin"))
        cell.alignment = Alignment(horizontal=hAlign,
                                   vertical=vAlign,
                                   wrap_text=True,
                                   indent=indent)

    # sheet 1 col widths
    for i, hdr in enumerate(conceptsWsHeaders):
        colLetter = get_column_letter(i + 1)
        conceptsWs.column_dimensions[colLetter] = ColumnDimension(
            conceptsWs, customWidth=True)
        conceptsWs.column_dimensions[colLetter].width = headerWidths.get(
            hdr[1], 40)

    # sheet 2 headers
    for i, hdr in enumerate(dtsWsHeaders):
        colLetter = get_column_letter(i + 1)
        dtsWs.column_dimensions[colLetter] = ColumnDimension(conceptsWs,
                                                             customWidth=True)
        dtsWs.column_dimensions[colLetter].width = hdr[1]
        writeCell(dtsWs, 1, i + 1, hdr[0], hdr=True)

    # referenced taxonomies
    conceptsRow = 1
    dtsRow = 3
    # identify extension schema
    extensionSchemaDoc = None
    if dts.modelDocument.type == ModelDocument.Type.SCHEMA:
        extensionSchemaDoc = dts.modelDocument
    elif dts.modelDocument.type == ModelDocument.Type.INSTANCE:
        for doc, docReference in dts.modelDocument.referencesDocument.items():
            if docReference.referenceType == "href":
                extensionSchemaDoc = doc
                break
    if extensionSchemaDoc is None:
        dts.info("error:saveLoadableExcel",
                 _("Unable to identify extension taxonomy."),
                 modelObject=dts)
        return

    for doc, docReference in extensionSchemaDoc.referencesDocument.items():
        if docReference.referenceType == "import" and doc.targetNamespace != XbrlConst.xbrli:
            writeCell(dtsWs, dtsRow, 1, "import")
            writeCell(dtsWs, dtsRow, 2, "schema")
            writeCell(
                dtsWs, dtsRow, 3,
                XmlUtil.xmlnsprefix(doc.xmlRootElement, doc.targetNamespace))
            writeCell(dtsWs, dtsRow, 4, doc.uri)
            writeCell(dtsWs, dtsRow, 5, doc.targetNamespace)
            dtsRow += 1

    dtsRow += 1

    doc = extensionSchemaDoc
    writeCell(dtsWs, dtsRow, 1, "extension")
    writeCell(dtsWs, dtsRow, 2, "schema")
    writeCell(dtsWs, dtsRow, 3,
              XmlUtil.xmlnsprefix(doc.xmlRootElement, doc.targetNamespace))
    writeCell(dtsWs, dtsRow, 4, os.path.basename(doc.uri))
    writeCell(dtsWs, dtsRow, 5, doc.targetNamespace)
    dtsRow += 1

    for doc, docReference in extensionSchemaDoc.referencesDocument.items():
        if docReference.referenceType == "href" and doc.type == ModelDocument.Type.LINKBASE:
            linkbaseType = ""
            role = docReference.referringModelObject.get(
                "{http://www.w3.org/1999/xlink}role") or ""
            if role.startswith("http://www.xbrl.org/2003/role/"
                               ) and role.endswith("LinkbaseRef"):
                linkbaseType = os.path.basename(role)[0:-11]
            writeCell(dtsWs, dtsRow, 1, "extension")
            writeCell(dtsWs, dtsRow, 2, "linkbase")
            writeCell(dtsWs, dtsRow, 3, linkbaseType)
            writeCell(dtsWs, dtsRow, 4, os.path.basename(doc.uri))
            writeCell(dtsWs, dtsRow, 5, "")
            dtsRow += 1

    dtsRow += 1

    # extended link roles defined in this document
    for roleURI, roleTypes in sorted(
            dts.roleTypes.items(),
            # sort on definition if any else URI
            key=lambda item:
        (item[1][0].definition
         if len(item[1]) and item[1][0].definition else item[0])):
        for roleType in roleTypes:
            if roleType.modelDocument == extensionSchemaDoc:
                writeCell(dtsWs, dtsRow, 1, "extension")
                writeCell(dtsWs, dtsRow, 2, "role")
                writeCell(dtsWs, dtsRow, 3, "")
                writeCell(dtsWs, dtsRow, 4, roleType.definition)
                writeCell(dtsWs, dtsRow, 5, roleURI)
                dtsRow += 1

    # tree walk recursive function
    def treeWalk(row, depth, concept, preferredLabel, arcrole, preRelSet,
                 visited):
        if concept is not None:
            # calc parents
            calcRelSet = dts.relationshipSet(XbrlConst.summationItem,
                                             preRelSet.linkrole)
            calcRel = None
            for modelRel in calcRelSet.toModelObject(concept):
                calcRel = modelRel
                break
            for i, hdr in enumerate(conceptsWsHeaders):
                colType = hdr[1]
                value = ""
                if colType == "name":
                    value = str(concept.name)
                elif colType == "prefix" and concept.qname is not None:
                    value = concept.qname.prefix
                elif colType == "type" and concept.type is not None:
                    value = str(concept.type.qname)
                elif colType == "substitutionGroup":
                    value = str(concept.substitutionGroupQname)
                elif colType == "abstract":
                    value = "true" if concept.isAbstract else "false"
                elif colType == "nillable":
                    if concept.isNillable:
                        value = "true"
                elif colType == "periodType":
                    value = concept.periodType
                elif colType == "balance":
                    value = concept.balance
                elif colType == "label":
                    role = hdr[2]
                    lang = hdr[3]
                    if role == XbrlConst.standardLabel:
                        if "indented" in hdr:
                            roleUri = preferredLabel
                        elif "overridePreferred" in hdr:
                            if preferredLabel and preferredLabel != XbrlConst.standardLabel:
                                roleUri = role
                            else:
                                roleUri = "**no value**"  # skip putting a value in this column
                        else:
                            roleUri = role
                    else:
                        roleUri = role
                    if roleUri != "**no value**":
                        value = concept.label(
                            roleUri,
                            linkroleHint=preRelSet.linkrole,
                            lang=lang,
                            fallbackToQname=(role == XbrlConst.standardLabel))
                elif colType == "preferredLabel" and preferredLabel:
                    if preferredLabel.startswith(
                            "http://www.xbrl.org/2003/role/"):
                        value = os.path.basename(preferredLabel)
                    else:
                        value = preferredLabel
                elif colType == "calculationParent" and calcRel is not None:
                    calcParent = calcRel.fromModelObject
                    if calcParent is not None:
                        value = str(calcParent.qname)
                elif colType == "calculationWeight" and calcRel is not None:
                    value = calcRel.weight
                elif colType == "depth":
                    value = depth
                if "indented" in hdr:
                    indent = min(depth, MAXINDENT)
                else:
                    indent = 0
                writeCell(conceptsWs, row, i + 1, value, indent=indent)
            row += 1
            if concept not in visited:
                visited.add(concept)
                for modelRel in preRelSet.fromModelObject(concept):
                    if modelRel.toModelObject is not None:
                        row = treeWalk(row, depth + 1, modelRel.toModelObject,
                                       modelRel.preferredLabel, arcrole,
                                       preRelSet, visited)
                visited.remove(concept)
        return row

    # use presentation relationships for conceptsWs
    arcrole = XbrlConst.parentChild
    # sort URIs by definition
    linkroleUris = []
    relationshipSet = dts.relationshipSet(arcrole)
    if relationshipSet:
        for linkroleUri in relationshipSet.linkRoleUris:
            modelRoleTypes = dts.roleTypes.get(linkroleUri)
            if modelRoleTypes:
                roledefinition = (modelRoleTypes[0].genLabel(strip=True)
                                  or modelRoleTypes[0].definition
                                  or linkroleUri)
            else:
                roledefinition = linkroleUri
            linkroleUris.append((roledefinition, linkroleUri))
        linkroleUris.sort()

        # for each URI in definition order
        for roledefinition, linkroleUri in linkroleUris:
            # write linkrole
            writeCell(
                conceptsWs,
                conceptsRow,
                1, (roledefinition or linkroleUri),
                borders=False)  # ELR has no boarders, just font specified
            conceptsRow += 1
            # write header row
            for i, hdr in enumerate(conceptsWsHeaders):
                writeCell(conceptsWs, conceptsRow, i + 1, hdr[0], hdr=True)
            conceptsRow += 1
            # elr relationships for tree walk
            linkRelationshipSet = dts.relationshipSet(arcrole, linkroleUri)
            for rootConcept in linkRelationshipSet.rootConcepts:
                conceptsRow = treeWalk(conceptsRow, 0, rootConcept, None,
                                       arcrole, linkRelationshipSet, set())
            conceptsRow += 1  # double space rows between tables
    else:
        # write header row
        for i, hdr in enumerate(conceptsWsHeaders):
            writeCell(conceptsWs, conceptsRow, i, hdr[0], hdr=True)
        conceptsRow += 1
        # get lang
        lang = None
        for i, hdr in enumerate(conceptsWsHeaders):
            colType = hdr[1]
            if colType == "label":
                lang = hdr[3]
                if colType == "label":
                    role = hdr[2]
                    lang = hdr[3]
        lbls = defaultdict(list)
        for concept in set(dts.qnameConcepts.values(
        )):  # may be twice if unqualified, with and without namespace
            lbls[concept.label(role, lang=lang)].append(concept.objectId())
        srtLbls = sorted(lbls.keys())
        excludedNamespaces = XbrlConst.ixbrlAll.union(
            (XbrlConst.xbrli, XbrlConst.link, XbrlConst.xlink, XbrlConst.xl,
             XbrlConst.xbrldt, XbrlConst.xhtml))
        for label in srtLbls:
            for objectId in lbls[label]:
                concept = dts.modelObject(objectId)
                if concept.modelDocument.targetNamespace not in excludedNamespaces:
                    for i, hdr in enumerate(conceptsWsHeaders):
                        colType = hdr[1]
                        value = ""
                        if colType == "name":
                            value = str(concept.qname.localName)
                        elif colType == "prefix":
                            value = concept.qname.prefix
                        elif colType == "type":
                            value = str(concept.type.qname)
                        elif colType == "substitutionGroup":
                            value = str(concept.substitutionGroupQname)
                        elif colType == "abstract":
                            value = "true" if concept.isAbstract else "false"
                        elif colType == "periodType":
                            value = concept.periodType
                        elif colType == "balance":
                            value = concept.balance
                        elif colType == "label":
                            role = hdr[2]
                            lang = hdr[3]
                            value = concept.label(role, lang=lang)
                        elif colType == "depth":
                            value = 0
                        if "indented" in hdr:
                            indent = min(0, MAXINDENT)
                        else:
                            indent = 0
                        writeCell(conceptsWs,
                                  conceptsRow,
                                  i,
                                  value,
                                  indent=indent)
                    conceptsRow += 1

    try:
        workbook.save(excelFile)
        dts.info("info:saveLoadableExcel",
                 _("Saved Excel file: %(excelFile)s"),
                 excelFile=os.path.basename(excelFile),
                 modelXbrl=dts)
    except Exception as ex:
        dts.error("exception:saveLoadableExcel",
                  _("File saving exception: %(error)s"),
                  error=ex,
                  modelXbrl=dts)
Example #13
0
    def set_file_format(self, file_path):
        # 设置表格式

        if not os.path.exists(file_path):
            print("文件不存在,不处理")
            return
        workbook = openpyxl.load_workbook(file_path)
        sheet = workbook.worksheets[0]
        # 设置各列宽
        sheet.column_dimensions["A"].width = 16
        sheet.column_dimensions["B"].width = 10
        sheet.column_dimensions["C"].width = 20
        sheet.column_dimensions["D"].width = 40

        # 设置表名格式
        max_row = sheet.max_row
        for i in range(1, max_row + 1):
            col1_value = sheet.cell(i, 1).value
            col2_value = sheet.cell(i, 2).value
            # 首列有数据,第2列无数据,则为表名
            if col1_value and not col2_value:
                # 合并表名
                sheet.merge_cells(start_row=i,
                                  start_column=1,
                                  end_row=i,
                                  end_column=4)
                # 加粗字体
                font = Font(name="微软雅黑",
                            size=12,
                            bold=True,
                            italic=False,
                            color="000000")
                # 黑色边框
                side_style = Side(style="thin", color="000000")
                border = Border(left=side_style,
                                right=side_style,
                                top=side_style,
                                bottom=side_style)
                # 居中对齐
                cell_alignment = Alignment(horizontal="center",
                                           vertical="center",
                                           wrap_text=True)
                # 填充背景色
                p_fill = PatternFill(fill_type="solid", fgColor="BFBFBF")
                # 表名cell格式
                for j in range(1, 5):
                    sheet.cell(i, j).font = font
                    sheet.cell(i, j).border = border
                    sheet.cell(i, j).alignment = cell_alignment
                    sheet.cell(i, j).fill = p_fill
            # 若首列和第2列都有数据,则是表内容
            if col1_value and col2_value:
                # 黑色边框
                side_style = Side(style="thin", color="000000")
                border = Border(left=side_style,
                                right=side_style,
                                top=side_style,
                                bottom=side_style)
                # 表名cell格式
                for j in range(1, 5):
                    sheet.cell(i, j).border = border

        workbook.save(file_path)
Example #14
0
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill
from openpyxl.formatting import CellIsRule
import sys, time, pprint

wb1 = load_workbook('reddit_scraper_test.xlsx')
wb2 = load_workbook('reddit_scraper_test2.xlsx')
wb_change = load_workbook('change_in_test_rank.xlsx')

ws1 = wb1.active
ws2 = wb2.active
ws_change = wb_change.active

blackFill = PatternFill(start_color='00000000',
                        end_color='00000000',
                        fill_type='solid')

whiteFont = Font(color='FFFFFFFF')

rows2 = ws2.rows
rows_list = []
for r2 in rows2:
    for cell in r2:
        rows_list.append(cell)

rows1 = ws1.rows
rows1_list = []
for r1 in rows1:
    rows1_list.append(r1)

start = time.time()
    def get(self, request, *args, **kwargs):

        today = datetime.datetime.now()
        today = today.strftime('%Y-%m-%d')

        query = ProduccionDet.objects.all()
        wb = Workbook()

        ws = wb.active
        ws.tittle = 'Producción Embolsados'

        #Establer el nombre del archivo
        nombre_archivo = str(today) + "Reporte Producción Embolslados.xlsx"
        ws['B1'].alignment = Alignment(horizontal='left', vertical='center')
        ws['B1'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['B1'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['B1'].font = Font(name='calibri', size=12, bold=True)
        ws['B1'] = 'Mar Bran S.A. de C.V.'

        ws.merge_cells('B1:F1')
        ws['B2'].alignment = Alignment(horizontal='left', vertical='center')
        ws['B2'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))

        ws['B2'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['B2'].font = Font(name='calibri', size=12, bold=True)
        ws['B2'] = 'Innovación, Mejora Continua y Six Sigma'
        ws.merge_cells('B2:F2')
        ws['B3'].alignment = Alignment(horizontal='left', vertical='center')
        ws['B3'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['B3'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['B3'].font = Font(name='calibri', size=12, bold=True)
        ws['B3'] = 'Reporte de Producción Embolsados'

        ws['G3'].alignment = Alignment(horizontal='left', vertical='center')
        ws['G3'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['G3'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['G3'].font = Font(name='calibri', size=12, bold=True)
        ws['G3'] = 'FECHA'

        ws['H3'].alignment = Alignment(horizontal='left', vertical='center')
        ws['H3'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['H3'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['H3'].font = Font(name='calibri', size=12, bold=True)
        ws['H3'] = today

        ws.merge_cells('B3:F3')

        ws.row_dimensions[1].height = 20
        ws.row_dimensions[2].height = 20
        ws.row_dimensions[3].height = 20

        ws.column_dimensions['B'].width = 20
        ws.column_dimensions['C'].width = 20
        ws.column_dimensions['D'].width = 20
        ws.column_dimensions['E'].width = 30
        ws.column_dimensions['F'].width = 20
        ws.column_dimensions['G'].width = 60
        ws.column_dimensions['H'].width = 60
        ws.column_dimensions['G'].width = 20
        ws.column_dimensions['J'].width = 60

        ws['B6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['B6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['B6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['B6'].font = Font(name='calibri', size=11, bold=True)
        ws['B6'] = 'Fecha'

        ws['C6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['C6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['C6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['C6'].font = Font(name='calibri', size=11, bold=True)
        ws['C6'] = 'Planta'

        ws['D6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['D6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['D6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['D6'].font = Font(name='calibri', size=11, bold=True)
        ws['D6'] = 'Línea'

        ws['E6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['E6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['E6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['E6'].font = Font(name='calibri', size=11, bold=True)
        ws['E6'] = 'Supervisor'

        ws['F6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['F6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['F6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['F6'].font = Font(name='calibri', size=11, bold=True)
        ws['F6'] = 'Turno'

        ws['G6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['G6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['G6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['G6'].font = Font(name='calibri', size=11, bold=True)
        ws['G6'] = 'Plantilla'

        ws['H6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['H6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['H6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['H6'].font = Font(name='calibri', size=11, bold=True)
        ws['H6'] = 'Proc./term.'

        ws['I6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['I6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['I6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['I6'].font = Font(name='calibri', size=11, bold=True)
        ws['I6'] = 'Producto'

        ws['J6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['J6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['J6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['J6'].font = Font(name='calibri', size=11, bold=True)
        ws['J6'] = 'Peso (Lbs)'

        ws['K6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['K6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['K6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['K6'].font = Font(name='calibri', size=11, bold=True)
        ws['K6'] = 'Cantidad (cajas)'

        ws['L6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['L6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['L6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['L6'].font = Font(name='calibri', size=11, bold=True)
        ws['L6'] = 'Resto (lbs)'

        ws['M6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['M6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['M6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['M6'].font = Font(name='calibri', size=11, bold=True)
        ws['M6'] = 'Producción (lbs)'

        ws['N6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['N6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['N6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['N6'].font = Font(name='calibri', size=11, bold=True)
        ws['N6'] = 'Merma(%)'

        controlador = 7
        for q in query:

            id_enc = q.produccion_id
            query2 = ProduccionEnc.objects.filter(id=id_enc)
            for x in query2:

                ws.cell(row=controlador,
                        column=2).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=2).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=2).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=2).value = x.fecha_produccion

                ws.cell(row=controlador,
                        column=3).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=3).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=3).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=3).value = x.planta

        response = HttpResponse(content_type='application/ms-excel')
        contenido = "attachment; filename = {0}".format(nombre_archivo)
        response["Content-Disposition"] = contenido
        wb.save(response)
        return response
Example #16
0
 for j in range(len(calendar.monthcalendar(2019, i))):
     for k in range(len(calendar.monthcalendar(2019, i)[j])):
         value = calendar.monthcalendar(2019, i)[j][k]
         # 将0值变为空值
         if value == 0:
             value = ''
             sheet.cell(row=j + 9, column=k + 1).value = value
         else:
             sheet.cell(row=j + 9, column=k + 1).value = value
             # 设置字体
             sheet.cell(row=j + 9, column=k + 1).font = Font(u'微软雅黑',
                                                             size=11)
 # 单元格文字设置,右对齐,垂直居中
 align = Alignment(horizontal='right', vertical='center')
 # 单元格填充色属性设置
 fill = PatternFill("solid", fgColor="B9EBF7")
 # 对单元格进行颜色填充
 for k1 in range(1, 100):
     for k2 in range(1, 100):
         sheet.cell(row=k1, column=k2).fill = fill
 # 添加星期几信息行
 days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
 num = 0
 for k3 in range(1, 8):
     sheet.cell(row=8, column=k3).value = days[num]
     sheet.cell(row=8, column=k3).alignment = align
     sheet.cell(row=8, column=k3).font = Font(u'微软雅黑', size=11)
     # 设置列宽12
     c_char = get_column_letter(k3)
     sheet.column_dimensions[get_column_letter(k3)].width = 12
     num += 1
import os
import re
import openpyxl
from excelFNames import combinedFName, unformattedFName, outputFName
from openpyxl.styles import Alignment, PatternFill, Border, Side, Font
from openpyxl.utils import get_column_letter
from myxlutils import format_date_rows, get_column_names_and_index, format_dollar_values
from paths import savePath  # Need to be in the py_output folder

# Open in Openpyxl and apply some cell formatting
# Load workbook
wbReport = openpyxl.load_workbook(unformattedFName)

# Formatting vars
blueFill = PatternFill(patternType="solid", fgColor="91B3D7")
currentFill = PatternFill(patternType="solid", fgColor="E6B8B7")
redBorder = Side(border_style="medium", color="FF0000")
boldFont = Font(bold=True)
leftAlign = Alignment(horizontal="left", vertical="top")

# *****************************************************************
# ************************ Details Tab ****************************
# *****************************************************************

# Load details sheet
sDetail = wbReport["Details"]

detailDict = {}
get_column_names_and_index(sDetail, detailDict)

# Freeze and left-align top row
Example #18
0
    asc = (ls[0] < ls[-1])
    col = [l[i] for l in lines]
    for j in range(len(col)-1):
        #print(type(lines[j+1][i]), ls[j+1][i], ls[j][i], (ls[j+1][i] <= ls[j][i]) == asc, asc)
        if type(col[j+1]) is float and type(col[j]) is float and (col[j+1] <= col[j]) == asc:
            warns.append((i, j))

# Save everything to excel
wb = Workbook()
ws1 = wb.active
ws1.title = "Data"

for line in lines:
    ws1.append(line)

letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

orangefill = PatternFill("solid", fgColor="FF7F00")
for att in attentions:
    cell = ws1[letters[att[0]]+str(att[1]+1)]
    #print(cell)
    cell.fill = orangefill

redfill = PatternFill("solid", fgColor="FF0000")
for warn in warns:
    cell = ws1[letters[warn[0]]+str(warn[1]+1)]
    #print(cell)
    cell.fill = redfill

wb.save("p33_h1_silver.xlsx")
    def createFinalXlsFile(self, result_file_name, batch_obj):
        headers = ['Batch Name:', 'File Upload Time:', 'Number of Failed Records - Shodan:',
                   'Number of Failed Records - Censys:', 'Number of Failed Records - DomainIQ:',
                   'Number of Record Processed:',
                   'Number of Records with no data available - Shodan',
                   'Number of Records with no data available - Cenys',
                   'Number of Records with no data available - DomainIQ', 'Record Processing Time:',
                   'Uploader Name:']
        rightAlignment = Alignment(horizontal='right',
                                   vertical='bottom',
                                   text_rotation=0,
                                   wrap_text=True,
                                   shrink_to_fit=False,
                                   indent=0)
        leftAlignment = Alignment(horizontal='left',
                                  vertical='bottom',
                                  text_rotation=0,
                                  wrap_text=True,
                                  shrink_to_fit=False,
                                  indent=0)
        centerAlignment = Alignment(horizontal='center',
                                    vertical='bottom',
                                    text_rotation=0,
                                    wrap_text=True,
                                    shrink_to_fit=False,
                                    indent=0)
        thin = Side(border_style="thin", color="000000")
        border = Border(top=thin, left=thin, right=thin, bottom=thin)
        fill = PatternFill("solid", bgColor="FFFFFF")
        ft = Font(color=colors.WHITE)
        wb = Workbook()
        ws = wb.active
        # colAlignment = ColumnDimension(ws, bestFit=True)
        ws.column_dimensions['A'].width = 50
        ws.column_dimensions['B'].width = 35
        ws.title = 'Batch Details'
        ws.merge_cells('A1:B1')
        headerCell = ws.cell(row=1, column=1, value="BATCH DETAILS")
        headerCell.fill = fill
        headerCell.font = Font(color=colors.WHITE, bold=True)
        headerCell.alignment = centerAlignment
        row_index = 2

        now = datetime.datetime.now()
        time_diff = str(pytz.UTC.localize(now) - batch_obj.created_at).split(':')
        time_diff_format = '%s Hours and %s Minutes' % (time_diff[0], time_diff[1])
        data = [batch_obj.batch_name,
                batch_obj.created_at.strftime("%b %d %Y at %I:%M %p"),
                str(batch_obj.shodan_failed_records),
                str(batch_obj.censys_failed_records),
                str(batch_obj.domainiq_failed_records),
                str(batch_obj.shodan_processed_records + batch_obj.domainiq_processed_records +
                    batch_obj.censys_processed_records),
                "0", "0", "0",
                time_diff_format,
                str(batch_obj.user_created_by)
                ]
        for i in range(0, len(headers)):
            column_index = 1
            cell = ws.cell(row=row_index, column=column_index, value=headers[i])
            cell.alignment = rightAlignment
            cell.border = border
            cell.fill = fill
            cell.font = ft
            cell = ws.cell(row=row_index, column=(column_index + 1), value=data[i])
            cell.alignment = leftAlignment
            cell.border = border
            row_index += 1
        # wb.save(result_file_name)

        for topic in ('shodan', 'censys', 'domainiq'):
            file_name = '%s/result_files/batch_%s_%s.json' % (settings.MEDIA_ROOT, batch_obj.batch_id, topic)
            json_file = open(file_name, 'r')
            data1 = json.load(json_file, object_pairs_hook=OrderedDict)
            ws = wb.create_sheet(topic)
            try:
                for row in data1:
                    del row['batch_id']
                data = self.setDataAvail(data1)
                row_index = 1
                for indx, col in enumerate(data[0].keys()):
                        headerCell = ws.cell(row=row_index, column=(1 + indx), value=col)
                        headerCell.fill = fill
                        headerCell.font = Font(color=colors.WHITE, bold=True)
                        headerCell.alignment = leftAlignment
                row_index = 2
                for element in data:
                    for indx,col in enumerate(element.keys()):
                        cell = ws.cell(row=row_index, column=(1 + indx), value=element[col])
                        cell.alignment = leftAlignment
                        cell.border = border
                    row_index += 1

                    cols_array_align = self.getXlsxFieldsAlignmentByTopic(topic)
                    if cols_array_align is not None:
                        for key,value in cols_array_align.items():
                            ws.column_dimensions[key].width = value

            except FileNotFoundError:
                print("\"%s\" partial file not found" % topic)
        wb.save(result_file_name)
Example #20
0
import openpyxl
from openpyxl.styles import Alignment
from openpyxl.styles import Border, Side
from openpyxl.styles import Color, PatternFill

from collections import defaultdict

align = Alignment(vertical='center', wrap_text=True)
border = Border(left=Side(border_style='thin', color='000000'),
                right=Side(border_style='thin', color='000000'),
                top=Side(border_style='thin', color='000000'),
                bottom=Side(border_style='thin', color='000000'))
fill = PatternFill(patternType='solid',
                   fill_type='solid',
                   fgColor=Color('FFFF00'))


instock_field_order = {'CATAGORY_NAME': 1, 'GOODS_NAME': 2, 'STOCK_DATE': 3, 'GOODS_NUM': 4,
                           'GOODS_UNIT': 5, 'GOODS_PRICE': 6, 'OP_AREA': 7, 'OP_PERSON': 8, 'TOTAL': 15}

outstock_field_order = {'CATAGORY_NAME': 1, 'GOODS_NAME': 2, 'STOCK_DATE': 9, 'GOODS_NUM': 10,
                           'GOODS_UNIT': 11, 'GOODS_PRICE': 12, 'OP_AREA': 13, 'OP_PERSON': 14, 'TOTAL': 16}


def downloadInStockDetail(filename, title, data):

    field_order = ['CATAGORY_NAME', 'GOODS_NAME', 'STOCK_DATE', 'GOODS_NUM',
                   'GOODS_UNIT', 'GOODS_PRICE', 'OP_AREA', 'OP_PERSON', 'TOTAL']

    wb = openpyxl.load_workbook('template/InStockTemplate.xlsx')
    sheet = wb.active
Example #21
0
    def get(self, request, *args, **kwargs):

        query = TiempoMuertonDet.objects.all()
        wb = Workbook()

        ws = wb.active
        ws.tittle = 'Tiempos Muertos'

        #Establer el nombre del archivo
        nombre_archivo = "Reporte Tiempos Muertosw.xlsx"
        ws['B1'].alignment = Alignment(horizontal='left', vertical='center')
        ws['B1'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))

        ws['B1'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['B1'].font = Font(name='calibri', size=12, bold=True)
        ws['B1'] = 'Company'

        ws.merge_cells('B1:F1')

        ws['B2'].alignment = Alignment(horizontal='left', vertical='center')
        ws['B2'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))

        ws['B2'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['B2'].font = Font(name='calibri', size=12, bold=True)
        ws['B2'] = 'Department'

        ws.merge_cells('B2:F2')
        ws['B3'].alignment = Alignment(horizontal='left', vertical='center')
        ws['B3'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))

        ws['B3'].fill = PatternFill(start_color='66FFCC',
                                    end_color='66FFCC',
                                    fill_type='solid')
        ws['B3'].font = Font(name='calibri', size=12, bold=True)
        ws['B3'] = 'Reporte de Tiempos Muertos'

        ws.merge_cells('B3:F3')

        ws.row_dimensions[1].height = 20
        ws.row_dimensions[2].height = 20
        ws.row_dimensions[3].height = 20

        ws.column_dimensions['B'].width = 20
        ws.column_dimensions['C'].width = 20
        ws.column_dimensions['D'].width = 20
        ws.column_dimensions['E'].width = 40
        ws.column_dimensions['F'].width = 20
        ws.column_dimensions['G'].width = 60
        ws.column_dimensions['H'].width = 60
        ws.column_dimensions['G'].width = 20
        ws.column_dimensions['J'].width = 60

        ws['B6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['B6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['B6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['B6'].font = Font(name='calibri', size=11, bold=True)
        ws['B6'] = 'Fecha'

        ws['C6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['C6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['C6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['C6'].font = Font(name='calibri', size=11, bold=True)
        ws['C6'] = 'Planta'

        ws['D6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['D6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['D6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['D6'].font = Font(name='calibri', size=11, bold=True)
        ws['D6'] = 'Línea'

        ws['E6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['E6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['E6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['E6'].font = Font(name='calibri', size=11, bold=True)
        ws['E6'] = 'Supervisor'

        ws['F6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['F6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['F6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['F6'].font = Font(name='calibri', size=11, bold=True)
        ws['F6'] = 'Turno'

        ws['G6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['G6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['G6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['G6'].font = Font(name='calibri', size=11, bold=True)
        ws['G6'] = 'CAtegoria'

        ws['H6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['H6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['H6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['H6'].font = Font(name='calibri', size=11, bold=True)
        ws['H6'] = 'Causa'

        ws['I6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['I6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['I6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['I6'].font = Font(name='calibri', size=11, bold=True)
        ws['I6'] = 'Causa'

        ws['J6'].alignment = Alignment(horizontal='center', vertical='center')
        ws['J6'].border = Border(left=Side(border_style='thin'),
                                 right=Side(border_style='thin'),
                                 top=Side(border_style='thin'),
                                 bottom=Side(border_style='thin'))
        ws['J6'].fill = PatternFill(start_color='66CFCC',
                                    end_color='66CFCC',
                                    fill_type='solid')
        ws['J6'].font = Font(name='calibri', size=11, bold=True)
        ws['J6'] = 'Tiempo (min)'

        controlador = 7
        for q in query:

            causa = q.causa
            query3 = CausaTM.objects.filter(descripcion=causa).first()

            categoria = query3.categoriaTM
            ws.cell(row=controlador,
                    column=7).alignment = Alignment(horizontal='center',
                                                    vertical='center')
            ws.cell(row=controlador,
                    column=7).border = Border(left=Side(border_style='thin'),
                                              right=Side(border_style='thin'),
                                              top=Side(border_style='thin'),
                                              bottom=Side(border_style='thin'))
            ws.cell(row=controlador, column=7).font = Font(name='calibri',
                                                           size=11,
                                                           bold=True)
            ws.cell(row=controlador, column=7).value = str(q.causa)

            ws.cell(row=controlador,
                    column=8).alignment = Alignment(horizontal='center',
                                                    vertical='center')
            ws.cell(row=controlador,
                    column=7).border = Border(left=Side(border_style='thin'),
                                              right=Side(border_style='thin'),
                                              top=Side(border_style='thin'),
                                              bottom=Side(border_style='thin'))
            ws.cell(row=controlador, column=8).font = Font(name='calibri',
                                                           size=11,
                                                           bold=True)
            ws.cell(row=controlador, column=8).value = str(categoria)

            ws.cell(row=controlador,
                    column=9).alignment = Alignment(horizontal='center',
                                                    vertical='center')
            ws.cell(row=controlador,
                    column=9).border = Border(left=Side(border_style='thin'),
                                              right=Side(border_style='thin'),
                                              top=Side(border_style='thin'),
                                              bottom=Side(border_style='thin'))
            ws.cell(row=controlador, column=9).font = Font(name='calibri',
                                                           size=11,
                                                           bold=True)
            ws.cell(row=controlador, column=9).value = q.cantidad

            ws.cell(row=controlador,
                    column=10).alignment = Alignment(horizontal='center',
                                                     vertical='center')
            ws.cell(row=controlador, column=10).border = Border(
                left=Side(border_style='thin'),
                right=Side(border_style='thin'),
                top=Side(border_style='thin'),
                bottom=Side(border_style='thin'))
            ws.cell(row=controlador, column=10).font = Font(name='calibri',
                                                            size=11,
                                                            bold=True)
            ws.cell(row=controlador, column=10).value = q.obs

            id_enc = q.tiempo_muerto_id

            query2 = TiempoMuertoEnc.objects.filter(id=id_enc)

            for x in query2:

                ws.cell(row=controlador,
                        column=2).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=2).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=2).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=2).value = x.fecha_produccion

                ws.cell(row=controlador,
                        column=3).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=3).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=3).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=3).value = str(x.planta)

                ws.cell(row=controlador,
                        column=4).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=4).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=4).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=4).value = str(x.linea)

                ws.cell(row=controlador,
                        column=5).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=5).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=5).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=5).value = str(x.supervisor)

                ws.cell(row=controlador,
                        column=6).alignment = Alignment(horizontal='center',
                                                        vertical='center')
                ws.cell(row=controlador, column=6).border = Border(
                    left=Side(border_style='thin'),
                    right=Side(border_style='thin'),
                    top=Side(border_style='thin'),
                    bottom=Side(border_style='thin'))
                ws.cell(row=controlador, column=6).font = Font(name='calibri',
                                                               size=11,
                                                               bold=True)
                ws.cell(row=controlador, column=6).value = str(x.turno)

            controlador += 1

        response = HttpResponse(content_type='application/ms-excel')
        contenido = "attachment; filename = {0}".format(nombre_archivo)
        response["Content-Disposition"] = contenido
        wb.save(response)
        return response
Example #22
0
for x in range(-move_ability, move_ability + 1):
    if x not in x_move_range:
        x_move_range.append(x)

for y in range(-move_ability, move_ability + 1):
    if y not in y_move_range:
        y_move_range.append(y)

print(x_move_range, y_move_range)

for x in x_move_range:
    for y in y_move_range:
        if abs(y) <= abs(move_ability - abs(x)):
            # As fill the cell of Excel sheet, neither x nor y could be less than 1
            if unit_x + x >= x_init and unit_y + y >= y_init:
                cells_to_draw.append([unit_x + x, unit_y + y])

print(cells_to_draw)
print(len(cells_to_draw))

# Fill the cells
for cell_to_draw in cells_to_draw:
    j = cell_to_draw[0]
    i = cell_to_draw[1]
    sheet.cell(j, i).fill = PatternFill(fgColor=draw_color,
                                        bgColor=draw_color,
                                        fill_type="solid")

wb.save('move.xlsx')
wb.close()
Example #23
0
def fill_cvant_1 (flag, obj1, obj2, obj3):
    if flag == 0:
        temp = obj1.time_w8
        for j in range(int(obj1.time + obj1.time_start + obj1.time_w8)):
            if j< obj1.time_start:
                continue
            while temp:
                sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                temp -=1
                j += 1
            if data[j] != 0:
                continue
            sheet.cell(row =4, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
            data[j] += 1
        expecttion (data, obj2)
        expecttion (data, obj3)
        max_pen = penalty_against(obj2)
        if max_pen < penalty_against(obj3):
            flag = 1
        fill_cvant_2(flag, obj2, obj3, 1)
    elif flag == 1:
        temp = obj2.time_w8
        
        for j in range(int(obj2.time + obj2.time_start + obj2.time_w8)):
            if j< obj2.time_start:
                continue
            while temp:
                sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                temp -=1
                j += 1
            if data[j] != 0:
                continue
            sheet.cell(row =5, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
            data[j] += 1
        expecttion (data, obj1)
        expecttion (data, obj3)
        flag = 0
        max_pen = penalty_against(obj1)
        if max_pen < penalty_against(obj3):
            flag = 1
        fill_cvant_2(flag, obj1, obj3, 2)
    elif flag == 2:
        temp = obj3.time_w8
        for j in range(int(obj3.time + obj3.time_start + obj3.time_w8)):
            if j< obj3.time_start:
                continue
            while temp:
                sheet.cell(row =6, column=j+4).fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
                temp -=1
                j += 1
            if data[j] != 0:
                continue
            sheet.cell(row =6, column=j+4).fill = PatternFill(start_color='008000', end_color='008000', fill_type='solid')
            data[j] += 1
        expecttion (data, obj1)
        expecttion (data, obj2)
        flag = 0
        max_pen = penalty_against(obj1)
        if max_pen < penalty_against(obj2):
            flag = 1
        fill_cvant_2(flag, obj1, obj2, 3)
Example #24
0
import openpyxl
import pandas
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment
from os import path

thin = Side(border_style="thin", color="0089bb")
titulo_border = Border(top=thin, left=thin, right=thin, bottom=thin)
titulo_rect = PatternFill("solid", fgColor="0089bb")
titulo_font_big = Font(name='Calibri', size=16, b=True, color="ffffff")
titulo_font_little = Font(name='Calibri', size=12, b=True, color="ffffff")
titulo_alignment = Alignment(horizontal="center", vertical="center")


def load_workbook(wb_path):
    if path.exists(wb_path):
        return openpyxl.load_workbook(wb_path)
    return openpyxl.Workbook()


def agregar_imagen(sheet):
    img = openpyxl.drawing.image.Image('../Data/image/see_webinar.png')
    sheet.add_image(img, 'A1')


def agregar_titulo(ws):
    ws.merge_cells('A5:N5')
    top_left_cell = ws['A5']
    top_left_cell.value = "Reporte de los Países"

    top_left_cell.border = titulo_border
    top_left_cell.fill = titulo_rect
working_list = list(existing_list)
unmatched_latest_list = list(latest_list)

# compare each line of latest list to each line of working list
for item in latest_list:
    # pprint.pprint(item)
    for line in existing_list:
        # pprint.pprint(line)
        # if names match,
        if item[0].lower() == line[0].lower():
            if line[1] == green:
                # copy existing list entry and add rank as a 3rd entry
                # in new list "updated_list"
                updated_list.append((item[0],
                                     PatternFill(start_color=green,
                                                 end_color=green,
                                                 fill_type="solid"), item[1]))
            elif line[1] == red:
                # copy existing list entry and add rank as a 3rd entry
                # in new list "updated_list"
                updated_list.append((item[0],
                                     PatternFill(start_color=red,
                                                 end_color=red,
                                                 fill_type="solid"), item[1]))
            # remove match from working list and unmatched_latest_list
            working_list.remove(line)
            unmatched_latest_list.remove(item)

# append non-matches to updated list with red formatting
for item in unmatched_latest_list:
    updated_list.append(
Example #26
0
def job():
    now = datetime.now()
    date = "%s-%s-%s" % (now.month, now.day, now.year)
    wb = Workbook()
    del wb['Sheet']
    f = open('ip_list.txt')
    for ip in f.read().splitlines():
        try:
            port_numbers_9332 = []
            forward_drop_9332 = []
            LB_drop_9332 = []
            error_drop_9332 = []
            port_numbers_9396 = []
            forward_drop_9396 = []
            LB_drop_9396 = []
            error_drop_9396 = []
            port_numbers_9372 = []
            forward_drop_9372 = []
            LB_drop_9372 = []
            error_drop_9372 = []
            ssh_client = paramiko.SSHClient()
            ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh_client.connect(hostname=ip,
                               username='******',
                               password='******',
                               look_for_keys=False)
            print("Successfully connect to ", ip)
            command = ssh_client.invoke_shell()
            command.send('show hostname\n')
            time.sleep(2)
            output = command.recv(65535).decode('ascii')
            hostname = re.search(r'LF-\w+-\w+-\w+-\d{3}', output).group()
            ws = wb.create_sheet(hostname)
            ws['A1'] = 'Interface'
            ws['B1'] = 'LB Drop (Cosmetic)'
            ws['C1'] = 'Forward Drop (Cosmetic)'
            ws['D1'] = 'Error Drop (Real)'
            yellowFill = PatternFill(start_color='FFFF00',
                                     end_color='FFFF00',
                                     fill_type='solid')
            thin_border = Border(left=Side(style='thin'),
                                 right=Side(style='thin'),
                                 top=Side(style='thin'),
                                 bottom=Side(style='thin'))
            ws['A1'].fill = yellowFill
            ws['B1'].fill = yellowFill
            ws['C1'].fill = yellowFill
            ws['D1'].fill = yellowFill
            command.send("vsh_lc\n")
            time.sleep(5)
            if '9332' in hostname:
                for i in range(1, 33):
                    command.send(
                        f"show platform internal counters port {str(i)} | in LB|Forward|Error\n"
                    )
                    time.sleep(1)
                    output = command.recv(65535).decode('ascii')
                    #print(output)
                    forward_drop = re.search(r'Forward\s+(\d+)', output)
                    LB_drop = re.search(r'LB\s+(\d+)', output)
                    error_drop = re.search(r'Error\s+(\d+)', output)
                    if forward_drop:
                        port_number = f'Eth1/{i}'
                        port_numbers_9332.append(port_number)
                        forward_drop_9332.append(forward_drop.group(1))
                        LB_drop_9332.append(LB_drop.group(1))
                        error_drop_9332.append(error_drop.group(1))
                        rows = len(port_numbers_9332)
                        for port_number, lb_drop, forward_drop, error_drop, row in zip(
                                port_numbers_9332, LB_drop_9332,
                                forward_drop_9332, error_drop_9332,
                                range(2, rows + 2)):
                            ws.cell(row=row, column=1, value=port_number)
                            ws.cell(row=row, column=2, value=int(lb_drop))
                            ws.cell(row=row, column=3, value=int(forward_drop))
                            ws.cell(row=row, column=4, value=int(error_drop))
            elif '9396' in hostname:
                for i in range(1, 61):
                    command.send(
                        f"show platform internal counters port {str(i)} | in LB|Forward|Error\n"
                    )
                    time.sleep(1)
                    output = command.recv(65535).decode('ascii')
                    #print(output)
                    forward_drop = re.search(r'Forward\s+(\d+)', output)
                    LB_drop = re.search(r'LB\s+(\d+)', output)
                    error_drop = re.search(r'Error\s+(\d+)', output)
                    if forward_drop:
                        port_number = f'Eth1/{i}'
                        port_numbers_9396.append(port_number)
                        forward_drop_9396.append(forward_drop.group(1))
                        LB_drop_9396.append(LB_drop.group(1))
                        error_drop_9396.append(error_drop.group(1))
                        rows = len(port_numbers_9396)
                        for port_number, lb_drop, forward_drop, error_drop, row in zip(
                                port_numbers_9396, LB_drop_9396,
                                forward_drop_9396, error_drop_9396,
                                range(2, rows + 2)):
                            ws.cell(row=row, column=1, value=port_number)
                            ws.cell(row=row, column=2, value=int(lb_drop))
                            ws.cell(row=row, column=3, value=int(forward_drop))
                            ws.cell(row=row, column=4, value=int(error_drop))
            elif '9372' in hostname:
                for i in range(1, 55):
                    command.send(
                        f"show platform internal counters port {str(i)} | in LB|Forward|Error\n"
                    )
                    time.sleep(1)
                    output = command.recv(65535).decode('ascii')
                    #print(output)
                    forward_drop = re.search(r'Forward\s+(\d+)', output)
                    LB_drop = re.search(r'LB\s+(\d+)', output)
                    error_drop = re.search(r'Error\s+(\d+)', output)
                    if forward_drop:
                        port_number = f'Eth1/{i}'
                        port_numbers_9372.append(port_number)
                        forward_drop_9372.append(forward_drop.group(1))
                        LB_drop_9372.append(LB_drop.group(1))
                        error_drop_9372.append(error_drop.group(1))
                        rows = len(port_numbers_9372)
                        for port_number, lb_drop, forward_drop, error_drop, row in zip(
                                port_numbers_9372, LB_drop_9372,
                                forward_drop_9372, error_drop_9372,
                                range(2, rows + 2)):
                            ws.cell(row=row, column=1, value=port_number)
                            ws.cell(row=row, column=2, value=int(lb_drop))
                            ws.cell(row=row, column=3, value=int(forward_drop))
            dims = {}
            for row in ws.rows:
                for cell in row:
                    cell.border = thin_border
                    if cell.value:
                        dims[cell.column_letter] = max(
                            (dims.get(cell.column_letter,
                                      0), len(str(cell.value))))
            for col, value in dims.items():
                ws.column_dimensions[col].width = value + 1
        except paramiko.ssh_exception.AuthenticationException:
            print("User authentication failed for " + ip + ".")
            switch_with_authentication_issue.append(ip)
        except socket.error:
            print(ip + " is not reachable.")
            switch_not_reachable.append(ip)

    wb.save(f'ACI Input Drop {date}.xlsx')

    fromaddr = 'Yin Wang'
    toaddr = '[email protected],[email protected], [email protected]'
    msg = MIMEMultipart()
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = f'ACI Input Drop {date}'
    email_content = f'''Attachment is the ACI Input Drop report for {date}.
    This is a Python generated email, please do not reply.'''
    msg.attach(MIMEText(email_content, 'plain'))
    attachment = open(f'ACI Input Drop {date}.xlsx', 'rb')
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(attachment.read())
    encoders.encode_base64(part)
    part.add_header("Content-Disposition",
                    f"attachment; filename= ACI Input Drop {date}.xlsx")
    msg.attach(part)
    text = msg.as_string()
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login('*****@*****.**', 'xxxx')
    server.sendmail(fromaddr, toaddr.split(","), text)
Example #27
0
    def _convert_to_fill(cls, fill_dict):
        """
        Convert ``fill_dict`` to an openpyxl v2 Fill object.

        Parameters
        ----------
        fill_dict : dict
            A dict with one or more of the following keys (or their synonyms),
                'fill_type' ('patternType', 'patterntype')
                'start_color' ('fgColor', 'fgcolor')
                'end_color' ('bgColor', 'bgcolor')
            or one or more of the following keys (or their synonyms).
                'type' ('fill_type')
                'degree'
                'left'
                'right'
                'top'
                'bottom'
                'stop'

        Returns
        -------
        fill : openpyxl.styles.Fill
        """

        from openpyxl.styles import PatternFill, GradientFill

        _pattern_fill_key_map = {
            "patternType": "fill_type",
            "patterntype": "fill_type",
            "fgColor": "start_color",
            "fgcolor": "start_color",
            "bgColor": "end_color",
            "bgcolor": "end_color",
        }

        _gradient_fill_key_map = {"fill_type": "type"}

        pfill_kwargs = {}
        gfill_kwargs = {}
        for k, v in fill_dict.items():
            pk = gk = None
            if k in _pattern_fill_key_map:
                pk = _pattern_fill_key_map[k]
            if k in _gradient_fill_key_map:
                gk = _gradient_fill_key_map[k]
            if pk in ["start_color", "end_color"]:
                v = cls._convert_to_color(v)
            if gk == "stop":
                v = cls._convert_to_stop(v)
            if pk:
                pfill_kwargs[pk] = v
            elif gk:
                gfill_kwargs[gk] = v
            else:
                pfill_kwargs[k] = v
                gfill_kwargs[k] = v

        try:
            return PatternFill(**pfill_kwargs)
        except TypeError:
            return GradientFill(**gfill_kwargs)
Example #28
0
def create_lady_supervisor_excel_file(excel_data, data_type, month,
                                      aggregation_level):
    export_info = excel_data[1][1]
    state = export_info[1][1] if aggregation_level > 0 else ''
    district = export_info[2][1] if aggregation_level > 1 else ''
    block = export_info[3][1] if aggregation_level > 2 else ''
    excel_data = [line[aggregation_level:] for line in excel_data[0][1]]
    thin_border = Border(left=Side(style='thin'),
                         right=Side(style='thin'),
                         top=Side(style='thin'),
                         bottom=Side(style='thin'))
    warp_text_alignment = Alignment(wrap_text=True)
    bold_font = Font(bold=True)
    blue_fill = PatternFill("solid", fgColor="B3C5E5")
    grey_fill = PatternFill("solid", fgColor="BFBFBF")

    workbook = Workbook()
    worksheet = workbook.active
    worksheet.title = "LS Performance Report"
    worksheet.sheet_view.showGridLines = False
    # sheet title
    amount_of_columns = 9 - aggregation_level
    last_column = string.ascii_uppercase[amount_of_columns]
    worksheet.merge_cells('B2:{0}2'.format(last_column))
    title_cell = worksheet['B2']
    title_cell.fill = PatternFill("solid", fgColor="4472C4")
    title_cell.value = "Lady Supervisor Performance Report for the {}".format(
        month)
    title_cell.font = Font(size=18, color="FFFFFF")
    title_cell.alignment = Alignment(horizontal="center")

    columns = [
        string.ascii_uppercase[i] for i in range(1, amount_of_columns + 1)
    ]

    # sheet header
    header_cells = ['{0}3'.format(column) for column in columns]
    for cell in header_cells:
        worksheet[cell].fill = blue_fill
        worksheet[cell].font = bold_font
        worksheet[cell].alignment = warp_text_alignment
    if state:
        worksheet['B3'].value = "State: {}".format(state)
        worksheet.merge_cells('B3:C3')
    if district:
        worksheet['D3'].value = "District: {}".format(district)
    if block:
        worksheet['E3'].value = "Block: {}".format(block)
    date_cell = '{0}3'.format(last_column)
    date_description_cell = '{0}3'.format(
        string.ascii_uppercase[amount_of_columns - 1])
    worksheet[date_description_cell].value = "Date when downloaded:"
    worksheet[date_description_cell].alignment = Alignment(horizontal="right")
    utc_now = datetime.now(pytz.utc)
    now_in_india = utc_now.astimezone(india_timezone)
    worksheet[date_cell].value = custom_strftime('{S} %b %Y', now_in_india)
    worksheet[date_cell].alignment = Alignment(horizontal="right")

    # table header
    table_header_position_row = 5
    header_data = excel_data[0]
    headers = ["S.No"]
    headers.extend(header_data)

    table_header = {}
    for col, header in zip(columns, headers):
        table_header[col] = header
    for column, value in table_header.items():
        cell = "{}{}".format(column, table_header_position_row)
        worksheet[cell].fill = grey_fill
        worksheet[cell].border = thin_border
        worksheet[cell].font = bold_font
        worksheet[cell].alignment = warp_text_alignment
        worksheet[cell].value = value

    # table contents
    row_position = table_header_position_row + 1

    for enum, row in enumerate(excel_data[1:], start=1):
        for column_index in range(len(columns)):
            column = columns[column_index]
            cell = "{}{}".format(column, row_position)
            worksheet[cell].border = thin_border
            if column_index == 0:
                worksheet[cell].value = enum
            else:
                worksheet[cell].value = row[column_index - 1]
        row_position += 1

    # sheet dimensions
    title_row = worksheet.row_dimensions[2]
    title_row.height = 23
    worksheet.row_dimensions[table_header_position_row].height = 46
    widths = {}
    widths_columns = ['A']
    widths_columns.extend(columns)
    standard_widths = [4, 7]
    standard_widths.extend([15] * (4 - aggregation_level))
    standard_widths.extend([25, 15, 25, 15])
    for col, width in zip(widths_columns, standard_widths):
        widths[col] = width
    widths['C'] = max(widths['C'], len(state) * 4 // 3 if state else 0)
    widths['D'] = 9 + (len(district) * 4 // 3 if district else 0)
    widths['E'] = 8 + (len(block) * 4 // 3 if district else 0)

    columns = columns[1:]
    # column widths based on table contents
    for column_index in range(len(columns)):
        widths[columns[column_index]] = max(
            widths[columns[column_index]],
            max(
                len(row[column_index].decode('utf-8') if isinstance(
                    row[column_index], bytes) else six.
                    text_type(row[column_index])) for row in excel_data[1:]) *
            4 // 3 if len(excel_data) >= 2 else 0)

    for column, width in widths.items():
        worksheet.column_dimensions[column].width = width

    # export info
    worksheet2 = workbook.create_sheet("Export Info")
    worksheet2.column_dimensions['A'].width = 14
    for n, export_info_item in enumerate(export_info, start=1):
        worksheet2['A{0}'.format(n)].value = export_info_item[0]
        worksheet2['B{0}'.format(n)].value = export_info_item[1]

    # saving file
    file_hash = uuid.uuid4().hex
    export_file = BytesIO()
    icds_file = IcdsFile(blob_id=file_hash, data_type=data_type)
    workbook.save(export_file)
    export_file.seek(0)
    icds_file.store_file_in_blobdb(export_file, expired=60 * 60 * 24)
    icds_file.save()
    return file_hash
Example #29
0
    def __call__(self):

        self.request.response.setHeader('Content-Type',
                                        'application/vnd.ms-excel')
        self.request.response.setHeader('Content-disposition',
                                        'attachment;filename=Atividades.xls')

        catalog = getToolByName(self, 'portal_catalog')
        path_demandas = '/'.join(self.context.getPhysicalPath())
        ordemServico = self.request.get('ordemServico', None)
        start = self.request.get('start', None)
        end = self.request.get('end', None)

        out = StringIO()

        wb = Workbook()

        # grab the active worksheet
        ws1 = wb.active
        ws1.title = "Rotineiras"

        # Data can be assigned directly to cells
        ws1['A1'] = 'Sistema'
        ws1['B1'] = 'Ordem de Serviço'
        ws1['C1'] = 'Número da RA'
        ws1['D1'] = 'Status da RA'
        ws1['E1'] = 'Atividade'
        ws1['F1'] = 'Quantidade HST'

        # Style

        a1 = ws1['A1']
        b1 = ws1['B1']
        c1 = ws1['C1']
        d1 = ws1['D1']
        e1 = ws1['E1']
        f1 = ws1['F1']

        ft = Font(bold=True, color="FFFFFF")

        fill = PatternFill(patternType=fills.FILL_SOLID)

        a1.font = ft
        a1.fill = fill

        b1.font = ft
        b1.fill = fill

        c1.font = ft
        c1.fill = fill

        d1.font = ft
        d1.fill = fill

        e1.font = ft
        e1.fill = fill

        f1.font = ft
        f1.fill = fill

        results = catalog(
            object_provides=IDemanda.__identifier__,
            path=path_demandas,
            ordem_servico=ordemServico,
            sort_on='chamado',
            sort_order='reverse',
        )

        for i in results:
            atividade = []

            if i.Title:
                atividade.append(i.Title)
            else:
                atividade.append('')

            if i.ordem_servico:
                atividade.append(i.ordem_servico)
            else:
                atividade.append('')

            if i.chamado:
                atividade.append(i.chamado)
            else:
                atividade.append('')

            if i.status_ra:
                atividade.append(i.status_ra)
            else:
                atividade.append('')

            if i.atividade:
                atividade.append(i.atividade)
            else:
                atividade.append('')

            if i.quantHST:
                atividade.append(i.quantHST)
            else:
                atividade.append('')

            ws1.append(atividade)

        # Rows can also be appended
        # ws1.append([1, 2, 3])
        # ws1.append([4, 5, 6])

        if start and end:
            ws2 = wb.create_sheet(title='Projetizadas')

            ws2['A1'] = 'Atividade'
            ws2['B1'] = 'Projeto'
            ws2['C1'] = 'Data início'
            ws2['D1'] = 'Data fim'
            ws2['E1'] = 'Duração'
            ws2['F1'] = 'Quantidade HST'

            # Style

            a1 = ws2['A1']
            b1 = ws2['B1']
            c1 = ws2['C1']
            d1 = ws2['D1']
            e1 = ws2['E1']
            f1 = ws2['F1']

            ft = Font(bold=True, color="FFFFFF")

            fill = PatternFill(patternType=fills.FILL_SOLID)

            a1.font = ft
            a1.fill = fill

            b1.font = ft
            b1.fill = fill

            c1.font = ft
            c1.fill = fill

            d1.font = ft
            d1.fill = fill

            e1.font = ft
            e1.fill = fill

            f1.font = ft
            f1.fill = fill

            first_date = DateTime(start, datefmt='international')
            last_date = DateTime(end + ' 23:59:59', datefmt='international')
            results = catalog(object_provides=IAtividade.__identifier__,
                              path=path_demandas,
                              data_inicio={
                                  'query': first_date,
                                  'range': 'min'
                              },
                              data_fim={
                                  'query': last_date,
                                  'range': 'max'
                              },
                              sort_on='data_inicio')

            for i in results:
                atividade = []

                if i.Title:
                    atividade.append(i.Title)
                else:
                    atividade.append('')

                if i.projeto:
                    atividade.append(i.projeto)
                else:
                    atividade.append('')

                if i.data_inicio:
                    data_inicio = i.data_inicio.strftime('%d/%m/%Y %H:%M')
                    atividade.append(data_inicio)
                else:
                    atividade.append('')

                if i.data_fim:
                    data_fim = i.data_fim.strftime('%d/%m/%Y %H:%M')
                    atividade.append(data_fim)
                else:
                    atividade.append('')

                if i.duracao:
                    atividade.append(i.duracao)
                else:
                    atividade.append('')

                if i.quantHST:
                    atividade.append(i.quantHST)
                else:
                    atividade.append('')

                ws2.append(atividade)

        # Save the file
        wb.save(out)

        return out.getvalue()
Example #30
0
def create_aww_performance_excel_file(excel_data,
                                      data_type,
                                      month,
                                      state,
                                      district=None,
                                      block=None):
    aggregation_level = 3 if block else (2 if district else 1)
    export_info = excel_data[1][1]
    excel_data = [line[aggregation_level:] for line in excel_data[0][1]]
    thin_border = Border(left=Side(style='thin'),
                         right=Side(style='thin'),
                         top=Side(style='thin'),
                         bottom=Side(style='thin'))
    warp_text_alignment = Alignment(wrap_text=True)
    bold_font = Font(bold=True)
    blue_fill = PatternFill("solid", fgColor="B3C5E5")
    grey_fill = PatternFill("solid", fgColor="BFBFBF")

    workbook = Workbook()
    worksheet = workbook.active
    worksheet.title = "AWW Performance Report"
    worksheet.sheet_view.showGridLines = False
    # sheet title
    worksheet.merge_cells('B2:{0}2'.format("J" if aggregation_level == 3 else (
        "K" if aggregation_level == 2 else "L")))
    title_cell = worksheet['B2']
    title_cell.fill = PatternFill("solid", fgColor="4472C4")
    title_cell.value = "AWW Performance Report for the month of {}".format(
        month)
    title_cell.font = Font(size=18, color="FFFFFF")
    title_cell.alignment = Alignment(horizontal="center")

    # sheet header
    header_cells = {"B3", "C3", "D3", "E3", "F3", "G3", "H3", "I3", "J3"}
    if aggregation_level < 3:
        header_cells.add("K3")
    if aggregation_level < 2:
        header_cells.add("L3")
    for cell in header_cells:
        worksheet[cell].fill = blue_fill
        worksheet[cell].font = bold_font
        worksheet[cell].alignment = warp_text_alignment
    worksheet.merge_cells('B3:C3')
    worksheet['B3'].value = "State: {}".format(state)
    if district:
        worksheet['D3'].value = "District: {}".format(district)
    worksheet.merge_cells('E3:F3')
    if block:
        worksheet['E3'].value = "Block: {}".format(block)
    date_description_cell_start = "H3" if aggregation_level == 3 else (
        "I3" if aggregation_level == 2 else "J3")
    date_description_cell_finish = "I3" if aggregation_level == 3 else (
        "J3" if aggregation_level == 2 else "K3")
    date_column = "J3" if aggregation_level == 3 else (
        "K3" if aggregation_level == 2 else "L3")
    worksheet.merge_cells('{0}:{1}'.format(
        date_description_cell_start,
        date_description_cell_finish,
    ))
    worksheet[date_description_cell_start].value = "Date when downloaded:"
    worksheet[date_description_cell_start].alignment = Alignment(
        horizontal="right")
    utc_now = datetime.now(pytz.utc)
    now_in_india = utc_now.astimezone(india_timezone)
    worksheet[date_column].value = custom_strftime('{S} %b %Y', now_in_india)
    worksheet[date_column].alignment = Alignment(horizontal="right")

    # table header
    table_header_position_row = 5
    headers = ["S.No"]
    if aggregation_level < 2:
        headers.append("District")
    if aggregation_level < 3:
        headers.append("Block")
    headers.extend([
        "Supervisor", "AWC", "AWW Name", "AWW Contact Number",
        "Home Visits Conducted", "Number of Days AWC was Open",
        "Weighing Efficiency", "Eligible for Incentive"
    ])
    columns = 'B C D E F G H I J'
    if aggregation_level < 3:
        columns += " K"
    if aggregation_level < 2:
        columns += " L"
    columns = columns.split()
    table_header = {}
    for col, header in zip(columns, headers):
        table_header[col] = header
    for column, value in table_header.items():
        cell = "{}{}".format(column, table_header_position_row)
        worksheet[cell].fill = grey_fill
        worksheet[cell].border = thin_border
        worksheet[cell].font = bold_font
        worksheet[cell].alignment = warp_text_alignment
        worksheet[cell].value = value

    # table contents
    row_position = table_header_position_row + 1

    for enum, row in enumerate(excel_data[1:], start=1):
        for column_index in range(len(columns)):
            column = columns[column_index]
            cell = "{}{}".format(column, row_position)
            worksheet[cell].border = thin_border
            if column_index == 0:
                worksheet[cell].value = enum
            else:
                worksheet[cell].value = row[column_index - 1]
        row_position += 1

    # sheet dimensions
    title_row = worksheet.row_dimensions[2]
    title_row.height = 23
    worksheet.row_dimensions[table_header_position_row].height = 46
    widths = {}
    widths_columns = ['A']
    widths_columns.extend(columns)
    standard_widths = [4, 7, 15]
    standard_widths.extend([15] * (3 - aggregation_level))
    standard_widths.extend([13, 12, 13, 15, 11, 14, 14])
    for col, width in zip(widths_columns, standard_widths):
        widths[col] = width
    widths['C'] = max(widths['C'], len(state) * 4 // 3 if state else 0)
    widths['D'] = 13 + (len(district) * 4 // 3 if district else 0)
    widths['F'] = max(widths['F'], len(block) * 4 // 3 if block else 0)
    for column in ["C", "E", "G"]:
        if widths[column] > 25:
            worksheet.row_dimensions[3].height = max(
                16 * ((widths[column] // 25) + 1),
                worksheet.row_dimensions[3].height)
            widths[column] = 25
    columns = columns[1:]
    # column widths based on table contents
    for column_index in range(len(columns)):
        widths[columns[column_index]] = max(
            widths[columns[column_index]],
            max(
                len(row[column_index].decode('utf-8') if isinstance(
                    row[column_index], bytes) else six.
                    text_type(row[column_index])) for row in excel_data[1:]) *
            4 // 3 if len(excel_data) >= 2 else 0)

    for column, width in widths.items():
        worksheet.column_dimensions[column].width = width

    # export info
    worksheet2 = workbook.create_sheet("Export Info")
    worksheet2.column_dimensions['A'].width = 14
    for n, export_info_item in enumerate(export_info, start=1):
        worksheet2['A{0}'.format(n)].value = export_info_item[0]
        worksheet2['B{0}'.format(n)].value = export_info_item[1]

    # saving file
    file_hash = uuid.uuid4().hex
    export_file = BytesIO()
    icds_file = IcdsFile(blob_id=file_hash, data_type=data_type)
    workbook.save(export_file)
    export_file.seek(0)
    icds_file.store_file_in_blobdb(export_file, expired=60 * 60 * 24)
    icds_file.save()
    return file_hash
Example #31
0
  def SetFormat(self,row,col,fmt):
    pyws   = self.pyws
    font   = None
    color  = None
    align  = None
    fill   = None
    numFmt = None
    border = None

    c = pyws.cell(row=row,column=col)

    #-------------------------------------------------------------------------
    for i in fmt:
      if (i == 'hAlign'): 
        if (not align): align = Alignment()
        align.horizontal = alignType[fmt[i]]
      elif (i == 'vAlign'): 
        if (not align): align = Alignment()
        align.vertical   = alignType[fmt[i]]
      elif (i == 'tAlign'): 
        if (not align): align = Alignment()
        align.text_rotation = fmt[i]
      elif (i == 'wrap'): 
        if (not align): align = Alignment()
        align.wrap_text = fmt[i]

      elif (i == 'font'):
        name = 'Calibri'
        bold = False
        size = 11
        dict = fmt[i]
        if ('emph' in dict):
          if (dict['emph'] == 'B'):
            bold = True
        if ('size' in dict):
          size = dict['size']
        if (not font):
            font = Font(name=name,size=size,bold=bold)

      elif (i == 'border'):
        dict = fmt[i]
        color = None
        style = None
        if ('Color' in dict):
          color = ColorTable[dict['Color']]
        else:
          color = ColorTable['Black']
        if ('Style' in dict):
          color = dict['Style']
        if (c.border.top.style == None):
          tSide = Side(color=color)
        else:
          tSide = c.border.top.copy()
        if (c.border.bottom.style == None):
          bSide = Side(color=color)
        else:
          bSide = c.border.bottom.copy()
        if (c.border.left.style == None):
          lSide = Side(color=color)
        else:
          lSide = c.border.left.copy()
        if (c.border.right.style == None):
          rSide = Side(color=color)
        else:
          rSide = c.border.right.copy()

        if ((len(dict) ==1) and ('A' in dict)):
          tSide.style = dict['A']
          bSide.style = dict['A']
          lSide.style = dict['A']
          rSide.style = dict['A']
        else:
          for j in dict:
            if (j == 'T'):
              tSide.style = dict[j]
            if (j == 'B'):
              bSide.style = dict[j]
            if (j == 'L'):
              lSide.style = dict[j]
            if (j == 'R'):
              rSide.style = dict[j]

        border = Border(left=lSide,right=rSide,top=tSide,bottom=bSide)

      elif (i == 'fill'): 
        color = ColorTable[fmt[i]]
        fill = PatternFill(start_color=color,end_color='FFFFFFFF',fill_type='solid')

      elif (i == 'orient'): 
        pass

      elif (i == 'numFmt'):
        numFmt = fmt[i]

    #-------------------------------------------------------------------------
    if (font):
      c.font = font.copy()

    if (align):
      c.alignment = align.copy()

    if (border):
      c.border = border.copy()

    if (fill):
      c.fill = fill.copy()

    if (numFmt):
      c.number_format = numFmt
Example #32
0
i = 0
for z in range(ColStart, ColEnd):
    file = worksheet[f'{Col_lett}{z}'].value
    NewFileName = f'{FilesDir}{file}_between'
    #Check if file already exist
    if os.path.isfile(f'{NewFileName}.xlsx'):
        print(f'{file}_between.xlsx already exist')
        NewFile = openpyxl.load_workbook(f'{NewFileName}.xlsx')
        NewWorksheet = NewFile[TemplateWorkSheetName]
        #Fullfil created files with data from list
        for x, y in Map.items():
            if NewWorksheet[x].value != worksheet[f'{y}{z}'].value:
                comment = Comment(f'Previous value = {NewWorksheet[x].value}',
                                  'automatic inspect')
                NewWorksheet[x].value = worksheet[f'{y}{z}'].value
                NewWorksheet[x].fill = PatternFill(fgColor=MyColor,
                                                   fill_type="solid")
                NewWorksheet[x].comment = comment
        NewFile.save(f'{NewFileName}.xlsx')
        WbPrint = excel.Workbooks.Open(f'{NewFileName}.xlsx')
        WsPrint = WbPrint.Worksheets[TemplateWorkSheetName]
        WbPrint.SaveAs(f"{NewFileName}.pdf", FileFormat=57)
        WbPrint.Close()
        excel.Quit()
        NewFile.close()
    else:
        #If no so create one
        source.save(f'{NewFileName}.xlsx')
        source.close()
        #Fullfil created files with data from list
        NewFile = openpyxl.load_workbook(f'{NewFileName}.xlsx')
        NewWorksheet = NewFile[TemplateWorkSheetName]