qt打开excel名称传递错误
Posted
技术标签:
【中文标题】qt打开excel名称传递错误【英文标题】:qt open excel name passing error 【发布时间】:2014-11-12 05:55:39 【问题描述】:现在我正在制作一个程序,它可以读取两张 excel 表并使其成为一张。
一切都很好。但我有一个问题
那是
QAxWidget *excel=new QAxWidget("Excel.Application", this);
excel->dynamicCall("SetVisible", true);
QAxObject *workbooks=excel->querySubObject("WorkBooks");
workbooks->dynamicCall("Open(const QString&)", QString(":/temp/temp.xls"));
QAxObject *workbook=excel->querySubObject("ActiveWorkBook");
QAxObject *worksheets=workbook->querySubObject("WorkSheets");
我的 qrc 文件
<RCC>
<qresource prefix="/">
<file>temp/temp.xls</file>
</qresource>
</RCC>
workbooks->dynamicCall("Open(const QString&)", QString(":/temp/temp.xls")); 这部分出现错误
我在resource.qrc中插入了一个excel模板文件
我尝试打开,但没有成功。
如果我传递了文件的绝对路径,然后工作。但是如果我传递了文件的相对路径,就不行了
我该如何解决这个问题? 请告诉我.. 谢谢
【问题讨论】:
当你把它作为资源时,你怎么能给出相对路径? 如果我将 excel 文件添加到 qrc 文件中,我可以访问此文件:/temp/temp.xls 但它不起作用。如果我给 c:\user\desktop\temp\temp.xls 那么它可以工作 【参考方案1】:您可以将 excel 文件放在项目内的某个目录中,例如 docs 或其他内容。
设置你的当前目录 QDir::setCurrent(QCoreApplication::applicationDirPath())
您可以访问 doc 文件夹中的文件,例如“docs/anyfile.xls”
如果您将 xls 文件放在资源中,它将捆绑在可执行文件中,并且 Microsoft Office COM 组件将无法访问。
【讨论】:
谢谢。我是那样做的。当我将此项目发布到安装文件时。如何包含这个模板文件? 只需复制 docs 文件夹以及可执行文件所在的二进制文件即可。【参考方案2】:将您的 excel 文件放在项目内的某个目录中,例如模板。 所以你的结构将是
ProjectMainDirectory/
+ - MyResources.qrc
+ - template/
+ - temp.xls
将文件添加为资源。资源文件将如下所示:
<RCC>
<qresource prefix="/Files">
<file>template/temp.xls</file>
</qresource>
</RCC>
现在尝试以":/Files/template/temp.xls
访问该文件。您应该能够访问该文件。
编译时编译器会读取资源文件并将资源文件打包在exe本身中。您不需要将 xls 文件与 exe 单独打包。
希望能解决问题。如果有任何问题,请发表评论。
【讨论】:
谢谢。这将是另一种解决方案。但我听说如果我在 .qrc 文件中添加一个文件,这个文件是只读的。但我想打开这个文件只写。如果不是,我将使用您的解决方案。请回复 是的,正如您所提到的,在 qrc 中添加的文件是只读的。这是因为它们被打包到 exe 本身中。如果您说明您的问题到底是什么,您希望使用 excel 文件实现什么目标,将会更有帮助? 我的程序正在从两个 Excel 表中读取数据。并提取数据,写入一张excel表并保存。我想将所有提取的数据写入模板文件并保存。我的客户想要模板 excel 表必须自动加载。当我发布这个项目时,我必须发布包括这个模板以上是关于qt打开excel名称传递错误的主要内容,如果未能解决你的问题,请参考以下文章
Qt 5.7.1 error: C1083: 无法打开包括文件: “cstddef”: No such file or directory