Version rustique pour passer de recopytex vers le tableur
This commit is contained in:
parent
edff4883d8
commit
8cbb5e41bd
507
Notes/DB vers xlsx.ipynb
Normal file
507
Notes/DB vers xlsx.ipynb
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user