}
file:要處理的**檔案
startrow:從第幾行開始匯入
table:匯入到哪個表
comitcount:多少筆一提交( 由於資料庫對sql長度是有限制的,不建議設定太大)
map:表字段與excel列的對映關係
importmath
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...