2013-07-03 54 views
13

Ho un foglio excel pieno di dati. Voglio gli stessi dati nella tabella del database sqlite. Attualmente devo inserire manualmente il campo 1 per 1. Esiste un modo per dirigere l'esportazione dei dati nella tabella del database sqlite?esportazione dati da excel a database sqlite

+0

Usa SQLite Expert Professional 3 –

+0

Eventuali duplicati di [Importa CSV per SQLite] (http://stackoverflow.com/questions/14947916/import-csv-to- sqlite) – zero323

risposta

9

Il tuo percorso è in formato CSV (devi esportare i tuoi dati in formato CSV), vedi di più qui ad esempio.

Import CSV to SQLite

-1

Questo sito converte i file di Excel in file SQLite http://converttosqlite.com/

+0

Questo sito converte in sqlite2 che non è compatibile con sqlite3! – MOHRE

1

C'è anche uno script python (xl2sqlite.py) che farà il lavoro.

+0

non funziona questo script ... perdere tempo – issamux

+0

'¯ \ _ (ツ) _/¯' Funziona per me. – Meitar

5

Prova questo codice fresca 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

Funziona benissimo, ma deve essere modificato "per la riga in ws.rows [0]:" a "per la riga successiva (ws.rows):" nella riga 33. Grazie! – Zalakain

Problemi correlati