2013-07-03 14 views
13

Mam arkusz Excel z pełną danych. Chcę te same dane w tabeli bazy danych SQLite. Obecnie muszę ręcznie wprowadzić pole 1 na 1. Czy istnieje sposób na bezpośredni eksport danych do tabeli bazy danych sqlite?eksport danych z programu Excel do bazy danych sqlite

+0

użycie SQLite Expert Professional 3 –

+0

Możliwy duplikat [Import CSV do SQLite] (http://stackoverflow.com/questions/14947916/import-csv-to- sqlite) – zero323

Odpowiedz

9

Twoja ścieżka przechodzi przez CSV (powinieneś wyeksportować swoje dane do pliku CSV), zobacz więcej tutaj na przykład.

Import CSV to SQLite

1

Istnieje również skrypt Pythona (xl2sqlite.py), który będzie wykonać zadanie.

+0

nie działa w tym skrypcie ... brak czasu – issamux

+0

'¯ \ _ (ツ) _/¯' Działa dla mnie. – Meitar

5

Spróbuj tego kodu świeże exceltosql:

''' 
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 
''' 

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.get_sheet_names() 

for sheet in sheets: 
    ws = wb[sheet] 

    columns= [] 
    query = 'CREATE TABLE ' + str(slugify(sheet)) + '(ID INTEGER PRIMARY KEY AUTOINCREMENT' 
    for row in ws.rows[0]: 
     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(unicode(row.value).strip()) if unicode(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() 
+1

Działa nicelly, ale wymaga zmiany "dla wiersza w ws.rows [0]:" to "dla wiersza w następnej (ws.rows):" w linii 33. Dzięki! – Zalakain

Powiązane problemy