python實現通用excel匯入到mysql

2022-01-29 13:32:10 字數 2128 閱讀 6590

}

file:要處理的**檔案

startrow:從第幾行開始匯入

table:匯入到哪個表

comitcount:多少筆一提交( 由於資料庫對sql長度是有限制的,不建議設定太大)

map:表字段與excel列的對映關係

import

math

import

xlrd

import

json

from db import

dbdb =db()

defloadconfig():

'''載入配置

:return:

'''with open(

"map.conf

") as f:

return

json.load(f)

defchang26to10(value):

'''26進製轉10進製

'''transfarray = ;

sum =0

length =len(value)

for idx in

range(length):

char =value[idx]

if char.upper() not

intransfarray:

raise exception("

無效字元:<%s>

" %char)

v =transfarray[char.upper()]

tem = v * math.pow(26, length - idx - 1)

sum = tem +sum

return

int(sum)

if__name__ == '

__main__':

importconfig =loadconfig()

#獲取要匯入的表名

tablename = importconfig["

table"]

comitcount = importconfig["

comitcount"]

startrow = importconfig["

startrow"]

cols =

colsidx =

for k, v in importconfig["

map"

].items():

sqlpre = "

insert into %s(%s) values

" % (tablename, ","

.join(cols))

xls = xlrd.open_workbook(importconfig["

file"])

sheet =xls.sheets()[0]

startidx =0

startidx =startrow

vlist =

for i in

range(startidx, sheet.nrows):

print("

處理第%s行

" %i)

temlist =;

for cidx in

colsidx:

s = "

'%s'

" % sheet.cell_value(i, chang26to10(cidx) - 1).replace("

'", "''"

)"(%s)

" % ","

.join(temlist))

#每50行提交一次

if len(vlist) ==comitcount:

sql = sqlpre + ","

.join(vlist)

db.execsql(sql)

vlist.clear()

continue

if len(vlist) >0:

sql = sqlpre + ","

.join(vlist)

db.execsql(sql)

vlist.clear()

print("

處理完成

")

為了保證資料匯入成功,建表時字段建議用varchar。(不然會有各種型別、非空之類的錯誤)

通用Excel匯出

匯出excel時,經常會遇到需要重複性的書寫每個列的名稱,以此造成 編寫的重複書寫,例如 為了避免這種編寫,我們可以採取特性加反射的形式進行 解耦。例子如下 封裝 using model.attribute using npoi.hssf.usermodel using npoi.ss.usermo...

GridControl 通用匯出excel

關於devexpress winform 的所有可列印控制項的匯出excel 的通用方法,並且解決devexpress控制項自帶的方法存在的缺陷問題 1 解決gridcontrol自帶方法不能匯出 2 gridcontrol 的bandgridview 多表頭無法匯出等問題 3 解決pivotgri...

NPOI 讀取 excel通用類

using system using system.collections.generic using system.text using system.io using system.data using npoi.hssf.usermodel using npoi.ss.usermodel na...