python Excel转plist文件

import re
import xlrd
import xml.dom.minidom as Dom
import sys
import Tkinter
import tkFileDialog

class ExcelToXML():
        """A tool class to chang xlsx_file to xml_file"""
        def __init__(self, excelName, outDir):
                self.xml_doc  = Dom.Document()
                self.excelData = xlrd.open_workbook(excelName)
                self.outDir = self.cellContentHandle(outDir)

        def cellContentHandle(self, cellTxt, tarType='None'):
                oriType = type(cellTxt)
                print oriType,'------',tarType
                txt = cellTxt

                #将cell中得数据转成标准字符串
                #类型目前考虑的分三种:int、float、string(unicode)
                if isinstance(txt, int):
                        txt = str(txt)
                elif isinstance(txt, float):
                        #容错处理:excel中int和float混用,要求是int,填写的是float
                        if tarType == 'int':
                                txt = str(int(float(txt)))
                        else:
                                txt = str(float(txt))
                elif isinstance(txt, unicode):
                        txt = txt.encode('utf-8')

                return txt

        #遍历所有的表单,生成plist
        def createAllSheetPlist(self):
                for i in range(0, self.excelData.nsheets):
                        self.createSheetAllPlist(i)

        #遍历一张表单的所有行生成plist
        def createSheetAllPlist(self, sheetIdx):
              sheet = self.excelData.sheets()[sheetIdx]
              if sheet.nrows <= 0:
                      sys.exit()
              self.keys = sheet.row_values(0)
              self.types = sheet.row_values(2)
              for i in range(0, sheet.nrows):
                      self.buildOnePlistByRowData(sheet.row_values(i))

        #遍历一行的所有数据值,构建一个plist文件
        def buildOnePlistByRowData(self, rowDatas):
##                print ".....",re.match(r'\d+',self.cellContentHandle(rowDatas[0])),self.cellContentHandle(rowDatas[0])
                if re.match(r'\d+',self.cellContentHandle(rowDatas[0])) == None:
                            return None
                rootNode = self.createRootNode()
                for i in range(0, len(rowDatas)):
                        self.createKeyNode(rootNode,self.cellContentHandle(self.keys[i]))
                        self.createValueNode(rootNode,self.cellContentHandle(rowDatas[i],self.types[i]))

                plistName = self.cellContentHandle(rowDatas[0],'int')
                f = open(self.outDir+'/'+plistName+'.plist','w')
                self.xml_doc.writexml (f,'','','\n','utf-8')
                f.close()


        def createRootNode(self):
                del self.xml_doc
                self.xml_doc = Dom.Document()
                boxNode = self.xml_doc.createElement('plist')
                boxNode.setAttribute('version','1.0')
                self.xml_doc.appendChild(boxNode)

                rootNode = self.xml_doc.createElement ('dict')
                boxNode.appendChild (rootNode)
                return rootNode
                
        def createKeyNode(self, root_node, kText):
                keyNode = self.xml_doc.createElement('key')
                keyTxtNode = self.xml_doc.createTextNode(kText)
                keyNode.appendChild (keyTxtNode)
                root_node.appendChild(keyNode)

        def createValueNode(self, root_node, vText):
                vNode = self.xml_doc.createElement('string')
                vTxtNode = self.xml_doc.createTextNode(vText)
                vNode.appendChild(vTxtNode)
                root_node.appendChild(vNode)

def GUI_OpenFile():
        xlsxPath = tkFileDialog.askopenfilename()
        if xlsxPath == "":
                sys.exit()
        outPath = tkFileDialog.askdirectory()
        if outPath == "":
                sys.exit()
        return xlsxPath,outPath
def MyParseExcelToXML():
	xp,op = GUI_OpenFile()
	etx = ExcelToXML(xp,op)
	etx.createAllSheetPlist()                           
MyParseExcelToXML()                             
##data = xlrd.open_workbook(xlsxPath) #'resource/npc.xlsx'
##
##for sheetNum in range(0, len(data.sheets())):
##      table = data.sheets()[sheetNum]
##      nrows = table.nrows
##      ncols = table.ncols
##      if nrows <= 0:
##              sys.exit()
##      for rowNum in range(0, nrows):
##                      celltxt = table.cell(rowNum,0).value
##                      if isinstance(celltxt, unicode):
##                              celltxt = celltxt.encode('utf-8')
##                      else: #number
##                              celltxt = str(celltxt)
##                      if re.match(r'\d+',celltxt) :
##                              name = int(float(celltxt))
##                              createXml(rowNum,outPath)
##            
##
##
##
####doc = Dom.Document()
##rootNode = doc.createElement ('root')
##doc.appendChild (rootNode)
##
##keyNode = doc.createElement('key')
##keyTxtNode = doc.createTextNode ('npcId')
##keyNode.appendChild (keyTxtNode)
####keyNode.setAttribute('npcId','10001')
##rootNode.appendChild (keyNode)
##doc.createComment('jgljflhjlfhjljhlg')
##f = open('resource/my.plist','w')
##doc.writexml (f,'','\t','\n','utf-8')
##f.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值