- 论坛徽章:
- 0
|
代码如下:
from Tkinter import *
from FileDialog import *
from xml.dom import minidom,Node
import xlrd
from pyExcelerator import *
class app(Frame):
def __init__(self):
Frame.__init__(self)
self.pack()
self.master.title("Conversion System")
self.master.geometry("500x390")
self.frame1 = Frame(self)
self.frame1.grid(row = 0,column = 0)
#self.label1 = Label(self.frame1,text = "Source_Path :")
#self.label1.grid(row = 0,column = 0)
self.open1 = Button(self.frame1,text = "Excel_Path :",relief = FLAT,command = self.Openfile1)
self.open1.grid(row = 0,column = 0)
self.save1 = Button(self.frame1,text = "Xml_Path :",relief = FLAT,command = self.Savefile1)
self.save1.grid(row = 0,column = 2)
self.entry1 = Entry(self.frame1,name = "entry1")
self.entry1.grid(row = 0,column = 1)
self.entry2 = Entry(self.frame1,name = "entry2")
self.entry2.grid(row = 0,column = 3)
self.excel2xml = Button(self.frame1,text = "excel-->xml",command = self.x2e)
self.excel2xml.grid(row = 0,column = 4)
self.excel2xml.bind("<Enter>", self.rolloverEnter) #鼠标事件:进入
self.excel2xml.bind("<Leave>", self.rolloverLeave) #鼠标事件:离开
self.prbt = Button(self.frame1,text = "Print")
self.prbt.grid(row = 0,column = 5)
#frame2
self.frame2 = Frame(self)
self.frame2.grid(row = 1,column = 0)
self.info = Label(self.frame2,text = "Here is the generated Xml File :")
self.info.pack(side = TOP)
self.text_ = Text(self.frame2)
self.text_.pack(side = LEFT)
self.scl = Scrollbar(self.frame2)
self.scl.pack(side = LEFT,fill = Y)
#frame3
self.frame3 = Frame(self)
self.frame3.grid(row = 2,column = 0)
#self.label2 = Label(self.frame3,text = "Target_Path :")
#self.label2.grid(row = 0,column = 0)
self.open2 = Button(self.frame3,text = "Xml_Path :",relief = FLAT,command = self.Openfile2)
self.open2.grid(row = 0,column = 0)
self.entry3 = Entry(self.frame3,name = "entry3")
self.entry3.grid(row = 0,column = 1)
self.save2 = Button(self.frame3,text = "Excel_Path :",relief = FLAT,command = self.Savefile2)
self.save2.grid(row = 0,column = 2)
self.entry4 = Entry(self.frame3,name = "entry4")
self.entry4.grid(row = 0,column = 3)
self.xml2excel = Button(self.frame3,text = "xml-->excel",command = self.x2e)
self.xml2excel.grid(row = 0,column = 4)
self.xml2excel.bind("<Enter>", self.rolloverEnter) #鼠标事件:进入
self.xml2excel.bind("<Leave>", self.rolloverLeave) #鼠标事件:离开
def rolloverEnter(self,event):
event.widget.config(relief=GROOVE)
def rolloverLeave(self,event):
event.widget.config(relief=RAISED)
def Openfile1(self):
fd = LoadFileDialog(self.master)
source_path = fd.go()
print source_path
self.entry1.insert(0,source_path)
def Savefile1(self):
fd = SaveFileDialog(self.master)
target_path = fd.go()
self.entry2.insert(0,target_path)
def Openfile2(self):
fd = LoadFileDialog(self.master)
source_path = fd.go()
print source_path
self.entry3.insert(0,source_path)
def Savefile2(self):
fd = SaveFileDialog(self.master)
target_path = fd.go()
self.entry4.insert(0,target_path)
def xml2excel(self,source,target):
#都是全名,包括xml,xls后缀
xmldoc = minidom.parse(source)
root = xmldoc.documentElement
# here root is 'book'--->test.xml
#使用pyExcelerator模块
w = Workbook()#生成工作簿
ws = w.add_sheet('sheet1')#加入一个工作表
#父标签和子标签之间有空格或回车
#空格和回车会被认为是父标签的一个子节点
node = root.childNodes[1]
# here node is 'title'--->test.xml
#所以,在xml的源代码中 应该看父子间有无空格
#正常人书写xml文件应该有空格或换行
#这里仅仅得到了子标签的名字,excel中第一排问题解决
j = 0
if node.nodeType == node.ELEMENT_NODE:
for node in node.childNodes:
if node.nodeType == Node.ELEMENT_NODE:
ws.write(0,j,node.nodeName)
j+= 1
#输出xml文档中的所有内容信息
row = 0
col = 0
# root is 'book'
for node in root.childNodes:
#因为空格也算子节点,所以需要加条限制语句
if node.nodeType==node.ELEMENT_NODE:#这条判断语句是后来调试加上去的,因为空格也算子节点
col = 0
row+= 1
for x in node.childNodes:
if x.nodeType == x.TEXT_NODE:
continue
else:
ws.write(row,col,x.firstChild.data)
col+=1
#print row
#保存
w.save(target)
def x2e(self):
self.xml2excel(self.Openfile1,self.Savefile1)
def excel2xml(self,source_path,target_path):
book = xlrd.open_workbook(source_path)
sh = book.sheet_by_index(0)
#保存工作表的行列的数量
r,c = sh.nrows,sh.ncols
#写xml
#create the minidom document
doc = minidom.Document()
# Create the base element
root = doc.createElement('root')
doc.appendChild(root)
# Create the main element
#注意:标签不能有空格或特殊字符 比如'#' 否则浏览器不能解析xml
#默认标题都是英文,中文处理还存在问题
CODEC = 'utf-8'
for i in range(1,r):
#create the first title
firsttitle = doc.createElement('god')
root.appendChild(firsttitle)
for j in range(c):
ww = doc.createElement(sh.cell_value(0,j))
firsttitle.appendChild(ww)
ww.appendChild(doc.createTextNode('%s' % sh.cell_value(i,j)))
str = doc.toprettyxml()
#print str
unicodeStr = str.encode(CODEC)
self.text.insert(1.0,unicodeStr)
xmlfile = open(target_path,'w')
xmlfile.write(unicodeStr)
xmlfile.close()
def e2x(self):
self.excel2xml(self.Openfile2,self.Savefile2)
def main():
app().mainloop()
if __name__=="__main__":
main()
作用是点击按钮xml-->excel或者按钮excel-->xml时,出现错误提示为:AttributeError: Button instance has no __call__ method
,不知道如何解决?谁能花点时间99我,谢谢了大虾们。。。。。 |
|