当我试图浏览.xslx文件时,会打开一个新的Excel文档

2024-09-30 10:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用PyQt5开发GUI。 我正在使用菜单栏加载文件,当我单击该文件时,程序将调用此函数:

   def getxlsbase(self):
        filePath_base, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Select file', './', 'Excel Files (*.xls *.xlsx)')
        base = xlrd.open_workbook(filePath_base)
        hoja_base = base.sheet_by_index(0)
        num_row = hoja_base.nrows
        num_col = hoja_base.ncols

当浏览窗口打开并选择文件时,会打开一个空白的Excel文档,如何避免这种情况?在

编辑: 我尝试过这种方法,但我仍然有这个问题,它只发生在excel文档中。我用的是Spyder3

^{pr2}$

Tags: 文件函数文档self程序basedefgui
1条回答
网友
1楼 · 发布于 2024-09-30 10:34:32

您提供的方法工作正常。在

import sys
import xlrd
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QAxContainer import QAxWidget

class AxWidget(QWidget):    

    def __init__(self, *args, **kwargs):
        super(AxWidget, self).__init__(*args, **kwargs)
        self.resize(800, 600)
        layout = QVBoxLayout(self)
        self.axWidget = QAxWidget(self)
        layout.addWidget(self.axWidget)
        layout.addWidget(QPushButton('Select file', self, clicked=self.getxlsbase))

    def getxlsbase(self):
        filePath_base, _ = QFileDialog.getOpenFileName(self, 
                                     'Select file', 
                                     './', 
                                     'Excel Files (*.xls *.xlsx)')
        print("filePath_base->", filePath_base)                             
        base = xlrd.open_workbook(filePath_base)
        print("base->", base) 
        hoja_base = base.sheet_by_index(0)
        print("hoja_base->", hoja_base)
        num_row = hoja_base.nrows
        print("num_row->", num_row)
        num_col = hoja_base.ncols
        print("num_col->", num_col)

        return self.openOffice(filePath_base, 'Excel.Application')

    def openOffice(self, path, app):
        self.axWidget.clear()
        if not self.axWidget.setControl(app):
            return QMessageBox.critical(self, 'Error', 'No installation  %s' % app)
        self.axWidget.dynamicCall(
            'SetVisible (bool Visible)', 'false')         
        self.axWidget.setProperty('DisplayAlerts', False)
        self.axWidget.setControl(path)        

    def closeEvent(self, event):
        self.axWidget.close()
        self.axWidget.clear()
        self.layout().removeWidget(self.axWidget)
        del self.axWidget
        super(AxWidget, self).closeEvent(event)        


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex  = AxWidget()
    ex.show()
    sys.exit(app.exec_())  

enter image description here

相关问题 更多 >

    热门问题