Учебные примеры Excel: простой журнал, шаги ЕСЛИ и выпадающие списки
This commit is contained in:
1 parent
401b02b680
commit
63c4a5ff40
8 files changed
+314
-23
No files matched your search
@@ -40,9 +40,32 @@ assert sum(r[5]=='Выполнено' and r[6]>r[4] for r in rows)==12
|
||||
assert all(r[6] is None or r[6]<=book['Параметры']['B2'].value for r in rows)
|
||||
assert book['Проверка']['B6'].value==.5
|
||||
assert len(book['Реестр'].tables)==1
|
||||
assert len(book['Старт'].tables)==0
|
||||
assert len(book['Старт'].tables)==0 and len(book['Старт 2'].tables)==0
|
||||
# Teaching progression: simple IF on Старт, nested IF on Старт 2, identical to Реестр.
|
||||
simple=[book['Старт'].cell(r,8).value for r in range(2,62)]
|
||||
nested=[book['Старт 2'].cell(r,8).value for r in range(2,62)]
|
||||
assert simple==['Закрыто' if r[5]=='Выполнено' else 'В работе' for r in rows]
|
||||
assert nested==[r[7] for r in rows]
|
||||
formulas=openpyxl.load_workbook(OUT/'excel-practice.xlsx',data_only=False)
|
||||
assert all(formulas['Реестр'].cell(r,8).data_type=='f' for r in range(2,62))
|
||||
assert all(formulas['Старт'].cell(r,8).data_type=='f' for r in range(2,62))
|
||||
assert all(formulas['Старт 2'].cell(r,8).data_type=='f' for r in range(2,62))
|
||||
assert 'IF(F2="Выполнено","Закрыто","В работе")' in formulas['Старт'].cell(2,8).value
|
||||
assert formulas['Старт 2'].cell(2,8).value.count('IF(')==2
|
||||
# Dropdowns: every editable field is a pick list backed by a named range on Параметры.
|
||||
statuses=[book['Параметры'].cell(r,1).value for r in range(5,8)]
|
||||
depts=[book['Параметры'].cell(r,1).value for r in range(10,15)]
|
||||
cats=[book['Параметры'].cell(r,1).value for r in range(17,20)]
|
||||
expected_dv={('Старт','B'):'AllowedDepartments',('Старт','C'):'AllowedCategories',('Старт','F'):'AllowedStatuses',
|
||||
('Старт 2','B'):'AllowedDepartments',('Старт 2','C'):'AllowedCategories',('Старт 2','F'):'AllowedStatuses',
|
||||
('Реестр','B'):'AllowedDepartments',('Реестр','C'):'AllowedCategories',('Реестр','F'):'AllowedStatuses'}
|
||||
for (sheet,column),name in expected_dv.items():
|
||||
found=[dv for dv in formulas[sheet].data_validations.dataValidation if f'{column}2:{column}1000'==str(dv.sqref)]
|
||||
assert found,(sheet,column,'нет выпадающего списка')
|
||||
assert found[0].type=='list' and found[0].formula1==name,(sheet,column,found[0].formula1)
|
||||
assert all(r[1] in depts for r in rows),( 'подразделение вне списка')
|
||||
assert all(r[2] in cats for r in rows),'категория вне списка'
|
||||
assert all(r[5] in statuses for r in rows),'статус вне списка'
|
||||
for r in rows:
|
||||
expected='Завершено' if r[5]=='Выполнено' else ('Просрочено' if r[4]<book['Параметры']['B2'].value else 'В срок')
|
||||
assert expected==r[7]
|
||||
@@ -54,7 +77,9 @@ if args.recalculated_workbook:
|
||||
for n in range(2,10):
|
||||
assert recalculated['Проверка'].cell(n,2).value==book['Проверка'].cell(n,2).value
|
||||
assert all(recalculated['Тесты'].cell(n,4).value==recalculated['Тесты'].cell(n,5).value for n in range(2,6))
|
||||
recalc_status='independent recalculation matches all 60 rows, check totals and four boundary tests'
|
||||
assert [recalculated['Старт'].cell(r,8).value for r in range(2,62)]==simple
|
||||
assert [recalculated['Старт 2'].cell(r,8).value for r in range(2,62)]==nested
|
||||
recalc_status='independent recalculation matches 60 rows, both teaching sheets, totals and boundary tests'
|
||||
pdf=pymupdf.open(OUT/'excel-ai-lecture.pdf')
|
||||
assert len(pdf)==26
|
||||
|
||||
|
||||
Reference in new issue
Block a user