2013-07-03 49 views
13

我有一个Excel表格,里面装满了数据。我想在sqlite数据库表中有相同的数据。目前我必须手动输入1乘1字段。有什么办法可以将数据导出到sqlite数据库表吗?从excel导出数据到sqlite数据库

+0

使用SQLite专家专业版3 –

+0

的可能重复[导入CSV对于SQLite(http://stackoverflow.com/questions/14947916/import-csv-to- sqlite) – zero323

回答

9

您的路径是通过CSV(您应该将您的数据导出为CSV),例如在这里查看更多。

Import CSV to SQLite

1

还有一个python脚本(xl2sqlite.py),将做的工作。

+0

不能使用这个脚本...宽松的时间 – issamux

+0

'¯\ _(ツ)_ /¯'适用于我。 – Meitar

5

试试这个新鲜的代码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

工程很好,但需要改变“行ws.rows [0]:”到“行下(ws.rows):”在第33行。谢谢! – Zalakain