Created
December 5, 2024 19:14
-
-
Save fomightez/bd1b7aa6130c6a527684c5557b99b53e to your computer and use it in GitHub Desktop.
Get values from jupyterlab-spreadsheet-editor formula results to use elsewhere
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "a2441a22-4dc3-4405-9ea1-ca99ad4febf5", | |
| "metadata": {}, | |
| "source": [ | |
| "## Get values from jupyterlab-spreadsheet-editor formula results to use elsewhere\n", | |
| "\n", | |
| "Hacky answer to post ['Convert formulas into values using jupyterlab-spreadsheet-editor'](https://discourse.jupyter.org/t/convert-formulas-into-values-using-jupyterlab-spreadsheet-editor/30704?u=fomightez) on Jupyter Discourse page.\n", | |
| "\n", | |
| "Note that [jupyterlab-spreadsheet-editor](https://github.com/jupyterlab-contrib/jupyterlab-spreadsheet-editor) is based on use of [jexcel/Jspreadsheet CE](https://github.com/jspreadsheet/ce).\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "attachments": { | |
| "36b6c15f-b6a0-4b8d-b0be-f6e973c6cc2c.png": { | |
| "image/png": "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bVueNLzzzjuxOCQTo2PEiBFIvv322+VxY/LJHDlyJHUhgVvk999/J/Oll17irurduzcSvv76a7k8jP8vvfRSwEENeBKD4ec/X8lMSV+4F++77z40n30HtyZtYPFv3759xYoVb731VuxwaRWNbNasGZmdO3deu3YtmXxlEFnVW7RowVdu5SuuuIJbWZQWC58bRiaF//znP5gA2PMUy5s3L5f07duXtFj7ZvpDGhZB8+bN+cl8EIt86m3Tpg2/ks+9xx0IXOwjMF1xXWEw0nhsabnqhRdeCNq28corrwQZoMaso0f85yuZppvxJ1yrveg867w84nvHHXdgjMVZ39ChQ4Gb2ZotwLhx41ByLmQ4MVZFArr9zTffkD527BhzBNP8gAEDMAIxbz788EPymfIZ75YtW7788su4ErmxZDrgxsKtyGRUu3bt/v37i7uRieCDDz6g0qeeeorEqFGjkMC4soycc8456H/8LZfmBe0/dy33t3Wdx6Tf+f2u++bcL38b9n3Bn/m66/vdebIBwc3HmKKWDG6DBg127drVrl07FBJtZC1iKmeUQb5Tp07kY35Xr169X79+onvly5fv1q0bMztS16xZw9ztFM+6zYRCDtM308oNN9zA0O/YsaN48eJY++QzQVCGMZWrUAbuzLPPPlu+8v+9995DsZl9WDDKli17yy23cL9x7w0bNoxbgr0SOs/diP5jQpun2ajloosC57YEZ1QvSZ0HE3dqb3SedV5gRce2bNliII6dYGgfffRRhpnLQRlpscvfe++9FGOtpreyVXv33XexMpi5q1WrxnTw+OOPi4ajwMzN55577l133XX48GFmbiYOjAW+Yo/w4c6bM2eOVMfUgKVQo0aNNHD55MuXu3cmNshWfsWhUKpUKUShb6eeeipzNJMyRhmLM3pODka7VPTtt98yQffq1QtFRWO5GRgFipGgAGv1n/70p6hNogCbmpo1az722GMsy6gxflwpyVyA/Y+Lh0FnX8Ad4pQg5iGZXDto0CBuQu4ZsSbYGuAXxEeA4YAFgUYxh0ozaAn2plNOQNJWRtzFTcPyy3LKZGl0HiCMlzUeUJh3gRhACxUqhHIyeLGvOuOMM6QAWr1161bSjDTjLZn58+c3fqBy5cpJJpJZBzABOHSkigcffJAc+Yn/Yhr4c75gKvUusXTpUpw6eHe53UlQkRUjPzGX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" | |
| } | |
| }, | |
| "cell_type": "markdown", | |
| "id": "4882bd07-3dc9-4e65-831d-ce86539d54db", | |
| "metadata": {}, | |
| "source": [ | |
| "### Set-up:\n", | |
| "\n", | |
| "To have something to work with, I went to [here](https://github.com/jupyterlab-contrib/jupyterlab-spreadsheet-editor?tab=readme-ov-file#jupyterlab-spreadsheet-editor) in the JupyterLab Spreadsheet Editor repo and clicked on the `launch binder` badge to launch a session with the extension working. And then in the sessio essentially followed [the gif](https://raw.githubusercontent.com/jupyterlab-contrib/jupyterlab-spreadsheet-editor/main/screenshots/formula-support.gif) below 'Formula support basic formula calculation (rendering) - as implemented by jExcel' as a guide to make a table that uses formulas.\n", | |
| "\n", | |
| "Got: \n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "Note the actual content I got from copying that table, which from was made like that using [the gif](https://raw.githubusercontent.com/jupyterlab-contrib/jupyterlab-spreadsheet-editor/main/screenshots/formula-support.gif) below 'Formula support basic formula calculation (rendering) - as implemented by jExcel' as a guide: \n", | |
| "\n", | |
| "```text\n", | |
| "\t5\n", | |
| "1\t=A3*B2\n", | |
| "2\t=A4*B3\n", | |
| "3\t=A5*B4\n", | |
| "4\t=A6*B5\n", | |
| "5\t=A7*B6\n", | |
| "```" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "85c5cf6d-ac16-4dd0-92a6-f5807a4b04c7", | |
| "metadata": {}, | |
| "source": [ | |
| "----------\n", | |
| "\n", | |
| "### Getting the HTML of the resulting table\n", | |
| "\n", | |
| "I figured that the HTML representation had the values because they are rendered and so I should be able to get them from there at least." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "7a5e0c70-cf45-4580-8c3e-fad1b6395424", | |
| "metadata": {}, | |
| "source": [ | |
| "Getting the HTML table code: \n", | |
| "In the jupyterlab-spreadsheet-editor view of my demo spreadheeet, did `Shift` + Right-click on bottom value in column that I made with formula and choose from Chrome broser menu `Inspect`. (You may need to have developer tools on prior to this?) In my example it was column B. Then I right-clicked on line that is `</table>` below that in the HTML elements listing. (For some reason when I did that, it looked more like `</table> == $0`.) Then I right-clicked and choose `Copy` > `OuterHTML`.\n", | |
| "\n", | |
| "I examined what that looked like by adding `%%HTML` cell magic to the start of a Jupyter code cell and pastin in the copied HTML below it, like so:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "05a5804c-d38a-4f86-8f89-5e8846645221", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table class=\"jexcel jexcel_overflow\" cellpadding=\"0\" cellspacing=\"0\" unselectable=\"yes\"><colgroup><col width=\"50\"><col width=\"40\"><col width=\"40\"><col width=\"40\"><col width=\"40\"></colgroup><thead class=\"draggable resizable\"><tr><td class=\"jexcel_selectall\"></td><td data-x=\"0\" class=\"selected\" style=\"text-align: center;\">A</td><td data-x=\"1\" style=\"text-align: center;\" class=\"\">B</td><td data-x=\"2\" style=\"text-align: center;\">C</td><td data-x=\"3\" style=\"text-align: center;\">D</td></tr></thead><tbody class=\"draggable\"><tr data-y=\"0\" class=\"selected\"><td data-y=\"0\" class=\"jexcel_row\">1</td><td data-x=\"0\" data-y=\"0\" class=\"highlight-selected highlight highlight-top highlight-bottom highlight-left highlight-right\" style=\"text-align: center;\"></td><td data-x=\"1\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"2\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"0\" style=\"text-align: center;\"></td></tr><tr data-y=\"1\" class=\"\"><td data-y=\"1\" class=\"jexcel_row\">2</td><td data-x=\"0\" data-y=\"1\" style=\"text-align: center;\" class=\"\"></td><td data-x=\"1\" data-y=\"1\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"1\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"1\" style=\"text-align: center;\"></td></tr><tr data-y=\"2\" class=\"\"><td data-y=\"2\" class=\"jexcel_row\">3</td><td data-x=\"0\" data-y=\"2\" style=\"text-align: center;\" class=\"\">1</td><td data-x=\"1\" data-y=\"2\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"2\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"2\" style=\"text-align: center;\"></td></tr><tr data-y=\"3\" class=\"\"><td data-y=\"3\" class=\"jexcel_row\">4</td><td data-x=\"0\" data-y=\"3\" style=\"text-align: center;\" class=\"\">2</td><td data-x=\"1\" data-y=\"3\" style=\"text-align: center;\" class=\"\">10</td><td data-x=\"2\" data-y=\"3\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"3\" style=\"text-align: center;\"></td></tr><tr data-y=\"4\" class=\"\"><td data-y=\"4\" class=\"jexcel_row\">5</td><td data-x=\"0\" data-y=\"4\" style=\"text-align: center;\" class=\"\">3</td><td data-x=\"1\" data-y=\"4\" style=\"text-align: center;\" class=\"\">30</td><td data-x=\"2\" data-y=\"4\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"4\" style=\"text-align: center;\"></td></tr><tr data-y=\"5\" class=\"\"><td data-y=\"5\" class=\"jexcel_row\">6</td><td data-x=\"0\" data-y=\"5\" style=\"text-align: center;\" class=\"\">4</td><td data-x=\"1\" data-y=\"5\" style=\"text-align: center;\" class=\"\">120</td><td data-x=\"2\" data-y=\"5\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"5\" style=\"text-align: center;\"></td></tr><tr data-y=\"6\" class=\"\"><td data-y=\"6\" class=\"jexcel_row\" style=\"\">7</td><td data-x=\"0\" data-y=\"6\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"1\" data-y=\"6\" style=\"text-align: center;\" class=\"\">600</td><td data-x=\"2\" data-y=\"6\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"6\" style=\"text-align: center;\"></td></tr></tbody></table>\n" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%%HTML\n", | |
| "<table class=\"jexcel jexcel_overflow\" cellpadding=\"0\" cellspacing=\"0\" unselectable=\"yes\"><colgroup><col width=\"50\"><col width=\"40\"><col width=\"40\"><col width=\"40\"><col width=\"40\"></colgroup><thead class=\"draggable resizable\"><tr><td class=\"jexcel_selectall\"></td><td data-x=\"0\" class=\"selected\" style=\"text-align: center;\">A</td><td data-x=\"1\" style=\"text-align: center;\" class=\"\">B</td><td data-x=\"2\" style=\"text-align: center;\">C</td><td data-x=\"3\" style=\"text-align: center;\">D</td></tr></thead><tbody class=\"draggable\"><tr data-y=\"0\" class=\"selected\"><td data-y=\"0\" class=\"jexcel_row\">1</td><td data-x=\"0\" data-y=\"0\" class=\"highlight-selected highlight highlight-top highlight-bottom highlight-left highlight-right\" style=\"text-align: center;\"></td><td data-x=\"1\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"2\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"0\" style=\"text-align: center;\"></td></tr><tr data-y=\"1\" class=\"\"><td data-y=\"1\" class=\"jexcel_row\">2</td><td data-x=\"0\" data-y=\"1\" style=\"text-align: center;\" class=\"\"></td><td data-x=\"1\" data-y=\"1\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"1\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"1\" style=\"text-align: center;\"></td></tr><tr data-y=\"2\" class=\"\"><td data-y=\"2\" class=\"jexcel_row\">3</td><td data-x=\"0\" data-y=\"2\" style=\"text-align: center;\" class=\"\">1</td><td data-x=\"1\" data-y=\"2\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"2\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"2\" style=\"text-align: center;\"></td></tr><tr data-y=\"3\" class=\"\"><td data-y=\"3\" class=\"jexcel_row\">4</td><td data-x=\"0\" data-y=\"3\" style=\"text-align: center;\" class=\"\">2</td><td data-x=\"1\" data-y=\"3\" style=\"text-align: center;\" class=\"\">10</td><td data-x=\"2\" data-y=\"3\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"3\" style=\"text-align: center;\"></td></tr><tr data-y=\"4\" class=\"\"><td data-y=\"4\" class=\"jexcel_row\">5</td><td data-x=\"0\" data-y=\"4\" style=\"text-align: center;\" class=\"\">3</td><td data-x=\"1\" data-y=\"4\" style=\"text-align: center;\" class=\"\">30</td><td data-x=\"2\" data-y=\"4\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"4\" style=\"text-align: center;\"></td></tr><tr data-y=\"5\" class=\"\"><td data-y=\"5\" class=\"jexcel_row\">6</td><td data-x=\"0\" data-y=\"5\" style=\"text-align: center;\" class=\"\">4</td><td data-x=\"1\" data-y=\"5\" style=\"text-align: center;\" class=\"\">120</td><td data-x=\"2\" data-y=\"5\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"5\" style=\"text-align: center;\"></td></tr><tr data-y=\"6\" class=\"\"><td data-y=\"6\" class=\"jexcel_row\" style=\"\">7</td><td data-x=\"0\" data-y=\"6\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"1\" data-y=\"6\" style=\"text-align: center;\" class=\"\">600</td><td data-x=\"2\" data-y=\"6\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"6\" style=\"text-align: center;\"></td></tr></tbody></table>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "a53d62c7-632a-40fd-b631-3268063cdbe3", | |
| "metadata": {}, | |
| "source": [ | |
| "I could see that it indeed had the values in there." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "de06674c-5332-4c07-977d-8635be4cc08a", | |
| "metadata": {}, | |
| "source": [ | |
| "#### How to get that as values from the HTML now?\n", | |
| "\n", | |
| "Use BeautifulSoup to parse the HTML code. \n", | |
| "First, assign the code text to a variable:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "f0d936f2-fe78-407e-82ad-744840ac90db", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "h='''<table class=\"jexcel jexcel_overflow\" cellpadding=\"0\" cellspacing=\"0\" unselectable=\"yes\"><colgroup><col width=\"50\"><col width=\"40\"><col width=\"40\"><col width=\"40\"><col width=\"40\"></colgroup><thead class=\"draggable resizable\"><tr><td class=\"jexcel_selectall\"></td><td data-x=\"0\" class=\"selected\" style=\"text-align: center;\">A</td><td data-x=\"1\" style=\"text-align: center;\" class=\"\">B</td><td data-x=\"2\" style=\"text-align: center;\">C</td><td data-x=\"3\" style=\"text-align: center;\">D</td></tr></thead><tbody class=\"draggable\"><tr data-y=\"0\" class=\"selected\"><td data-y=\"0\" class=\"jexcel_row\">1</td><td data-x=\"0\" data-y=\"0\" class=\"highlight-selected highlight highlight-top highlight-bottom highlight-left highlight-right\" style=\"text-align: center;\"></td><td data-x=\"1\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"2\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"0\" style=\"text-align: center;\"></td></tr><tr data-y=\"1\" class=\"\"><td data-y=\"1\" class=\"jexcel_row\">2</td><td data-x=\"0\" data-y=\"1\" style=\"text-align: center;\" class=\"\"></td><td data-x=\"1\" data-y=\"1\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"1\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"1\" style=\"text-align: center;\"></td></tr><tr data-y=\"2\" class=\"\"><td data-y=\"2\" class=\"jexcel_row\">3</td><td data-x=\"0\" data-y=\"2\" style=\"text-align: center;\" class=\"\">1</td><td data-x=\"1\" data-y=\"2\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"2\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"2\" style=\"text-align: center;\"></td></tr><tr data-y=\"3\" class=\"\"><td data-y=\"3\" class=\"jexcel_row\">4</td><td data-x=\"0\" data-y=\"3\" style=\"text-align: center;\" class=\"\">2</td><td data-x=\"1\" data-y=\"3\" style=\"text-align: center;\" class=\"\">10</td><td data-x=\"2\" data-y=\"3\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"3\" style=\"text-align: center;\"></td></tr><tr data-y=\"4\" class=\"\"><td data-y=\"4\" class=\"jexcel_row\">5</td><td data-x=\"0\" data-y=\"4\" style=\"text-align: center;\" class=\"\">3</td><td data-x=\"1\" data-y=\"4\" style=\"text-align: center;\" class=\"\">30</td><td data-x=\"2\" data-y=\"4\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"4\" style=\"text-align: center;\"></td></tr><tr data-y=\"5\" class=\"\"><td data-y=\"5\" class=\"jexcel_row\">6</td><td data-x=\"0\" data-y=\"5\" style=\"text-align: center;\" class=\"\">4</td><td data-x=\"1\" data-y=\"5\" style=\"text-align: center;\" class=\"\">120</td><td data-x=\"2\" data-y=\"5\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"5\" style=\"text-align: center;\"></td></tr><tr data-y=\"6\" class=\"\"><td data-y=\"6\" class=\"jexcel_row\" style=\"\">7</td><td data-x=\"0\" data-y=\"6\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"1\" data-y=\"6\" style=\"text-align: center;\" class=\"\">600</td><td data-x=\"2\" data-y=\"6\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"6\" style=\"text-align: center;\"></td></tr></tbody></table>'''" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "ca77b687-4ffc-4804-b5e7-4b8af337a5e5", | |
| "metadata": {}, | |
| "source": [ | |
| "Now can parse that table." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "b93e231c-2553-42cc-bfbe-db2ee271f9ff", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# based on https://stackoverflow.com/a/45843420/8508004\n", | |
| "from bs4 import BeautifulSoup\n", | |
| "\n", | |
| "html = h\n", | |
| "soup = BeautifulSoup(html, 'html.parser')\n", | |
| "tables = [\n", | |
| " [\n", | |
| " [td.get_text(strip=True) for td in tr.find_all('td')] \n", | |
| " for tr in table.find_all('tr')\n", | |
| " ] \n", | |
| " for table in soup.find_all('table')\n", | |
| "]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "8907c33f-e0ae-431e-abf0-6464cb1571de", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "tables" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "92e24c5b-7798-42b3-9515-5337c8d10010", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[[['', 'A', 'B', 'C', 'D'], ['1', '', '', '', ''], ['2', '', '5', '', ''], ['3', '1', '5', '', ''], ['4', '2', '10', '', ''], ['5', '3', '30', '', ''], ['6', '4', '120', '', ''], ['7', '5', '600', '', '']]]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(tables)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "e55871eb-3e44-4e05-9553-ca16136c1741", | |
| "metadata": {}, | |
| "source": [ | |
| "Now collect the B column and the values." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "08f46d72-4f49-4164-925a-a77096a7090c", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "column_b = [row[2] for row in tables[0][1:] if len(row) > 2]\n", | |
| "column_b_nums = [int(x) for x in column_b if x.strip()]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "id": "27806aba-c3f4-4614-846e-30bf4ef12cd3", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[5, 5, 10, 30, 120, 600]" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "column_b_nums" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "b2ddc06e-1211-44e6-9461-47a67f1339bf", | |
| "metadata": {}, | |
| "source": [ | |
| "There's the values of the formula.\n", | |
| "\n", | |
| "What if just wanted a CSV?\n", | |
| "\n", | |
| "-----" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "05c71924-1252-412b-adfb-285207b763c6", | |
| "metadata": {}, | |
| "source": [ | |
| "## CSV from the HTML representation\n", | |
| "\n", | |
| "Since the HTML representation has the values, that can be used to make a CSV that won't have the formulas and instead has the values as requested in the post ['Convert formulas into values using jupyterlab-spreadsheet-editor'](https://discourse.jupyter.org/t/convert-formulas-into-values-using-jupyterlab-spreadsheet-editor/30704?u=fomightez) on Jupyter Discourse page." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "a0f0fae1-52cb-42c2-835c-5c8080164004", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "A,B,C,D\n", | |
| ",,,\n", | |
| ",5,,\n", | |
| "1,5,,\n", | |
| "2,10,,\n", | |
| "3,30,,\n", | |
| "4,120,,\n", | |
| "5,600,,\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "h='''<table class=\"jexcel jexcel_overflow\" cellpadding=\"0\" cellspacing=\"0\" unselectable=\"yes\"><colgroup><col width=\"50\"><col width=\"40\"><col width=\"40\"><col width=\"40\"><col width=\"40\"></colgroup><thead class=\"draggable resizable\"><tr><td class=\"jexcel_selectall\"></td><td data-x=\"0\" class=\"selected\" style=\"text-align: center;\">A</td><td data-x=\"1\" style=\"text-align: center;\" class=\"\">B</td><td data-x=\"2\" style=\"text-align: center;\">C</td><td data-x=\"3\" style=\"text-align: center;\">D</td></tr></thead><tbody class=\"draggable\"><tr data-y=\"0\" class=\"selected\"><td data-y=\"0\" class=\"jexcel_row\">1</td><td data-x=\"0\" data-y=\"0\" class=\"highlight-selected highlight highlight-top highlight-bottom highlight-left highlight-right\" style=\"text-align: center;\"></td><td data-x=\"1\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"2\" data-y=\"0\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"0\" style=\"text-align: center;\"></td></tr><tr data-y=\"1\" class=\"\"><td data-y=\"1\" class=\"jexcel_row\">2</td><td data-x=\"0\" data-y=\"1\" style=\"text-align: center;\" class=\"\"></td><td data-x=\"1\" data-y=\"1\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"1\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"1\" style=\"text-align: center;\"></td></tr><tr data-y=\"2\" class=\"\"><td data-y=\"2\" class=\"jexcel_row\">3</td><td data-x=\"0\" data-y=\"2\" style=\"text-align: center;\" class=\"\">1</td><td data-x=\"1\" data-y=\"2\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"2\" data-y=\"2\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"2\" style=\"text-align: center;\"></td></tr><tr data-y=\"3\" class=\"\"><td data-y=\"3\" class=\"jexcel_row\">4</td><td data-x=\"0\" data-y=\"3\" style=\"text-align: center;\" class=\"\">2</td><td data-x=\"1\" data-y=\"3\" style=\"text-align: center;\" class=\"\">10</td><td data-x=\"2\" data-y=\"3\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"3\" style=\"text-align: center;\"></td></tr><tr data-y=\"4\" class=\"\"><td data-y=\"4\" class=\"jexcel_row\">5</td><td data-x=\"0\" data-y=\"4\" style=\"text-align: center;\" class=\"\">3</td><td data-x=\"1\" data-y=\"4\" style=\"text-align: center;\" class=\"\">30</td><td data-x=\"2\" data-y=\"4\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"4\" style=\"text-align: center;\"></td></tr><tr data-y=\"5\" class=\"\"><td data-y=\"5\" class=\"jexcel_row\">6</td><td data-x=\"0\" data-y=\"5\" style=\"text-align: center;\" class=\"\">4</td><td data-x=\"1\" data-y=\"5\" style=\"text-align: center;\" class=\"\">120</td><td data-x=\"2\" data-y=\"5\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"5\" style=\"text-align: center;\"></td></tr><tr data-y=\"6\" class=\"\"><td data-y=\"6\" class=\"jexcel_row\" style=\"\">7</td><td data-x=\"0\" data-y=\"6\" style=\"text-align: center;\" class=\"\">5</td><td data-x=\"1\" data-y=\"6\" style=\"text-align: center;\" class=\"\">600</td><td data-x=\"2\" data-y=\"6\" style=\"text-align: center;\"></td><td data-x=\"3\" data-y=\"6\" style=\"text-align: center;\"></td></tr></tbody></table>'''\n", | |
| "import csv\n", | |
| "import io\n", | |
| "from bs4 import BeautifulSoup\n", | |
| "\n", | |
| "def html_table_to_csv(html):\n", | |
| " # Parse the HTML\n", | |
| " soup = BeautifulSoup(html, 'html.parser')\n", | |
| " \n", | |
| " # Find the table\n", | |
| " table = soup.find('table')\n", | |
| " \n", | |
| " # Prepare a CSV output\n", | |
| " output = io.StringIO()\n", | |
| " csv_writer = csv.writer(output)\n", | |
| " \n", | |
| " # Extract rows\n", | |
| " for tr in table.find_all('tr'):\n", | |
| " # Extract cell texts, stripping whitespace\n", | |
| " # Skip the first column (row numbers) by slicing [1:]\n", | |
| " row = [td.get_text(strip=True) for td in tr.find_all('td')[1:]]\n", | |
| " \n", | |
| " # Only write non-empty rows\n", | |
| " if row:\n", | |
| " csv_writer.writerow(row)\n", | |
| " \n", | |
| " # Get the CSV content as a string\n", | |
| " csv_content = output.getvalue()\n", | |
| " \n", | |
| " return csv_content\n", | |
| "\n", | |
| "# Convert the HTML to CSV\n", | |
| "csv_output = html_table_to_csv(h)\n", | |
| "print(csv_output)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "75e54845-fbf6-46fb-931c-525b325801eb", | |
| "metadata": {}, | |
| "source": [ | |
| "That works.\n", | |
| "\n", | |
| "So save it as a file:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "9c496e06-779b-45d0-b8f7-7a69e1267c75", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Writing 'csv_output' (str) to file 'csv_output.csv'.\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%store csv_output >csv_output.csv" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "aaebe580-c2b2-4aba-b0d0-97dc33a1a06d", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "A,B,C,D\n", | |
| ",,,\n", | |
| ",5,,\n", | |
| "1,5,,\n", | |
| "2,10,,\n", | |
| "3,30,,\n", | |
| "4,120,,\n", | |
| "5,600,,\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "cat csv_output.csv" | |
| ] | |
| }, | |
| { | |
| "attachments": { | |
| "ab008dea-47de-40be-b815-d0f841e25c32.png": { | |
| "image/png": "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591n7/2e93c+Pq911l57rWd9197PftZa+zxPngULFhxx+HP22WcfTur/8BL46KOPNFLhHZ5IyRisNnOKRebpWxgJ/C2MQkkmERABEfCXwJH+NqfWRCDXEdj+8Jm5rs85sMOyCnPgoElkERABrwlIFXpNVPWJgAjkQAJShTlw0CSyCIiA1wSkCr0mqvpEQARyIIEktk127dq1e/duq4+VKlXaunXrb7/9ZnJKlSp1zDHHWEeVCIrAih0ffvnjlw6tVzqh4j9K1HAooEO+EVi6ddnnP2x0aO6UoifXKVPboYAOeUXArSrcu3fvoEGD7K0++uijL7zwwrfffmsyO3fujHK0FyC9YsWK8uXLFyvmx3tVb7/99qefftqxY8coGUL49aeffoJMw4YNo2SjCzVr1ixYsGBUflJfV3774eJt71U8voI5a8u+rXmOOKLscWXN1y9/3HRemfppVYU///zzqlWrvvzyy1NOOaVatWpHH320Jf/atWs/+eSTv/3tb2edddbJJ59M/hdffPHLL7+ceeb/9lj/+uuvZcuWVa5c2Z/LxpItUSKtg7Xs6w/e+nLhySdWNq1v2rM5zxF5TjqhvPmKlmxcsZFUYaKhicpHRy1duvTiiy+Oyp8zZ07dunULFSoUlR/11a0q/P7777lF//3vf9vP79mz5+effz5hwoQ//vjDnm+le/XqdddddzVt2tTKSV8CE5U7MH31e1jzZ5999tprr/3666+XXHKJVe3s2bN53Z0Bq1EjmybbX6UK/v3f9fuamh98fzB319217zJfe71z719/WW3+L8EN3717d552ySqgqVOnovtuuukmUxfK7oYbbiDNS+CPPfYY+m7EiBElS5YkZ/DgwTw7yf/9998HDhxIc//617/QjL1790b35c+f39Swbt06HqvwMV8D/5vWwfrriL/KHl/msaZDTDfvW9CXwRrY+L93WafXu8Qbq8CQfPjhh08//fTIkSNTkCA757psbv369VOmTOFq/Oc//2md8vLLL8+aNev444+vU6eOlRk3ka21wo0bN6IHW7dubX/yx21GmXYCKLuWLVvOnz+f55XJZ7TQg2RmWw/a20kijXpavnz5gQMHkjjnUNEtW7Zs2rTJnMUSyp133ol+f//997kw6CD5Q4b85z7fsWMHenDYsGHkP/vss/fccw+KkqvWmMZLliwxNfAXJtWr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" | |
| } | |
| }, | |
| "cell_type": "markdown", | |
| "id": "18a499d7-bfd4-4497-a212-aee28b40b75c", | |
| "metadata": {}, | |
| "source": [ | |
| "That looks like the following in the result, which is pretty close to the initially rendered table that had the formulas, but now only has values:\n", | |
| "\n", | |
| "" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "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.11.10" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment