Version rustique pour passer de recopytex vers le tableur

This commit is contained in:
Bertrand Benjamin 2018-02-01 20:18:51 +03:00
parent edff4883d8
commit 8cbb5e41bd

507
Notes/DB vers xlsx.ipynb Normal file
View File

@ -0,0 +1,507 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import xlsxwriter"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from repytex.tools.evaluation import Evaluation\n",
"import sqlite3"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"conn = sqlite3.connect('./recopytex.db')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"ev = Evaluation.from_sqlite(16, conn)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'DS4'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ev.name"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>eval_id</th>\n",
" <th>date</th>\n",
" <th>comment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>43</td>\n",
" <td>1 QCM</td>\n",
" <td>16</td>\n",
" <td>2018-01-16 00:00:00.000000</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>44</td>\n",
" <td>2 Bien assis?</td>\n",
" <td>16</td>\n",
" <td>2018-01-16 00:00:00.000000</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>45</td>\n",
" <td>3 L'urne</td>\n",
" <td>16</td>\n",
" <td>2018-01-16 00:00:00.000000</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>46</td>\n",
" <td>4 Programme de calculs</td>\n",
" <td>16</td>\n",
" <td>2018-01-16 00:00:00.000000</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>47</td>\n",
" <td>5 Roule cycliste</td>\n",
" <td>16</td>\n",
" <td>2018-01-16 00:00:00.000000</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>51</td>\n",
" <td>Présentation</td>\n",
" <td>16</td>\n",
" <td>2018-01-17 00:00:00.000000</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name eval_id date comment\n",
"0 43 1 QCM 16 2018-01-16 00:00:00.000000 \n",
"1 44 2 Bien assis? 16 2018-01-16 00:00:00.000000 \n",
"2 45 3 L'urne 16 2018-01-16 00:00:00.000000 \n",
"3 46 4 Programme de calculs 16 2018-01-16 00:00:00.000000 \n",
"4 47 5 Roule cycliste 16 2018-01-16 00:00:00.000000 \n",
"5 51 Présentation 16 2018-01-17 00:00:00.000000 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ev.ex_df"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"wb = xlsxwriter.Workbook(\"DS4_302.xlsx\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Formatages"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"eval_format = wb.add_format({'bold': True, 'font_color': 'red'})\n",
"eval_cell = wb.add_format()\n",
"eval_cell.set_bg_color(\"red\")\n",
"# exo_cell"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La feuille de calcul"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"wb = xlsxwriter.Workbook(\"DS4_302.xlsx\")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ws = wb.add_worksheet()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En tête du tableau"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ws.write(0,1,\"Competence\")\n",
"ws.write(0,2,\"Barème\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Toutes les questions et exercices"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def q_line(q, row, ws):\n",
" ws.write(row, 0, f\"{q.name} - {q.comment}\")\n",
" ws.write(row, 1, f\"{q.competence}\")\n",
" ws.write(row, 2, q.score_rate)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def exo_block(exo, row, ws):\n",
" qrow = row\n",
" for q in exo[\"questions\"]:\n",
" qrow += 1\n",
" q_line(q, qrow, ws)\n",
" ws.write(row, 0, f\"Ex {exo['name']}\")\n",
" row_range = \", \".join([f\"C{i}\" for i in range(row+2, qrow+2)])\n",
" for i in range(30):\n",
" ws.write(row, i+2, f\"=SUM({row_range})\")\n",
" return qrow"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"row = 2\n",
"exo_rows = []\n",
"for exo in ev.exercises:\n",
" exo_rows.append(row)\n",
" row = exo_block(exo, row, ws) + 1\n",
"ws.write(1,0, ev.name, eval_format)\n",
"exo_xls_range = \", \".join([f\"C{i+1}\" for i in exo_rows])\n",
"for i in range(30):\n",
" ws.write(1,i+2, f\"=SUM({exo_xls_range})\", eval_format)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"wb.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Avec openpyxl"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"from openpyxl import Workbook\n",
"from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, colors"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'00FF0000'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"colors.RED"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"wb = Workbook()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ws = wb.create_sheet(ev.name)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Cell 'DS4'.C1>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ws.cell(1,2,\"Competence\")\n",
"ws.cell(1,3,\"Barème\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"def q_line(q, row, ws):\n",
" ws.cell(row, 1, f\"{q.name} - {q.comment}\")\n",
" ws.cell(row, 2, f\"{q.competence}\")\n",
" ws.cell(row, 3, q.score_rate)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def exo_block(exo, row, ws):\n",
" qrow = row\n",
" for q in exo[\"questions\"]:\n",
" qrow += 1\n",
" q_line(q, qrow, ws)\n",
" ws.cell(row, 1, f\"Ex {exo['name']}\")\n",
" row_range = \", \".join([f\"C{i}\" for i in range(row+1, qrow+1)])\n",
" ws.cell(row, 3, f\"=SUM({row_range})\")\n",
" return qrow"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Cell 'DS4'.C2>"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"row = 3\n",
"exo_rows = []\n",
"for exo in ev.exercises:\n",
" exo_rows.append(row)\n",
" row = exo_block(exo, row, ws) + 1\n",
"eval_row = ws.row_dimensions[2]\n",
"eval_row.fill = PatternFill(bgColor=colors.RED)\n",
"ws.cell(2,1, ev.name)\n",
"exo_xls_range = \", \".join([f\"C{i}\" for i in exo_rows])\n",
"ws.cell(2,3, f\"=SUM({exo_xls_range})\")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"wb.save(\"./DS4_302.xlsx\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}