import win32com.client
import pymysql
import time
import xlrd
import xlsxwriter
class toExcel():
def __init__(self):
self.cursor=self.conlzg().cursor()
self.loczs=[]
self.locgp=[]
self.num=5
self.loc=[]
def conlzg(self):
con=pymysql.connect(host='localhost',
user='root',
passwd='lzg000',
db='lzg',
port=3306,
charset='utf8'
)
return con
def buildzs(self):
start='0'
left=1 #起始列
top=1 #起始行
picleft=1
pictop=15
numindex=0
filename='E:\\test\\test.xlsx'
#wbk =xlsxwriter.Workbook(filename)
#wbk.close()
xlApp = win32com.client.Dispatch('Excel.Application')
xlBook = xlApp.Workbooks.Open(filename)
xlApp.Visible=1
#xlApp.Sheets.Add()
sht1=xlBook.Worksheets(1)
#sht1.name='chart'
sht2=xlBook.Worksheets(2)
#xlApp.Sheets("Sheet2").Select
#sht2.Visible = False
#sht2.name='data'
cursor=self.cursor
cursor.execute('select count(*) from zs group by name')
s1=cursor.fetchall()
for i in xrange(5):
num=s1[numindex][0]
numindex+=1
count = cursor.execute('select * from zs order by name,time limit'+' '+start+','+str(num))
self.num=count
print 'has %s record' % count
cursor.scroll(0,mode='absolute')
results = cursor.fetchall()
fields = cursor.description
for ifs in range(top,len(fields)+top):
sht2.Cells(top,ifs+left-top).Value = fields[ifs-top][0]
for row in range(top+1,len(results)+top+1):
for col in range(left,len(fields)+left):
sht2.Cells(row,col).Value=results[row-1-top][col-left]
locxy=(row,left)
self.loc.append(locxy)
sht1.Shapes.AddChart2(271,4,picleft,pictop,593,200).Select()
cell1=sht2.cells(top,left+9)
cell2=sht2.cells(top+99,left+9)
xlApp.ActiveChart.SetSourceData(Source=sht2.Range(cell1,cell2))
cell3=sht2.cells(top,left+8)
cell4=sht2.cells(top,left+8)
xlApp.ActiveChart.FullSeriesCollection(1).XValues=sht2.Range(cell3,cell4)
xlApp.ActiveChart.ChartTitle.Text = sht2.cells(top+1,left+2).Value
start=int(start)+num
start=str(start)
pictop+=200
top+=100
#xlBook.Save()
def build(self):
start=0
left=14 #起始列
top=0 #起始行
pictop=2
numindex=0
#将字段写入到EXCEL新表的第一行
wbk =xlsxwriter.Workbook('E:/test/test2.xlsx')
#newwbk = copy(wbk)
sheet = wbk.add_worksheet('chart')
sheet1=wbk.add_worksheet('data')
red = wbk.add_format({'border':1,'align':'center','bg_color':'C0504D','font_size':12,'font_color':'white'})
sheet.merge_range(0,0,0,10,data,yellow)
cursor=self.cursor
cursor.execute('select count(*) from m group by name')
numlist=cursor.fetchall()
for i in xrange(5):
num=numlist[numindex][0]
numindex+=1
count = cursor.execute('select * from m order by name,time limit'+' '+ str(start)+','+ str(num))
print 'has %s record' % count
#重置游标位置
cursor.scroll(0,mode='absolute')
#搜取所有结果
results = cursor.fetchall()
#测试代码,print results
#获取MYSQL里的数据字段
fields = cursor.description
#从top行开始写标题
#code=results[0][0]
#loc[code]=(top,left) #得到每个表的左上角坐标
#向sheet中插入数据
for ifs in range( top,len(fields)+ top):
sheet1.write( top,ifs+ left- top,fields[ifs- top][0])
#写内容
for row in range( top+1,len(results)+ top+1):
#for col in range(left,len(fields)+left):
sheet1.write_row(row, left,results[row-1- top])
locxy=[row+1,left+1]
self.locgp.append(locxy)
#作图,类型为 line折现图
chart1 = wbk.add_chart({'type': 'line'})
chart1.set_style(4)
#向图表添加数据
chart1.add_series({
'name':['data', top+1, left+1],
'categories':['data', top+1, left+6, top+1, left+6],
'values':['data', top+1, left+5, top+200, left+5],
'line':{'color':'red'},
'fill': {'color':'#FF9900'}
})
#bold = wbk.add_format({'bold': 1})
chart1.set_title({'name':'1min line '})
chart1.set_x_axis({'name':'time'})
chart1.set_y_axis({'name':'close'})
chart1.set_size({'width':800,'height':300})
sheet.insert_chart( pictop, left,chart1)
#bg+=19
start+=num
top+=300
pictop+=15
start=0
left=0 #起始列
top=0 #起始行
pictop=2
cursor.execute('select count(*) from zs group by name')
numlist=cursor.fetchall()
self.num=numlist[0][0]
numindex=0
for i in xrange(5):
num=numlist[numindex][0]
numindex+=1
count = cursor.execute('select * from zs order by name,time limit'+' '+ str(start)+','+ str(num))
print 'has %s record' % count
#重置游标位置
cursor.scroll(0,mode='absolute')
#搜取所有结果
results = cursor.fetchall()
#测试代码,print results
#获取MYSQL里的数据字段
fields = cursor.description
#从top行开始写标题
#code=results[0][0]
#loc[code]=(top,left) #得到每个表的左上角坐标
#向sheet中插入数据
for ifs in range( top,len(fields)+ top):
sheet1.write( top,ifs+ left- top,fields[ifs- top][0])
#写内容
for row in range( top+1,len(results)+ top+1):
#for col in range(left,len(fields)+left):
sheet1.write_row(row, left,results[row-1- top])
locxy=(row+1,left+1)
self.loczs.append(locxy)
#作图,类型为 line折现图
chart1 = wbk.add_chart({'type': 'line'})
chart1.set_style(4)
#向图表添加数据
chart1.add_series({
'name':['data', top+1, left+2],
'categories':['data', top+1, left+6, top+1, left+6],
'values':['data', top+1, left+9, top+300, left+9],
'line':{'color':'red'},
'fill': {'color':'#FF9900'}
})
#bold = wbk.add_format({'bold': 1})
chart1.set_title({'name':'1min line '})
chart1.set_x_axis({'name':'time'})
chart1.set_y_axis({'name':'close'})
chart1.set_size({'width':750,'height':300})
sheet.insert_chart( pictop, left,chart1)
start+=num
top+=300
pictop+=15
cursor.close()
wbk.close()
def update(self):
filename='E:\\test\\test2.xlsx'
xlApp = win32com.client.Dispatch('Excel.Application')
xlBook = xlApp.Workbooks.Open(filename)
xlApp.Visible=1
sht2=xlBook.Worksheets(2)
start=0
numindex=0
locindex=0
while True:
S=0
con=self.conlzg()
cursor=con.cursor()
cursor.execute('select count(*) from zs group by name')
s1=cursor.fetchall()
for x,y in self.loczs:
num=s1[numindex][0]
numindex+=1
count = cursor.execute('select * from zs order by name,time desc limit'+' '+str(start)+','+'1')
if num==self.num:
print "未更新数据"
S=1
time.sleep(20)
break
print '指数更新 %s record' % count
results = cursor.fetchall()
for col in range(y,y+10):
sht2.Cells(x+1,col).Value=results[0][col-y]
start=start+num
if S==0:
for x,y in self.loczs:
self.loczs[locindex]=(x+1,y)
locindex+=1
self.num+=1
numindex=0
locindex=0
start=0
cursor.close()
con.close()
print '指数更新完毕'
def update2(self):
xlApp = win32com.client.Dispatch('Excel.Application')
xlBook = xlApp.Workbooks(1)
xlApp.Visible=1
sht2=xlBook.Worksheets(2)
start=0
numindex=0
locindex=0
while True:
S=0
con=self.conn
cursor=con.cursor()
cursor.execute('select count(*) from m group by name')
s1=cursor.fetchall()
for x,y in self.locgp:
num=s1[numindex][0]
numindex+=1
count = cursor.execute('select * from m order by name,time desc limit'+' '+str(start)+','+'1')
if num==self.num:
print "未更新数据"
S=1
time.sleep(20)
break
print 'has %s record' % count
self.num+=1
#cursor.scroll(0,mode='absolute')
results = cursor.fetchall()
for col in range(y,y+8):
sht2.Cells(x+1,col).Value=results[0][col-y]
start+=num
if S==0:
for x,y in self.locgp:
self.locgp[locindex]=(x+1,y)
locindex+=1
numindex=0
locindex=0
start=0
def main():
conn=pymysql.connect(host='localhost',
user='root',
passwd='lzg000',
db='lzg',
port=3306,
charset='utf8'
)
e=toExcel(conn)
e.build()
e.update()
#e.update2()
if __name__=='__main__':
main()