利用 Excel封装成OCX 在wxPython窗口中显示、操作

来源:互联网 发布:sony 摄像机 网络直播 编辑:程序博客网 时间:2024/06/10 15:09
<span style="font-size:18px;"># -*- coding: utf-8 -*-  SCITE 消除乱码设置: 文件->编码->带BOM的UTF-8# 奇怪的乱码!"""目的:    1. 封装Excel 的 OCX太少! 好用的更是少之又少!(注意!!! iWebOffice2006.ocx涉及到版权! 这里iWebOffice2006.ocx仅做学习、研究、交流用! 如需使用请君购买正版! )     2. OCX嵌入到wxPython对话框例子太少.    3. 这个例子就是填补1-2空白     4. 最好的利用了:        1. excel高普及率、        2. VBA操作的灵活强大        3. Python高效开发、不用编译直接运行        4. Python脚本+ VBA脚本 + 窗口界面 浑然一体环境准备:    1. Python2.7.8    2. Office2007    3. pyInstaller2.1    4. wxPython For py2.7    5. 其他py需要的包(如:COM,Win32)根据提示安装"""import wximport  wx.lib.anchors as anchorsfrom wx.lib.activexwrapper import MakeActiveXClassimport win32com.client.gencache as win32import sysreload(sys)de = sys.getdefaultencoding() # asciife = sys.getfilesystemencoding() #mbcs#print de, fe# 注意: 先使用 开始->Python2.7->PythonWin->Tools->COM Makepy utility->选中iWebOffice2006Library(1.0) # 生成C:\Python27\lib\site-packages\win32com\gen_py\19890DF8-EB54-4FB0-ABBA-5242B2A07EEEx0x1x0.py!excelControl = win32.EnsureModule('{19890DF8-EB54-4FB0-ABBA-5242B2A07EEE}',0,1,0) #print excelControl#print dir(excelControl)if excelControl is None: # 发布时要带上 19890DF8-EB54-4FB0-ABBA-5242B2A07EEEx0x1x0.py!    raise ImportError("Can't load iWebOffice2006.ocx Make sure you have iWebOffice2006.ocx regstered.")    [   ID_ANCHORSDEMOFRAMEANCHOREDPANEL,     ID_ANCHORSDEMOFRAMEMAINPANEL,     ID_ANCHORSDEMOFRAMEOKBUTTON,    ID_ANCHORSDEMOFRAME,  ] = map(lambda _init_ctrls: wx.NewId(), range(4))   class MyFrame(wx.Frame):    def _init_utils(self):        pass            def _init_ctrls( self ):        wx.Frame.__init__(            self, size=(800, 600), id=ID_ANCHORSDEMOFRAME,             title=u'用Excel(OCX)做界面', parent=None,             name='AnchorsDemoFrame',             style = wx.DEFAULT_FRAME_STYLE | wx.CLIP_CHILDREN, pos=(261, 123)            )        self._init_utils()        self.mainPanel = wx.Panel(                            size=(320, 160),                             parent=self,                             id=ID_ANCHORSDEMOFRAMEMAINPANEL,                             name='panel1',                             style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN                            | wx.FULL_REPAINT_ON_RESIZE,                             pos=(0, 0)                            )        self.mainPanel.SetAutoLayout(True)  #         self.okButton = wx.Button(                            label='OK',                             id=ID_ANCHORSDEMOFRAMEOKBUTTON,                             parent=self.mainPanel,                             name='btnOk',                             size=(72, 24), style=0, pos=(240, 128)                            )        self.okButton.SetConstraints(            anchors.LayoutAnchors(self.okButton, False, False, True, True)            )        self.Bind( wx.EVT_BUTTON,  self.OnBtnOk, id=ID_ANCHORSDEMOFRAMEOKBUTTON )                    excelWrapper = MakeActiveXClass( excelControl.HandWriteCtrl )        #print excelWrapper        self.excelOcx = excelWrapper( self.mainPanel, -1, (8, 40), ( 304, 80 ) )        self.excelOcx.SetConstraints(            anchors.LayoutAnchors(self.excelOcx, True, True, True, True)            )                self.excelOcx.ShowToolBar = 2  # 不现显示工具栏        self.excelOcx.ShowMenu = "0"   # 隐藏菜单        #self.excelOcx.Compatible = False #Save Excel2007 must set false. Must befor self.excelOcx.FileType! 测试版的ocx才有此功能        self.excelOcx.FileType = ".xls"  #operate excel fmt file.                #print "self.excelOcx.Compatible", self.excelOcx.Compatible                self.iExcelIndex = 0        self.arrExcel = [ u"./Excel报告模版/钢筋拉伸试验.xls".encode( fe ),                           u"./Excel报告模版/钢筋焊接件拉伸试验.xls".encode( fe ),                           u"./Excel报告模版/混凝土抗压试验.xls".encode( fe ),                           u"./Excel报告模版/混凝土抗折试验.xls".encode( fe ),                           u"./Excel报告模版/砂浆抗压试验.xls".encode( fe ),                          u"./Excel报告模版/水泥抗压试验.xls".encode( fe ),                          u"./Excel报告模版/砖块抗压试验.xls".encode( fe ),                          ]        self.OpenExcelFile( self.arrExcel[ self.iExcelIndex ] ) #self.excelOcx.WebOpenLocalFile( self.arrExcel[ self.iExcelIndex ] )                # print "self.excelOcx.WebObject:", self.excelOcx.WebObject        # print "self.excelOcx.WebObject.Application:", self.excelOcx.WebObject.Application        #self.excelOcx.WebObject.Application.ActiveSheet.Range("AX67").Value = "Value345"         self.okButton.Label = str( self.iExcelIndex )       def __init__( self ):        self._init_ctrls( )            def OpenExcelFile( self, strExcelFilePath ):        self.excelOcx.WebClose() # Close First         self.excelOcx.WebOpenLocalFile( strExcelFilePath ) # then open        #print strExcelFilePath        app = self.excelOcx.WebObject.Application        app.DisplayFormulaBar = False #公式        app.CommandBars[ "Cell" ].Enabled = False           # 单元格        app.ActiveWindow.DisplayHeadings            = False # 不显示:行头、列头        app.ActiveWindow.DisplayHorizontalScrollBar = False # 水平滚动条        app.ActiveWindow.DisplayVerticalScrollBar   = True  # 垂直滚动条        app.ActiveWindow.DisplayWorkbookTabs        = False # 工作表标签Tab页        app.ActiveWindow.DisplayGridlines           = False # 网格线        app.ActiveSheet.Protect( None, True, True, True )  # 保护单元格            def OnBtnOk( self, evt ):        #r = self.excelOcx.WebSaveLocalFile( self.strExcelFile )        #print "self.excelOcx.WebSaveLocalFile:", r                self.iExcelIndex += 1        self.iExcelIndex %= 5        self.OpenExcelFile( self.arrExcel[ self.iExcelIndex ] )        self.okButton.Label = str( self.iExcelIndex )                 #self.excelOcx = None        #self.Close()if __name__=="__main__":    app=wx.PySimpleApp()    media1=MyFrame()    media1.Show()    app.MainLoop() </span>

0 0