-
-
Save fweller/c5d7f0973ce300ae79b7f90a29822c42 to your computer and use it in GitHub Desktop.
Convert complete excel workbook to SQLite database (All Sheets)
This file contains 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
''' | |
This code uses the openpyxl package for playing around with excel using Python code | |
to convert complete excel workbook (all sheets) to an SQLite database | |
The code assumes that the first row of every sheet is the column name | |
Every sheet is stored in a separate table | |
The sheet name is assigned as the table name for every sheet | |
''' | |
''' | |
20210908 Forked from antiproblemist/excel2sql.py | |
Modified to run in Python 3 | |
''' | |
import sqlite3 | |
import openpyxl | |
from openpyxl import load_workbook | |
import re | |
def slugify(text, lower=1): | |
if lower == 1: | |
text = text.strip().lower() | |
text = re.sub(r'[^\w _-]+', '', text) | |
text = re.sub(r'[- ]+', '_', text) | |
return text | |
#Replace with a database name | |
con = sqlite3.connect('test.db') | |
#replace with the complete path to youe excel workbook | |
wb = load_workbook(filename=r'abc.xlsx') | |
sheets = wb.sheetnames | |
for sheet in sheets: | |
ws = wb[sheet] | |
columns= [] | |
query = 'CREATE TABLE ' + str(slugify(sheet)) + '(ID INTEGER PRIMARY KEY AUTOINCREMENT' | |
for row in next(ws.rows): | |
query += ', ' + slugify(row.value) + ' TEXT' | |
columns.append(slugify(row.value)) | |
query += ');' | |
con.execute(query) | |
tup = [] | |
for i, rows in enumerate(ws): | |
tuprow = [] | |
if i == 0: | |
continue | |
for row in rows: | |
tuprow.append(str(row.value).strip()) if str(row.value).strip() != 'None' else tuprow.append('') | |
tup.append(tuple(tuprow)) | |
insQuery1 = 'INSERT INTO ' + str(slugify(sheet)) + '(' | |
insQuery2 = '' | |
for col in columns: | |
insQuery1 += col + ', ' | |
insQuery2 += '?, ' | |
insQuery1 = insQuery1[:-2] + ') VALUES(' | |
insQuery2 = insQuery2[:-2] + ')' | |
insQuery = insQuery1 + insQuery2 | |
con.executemany(insQuery, tup) | |
con.commit() | |
con.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment