print('Hello world!'import openpyxl 
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side 
from openpyxl.utils import get_column_letter 
 
wb = openpyxl.Workbook() 
 
# Stili 
font_title = Font(name='Calibri', size=14, bold=True, color='1F4E78') 
font_header = Font(name='Calibri', size=11, bold=True, color='FFFFFF') 
font_bold = Font(name='Calibri', size=11, bold=True) 
fill_header = PatternFill( 
    start_color='2F5597', end_color='2F5597', fill_type='solid' 
) 
fill_highlight = PatternFill( 
    start_color='FFF2CC', end_color='FFF2CC', fill_type='solid' 
) 
border_thin = Border( 
    left=Side(style='thin', color='D9D9D9'), 
    right=Side(style='thin', color='D9D9D9'), 
    top=Side(style='thin', color='D9D9D9'), 
    bottom=Side(style='thin', color='D9D9D9'), 
) 
 
# FOGLIO 1: Dati iniziali 
ws1 = wb.active 
ws1.title = 'Dati iniziali' 
ws1['A1'] = 'Esercitazione: Metodo Shang (Ford, 1975)' 
ws1['A1'].font = font_title 
 
headers1 = [ 
    'Esperto', 
    'Stima minima (mi)', 
    'Stima massima (Mi)', 
    'Punto centrale (C0i)', 
    'Ampiezza', 
] 
for col, h in enumerate(headers1, 1): 
  cell = ws1.cell(row=4, column=col, value=h) 
  cell.font = font_header 
  cell.fill = fill_header 
  cell.alignment = Alignment(horizontal='center', vertical='center') 
 
data = [ 
    (800, 1400), 
    (900, 1600), 
    (1000, 1700), 
    (700, 1300), 
    (1100, 1800), 
    (850, 1500), 
    (950, 1550), 
    (750, 1250), 
    (1050, 1750), 
    (900, 1450), 
    (1000, 1650), 
    (800, 1500), 
    (950, 1800), 
    (850, 1350), 
    (1100, 1600), 
] 
for i, (mi, Mi) in enumerate(data, start=5): 
  ws1[f'A{i}'] = f'E{i-4}' 
  ws1[f'B{i}'] = mi 
  ws1[f'C{i}'] = Mi 
  ws1[f'D{i}'] = f'=(B{i}+C{i})/2' 
  ws1[f'E{i}'] = f'=C{i}-B{i}' 
  for c in ['A', 'B', 'C', 'D', 'E']: 
    ws1[f'{c}{i}'].border = border_thin 
    ws1[f'{c}{i}'].alignment = Alignment(horizontal='center') 
 
ws1['A22'] = 'Media dei minimi (m0)' 
ws1['B22'] = '=AVERAGE(B5:B19)' 
ws1['A23'] = 'Media dei massimi (M0)' 
ws1['B23'] = '=AVERAGE(C5:C19)' 
ws1['A24'] = 'Punto centrale iniziale (C0)' 
ws1['B24'] = '=(B22+B23)/2' 
 
for r in [22, 23, 24]: 
  ws1[f'A{r}'].font = font_bold 
  ws1[f'B{r}'].font = font_bold 
  ws1[f'B{r}'].fill = fill_highlight 
 
# FOGLIO 2: Votazioni Qualitative 
ws2 = wb.create_sheet(title='Votazioni Qualitative') 
ws2['A1'] = 'Valutazioni Qualitative (Round Successivi)' 
ws2['A1'].font = font_title 
 
headers2 = ( 
    ['Round'] 
    + [f'E{i}' for i in range(1, 16)] 
    + ['Somma >', 'Esito Maggioranza'] 
) 
for col, h in enumerate(headers2, 1): 
  cell = ws2.cell(row=4, column=col, value=h) 
  cell.font = font_header 
  cell.fill = fill_header 
  cell.alignment = Alignment(horizontal='center', vertical='center') 
 
r1 = [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1] 
r2 = [0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0] 
r3 = [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1] 
 
for row_idx, (r_name, votes) in enumerate( 
    [('Round 1', r1), ('Round 2', r2), ('Round 3', r3)], start=5 
): 
  ws2.cell(row=row_idx, column=1, value=r_name) 
  for col_idx, v in enumerate(votes, start=2): 
    ws2.cell(row=row_idx, column=col_idx, value=v) 
  ws2[f'Q{row_idx}'] = f'=SUM(B{row_idx}:P{row_idx})' 
  ws2[f'R{row_idx}'] = ( 
      f'=IF(Q{row_idx}>7.5, "MAGGIORE (>)", "MINORE (<)")' 
  ) 
  for c in range(1, 19): 
    ws2.cell(row=row_idx, column=c).border = border_thin 
    ws2.cell(row=row_idx, column=c).alignment = Alignment(horizontal='center') 
 
# FOGLIO 3: Round Shang 
ws3 = wb.create_sheet(title='Round Shang') 
ws3['A1'] = 'Procedura Iterativa Shang' 
ws3['A1'].font = font_title 
 
headers3 = [ 
    'Round (j)', 
    'Limite Inf (mj)', 
    'Limite Sup (Mj)', 
    'Punto Proposto (Cj)', 
    'Esito Votazione', 
    'Ampiezza (Rj)', 
] 
for col, h in enumerate(headers3, 1): 
  cell = ws3.cell(row=4, column=col, value=h) 
  cell.font = font_header 
  cell.fill = fill_header 
  cell.alignment = Alignment(horizontal='center', vertical='center') 
 
ws3['A5'], ws3['B5'], ws3['C5'], ws3['D5'], ws3['E5'], ws3['F5'] = ( 
    0, 
    "='Dati iniziali'!B22", 
    "='Dati iniziali'!B23", 
    '=(B5+C5)/2', 
    "='Votazioni Qualitative'!R5", 
    '=C5-B5', 
) 
ws3['A6'], ws3['B6'], ws3['C6'], ws3['D6'], ws3['E6'], ws3['F6'] = ( 
    1, 
    "=IF('Votazioni Qualitative'!Q5>7.5, D5, B5)", 
    "=IF('Votazioni Qualitative'!Q5<=7.5, D5, C5)", 
    '=(B6+C6)/2', 
    "='Votazioni Qualitative'!R6", 
    '=C6-B6', 
) 
ws3['A7'], ws3['B7'], ws3['C7'], ws3['D7'], ws3['E7'], ws3['F7'] = ( 
    2, 
    "=IF('Votazioni Qualitative'!Q6>7.5, D6, B6)", 
    "=IF('Votazioni Qualitative'!Q6<=7.5, D6, C6)", 
    '=(B7+C7)/2', 
    "='Votazioni Qualitative'!R7", 
    '=C7-B7', 
) 
ws3['A8'], ws3['B8'], ws3['C8'], ws3['D8'], ws3['E8'], ws3['F8'] = ( 
    3, 
    "=IF('Votazioni Qualitative'!Q7>7.5, D7, B7)", 
    "=IF('Votazioni Qualitative'!Q7<=7.5, D7, C7)", 
    '=(B8+C8)/2', 
    'In corso...', 
    '=C8-B8', 
) 
 
for r in range(5, 9): 
  for c in ['A', 'B', 'C', 'D', 'E', 'F']: 
    ws3[f'{c}{r}'].border = border_thin 
    ws3[f'{c}{r}'].alignment = Alignment(horizontal='center') 
  ws3[f'D{r}'].fill = fill_highlight 
 
# Autofit colonne 
for sheet in wb.worksheets: 
  for col in sheet.columns: 
    max_len = max(len(str(cell.value or '')) for cell in col) 
    col_letter = get_column_letter(col[0].column) 
    sheet.column_dimensions[col_letter].width = max(max_len + 3, 12) 
 
wb.save('Metodo_Shang_Corretto.xlsx') 
print('File creato con successo!')                        

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: