找回密码
 立即注册
收起左侧

QT creator 4.2 EXCEL问题

10
回复
9851
查看
[复制链接]
累计签到:49 天
连续签到:1 天
来源: 2017-5-9 10:49:49 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 星辰hua 于 2017-5-9 10:49 编辑

大神们,我在调试操作EXCEL时遇到一个问题,在我的电脑上运行正常,在其它电脑一运行就挂掉;
和其它电脑的区别就是我的是office2010、其它的是2007;
我在其它电脑安装了QT来调试,运行时提示 没有注册类, 不知如何解决,请指教

代码如下:

QAxObject excel("Excel.Application");   
excel.setProperty("Visible", false);   
QAxObject
*work_books = excel.querySubObject("WorkBooks");   
work_books->dynamicCall("Add(void)");   
QAxObject
*workbook = excel.querySubObject("ActiveWorkBook");//获取当前工作簿   
QAxObject
*worksheets = workbook->querySubObject("Sheets");//获取工作表集合   
QAxObject
*worksheet = worksheets->querySubObject("Item(int)", 1);//获取工作表集合的工作表1,即sheet1

回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2017-5-9 14:19:34 显示全部楼层
应该是依赖库没有没有拷贝完全
回复

使用道具 举报

累计签到:49 天
连续签到:1 天
2017-5-9 14:38:34 显示全部楼层
本帖最后由 星辰hua 于 2017-5-9 14:40 编辑
wdmxtk002 发表于 2017-5-9 14:19
应该是依赖库没有没有拷贝完全

拷全,后面我都直接在用不了的电脑上安装QT了, 然后调试运行,提示没有注册类;
用不了的电脑 EXCEL是2007 ,现在装了2010后运行正常, 这两版操作不一样吗,不会吧?

点评

不光是qt自身的库,还有各种vs的库,如果你调试程序电脑上没有的话也不行。。。  详情 回复 发表于 2017-5-10 09:02
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2017-5-10 08:42:36 显示全部楼层
插眼~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2017-5-10 09:02:38 显示全部楼层
星辰hua 发表于 2017-5-9 14:38
拷全,后面我都直接在用不了的电脑上安装QT了, 然后调试运行,提示没有注册类;
用不了的电脑 EXCEL是200 ...

不光是qt自身的库,还有各种vs的库,如果你调试程序电脑上没有的话也不行。。。
回复

使用道具 举报

累计签到:45 天
连续签到:1 天
2017-5-10 15:34:11 显示全部楼层
我最近也在操作EXcel 遇到了坑,能不能把你的cpp代码发我看看,谢谢了
回复

使用道具 举报

累计签到:49 天
连续签到:1 天
2017-5-11 09:21:21 显示全部楼层
jsjshhd 发表于 2017-5-10 15:34
我最近也在操作EXcel 遇到了坑,能不能把你的cpp代码发我看看,谢谢了

如附件,我是将十六进制文件转成EXCEL。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:45 天
连续签到:1 天
2017-5-11 15:17:34 显示全部楼层
星辰hua 发表于 2017-5-11 09:21
如附件,我是将十六进制文件转成EXCEL。

谢谢了。。。。。。。。。
回复

使用道具 举报

累计签到:45 天
连续签到:1 天
2017-5-11 16:01:08 显示全部楼层
星辰hua 发表于 2017-5-11 09:21
如附件,我是将十六进制文件转成EXCEL。

#include "mainwindow.h"
#include <QAxObject>
#include <QmessageBox>
#include <QDebug>
#include <QFile>
#include <QDir>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
        ui.setupUi(this);
        connect(ui.ImportPushButton, SIGNAL(clicked()), this,
                    SLOT(ImportExcel()));
    connect(ui.ExportPushButton, SIGNAL(clicked()), this,
                    SLOT(ExportExcel()));
}

MainWindow::~MainWindow()
{
//excel ,workbooks ,workbook ,worksheets ;excel ,workbook ,workbooks ,worksheet ,usedrange ,rows ,cloumns ,cell
}
void MainWindow::ImportExcel(){
        QString FileName = QFileDialog::getOpenFileName(this, tr("Import XLS file"),
                        tr("."), tr("XLSX File(*.xlsx)"));
        if(!FileName.isEmpty()){
                QFile file(FileName);
                if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){
                        QMessageBox::warning(this,tr("Read File"),tr("Cannot Import file:\n%1").arg(FileName));
                        return;
}
        QAxObject excel("Excel.Application");
        excel.setProperty("Visible",false);
        QAxObject *workbooks=excel.querySubObject("WorkBooks");
        workbooks->dynamicCall("Add(void)");
        QAxObject *workbook=excel.querySubObject("ActiveWorkBook");
        QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);
//    workbooks->dynamicCall("Open(const QString&)",FileName);

    QAxObject * usedrange = worksheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
    QAxObject * rows = usedrange->querySubObject("Rows");
    QAxObject * columns = usedrange->querySubObject("Columns");


    int intRowStart = usedrange->property("Row").toInt();
    int intColStart = usedrange->property("Column").toInt();
    int intCols = columns->property("Count").toInt();
    int intRows = rows->property("Count").toInt();
    QString str;

    ui.tableWidget->setRowCount(intRows);
    ui.tableWidget->setColumnCount(intCols);

    for(int i=intRowStart;i <intRowStart + intRows;i++){
    for(int j=intColStart;j <intColStart + intCols;j++){
    QAxObject * cell = worksheet->querySubObject("Cells(int,int)", i,j ); //获取单元格
    str = cell->property("Value").toString();
    if(cell->property("Value").type()==QVariant:ouble){
    qDebug()<<QString::number(cell->property("Value").toDouble(),'f',0);
}
    else if(cell->property("Value").type()==QVariant::String){
    qDebug()<<str;
}
    QTableWidgetItem *item = new QTableWidgetItem(str);
    ui.tableWidget->setItem(i - intRowStart, j - intColStart, item);
}
}
    workbook->dynamicCall("Close (Boolean)", false);
    excel.dynamicCall("Quit (void)");
}

}

void MainWindow::ExportExcel(){

}
回复

使用道具 举报

累计签到:45 天
连续签到:1 天
2017-5-11 16:02:31 显示全部楼层
星辰hua 发表于 2017-5-11 09:21
如附件,我是将十六进制文件转成EXCEL。

麻烦你看下我这段代码有什么问题没有,我总是不能得到我想要的结果
回复

使用道具 举报

累计签到:45 天
连续签到:1 天
2017-5-12 12:02:41 显示全部楼层
我问题解决了谢谢。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了