qt之读写excel

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35057840/article/details/54318443

qt版本是qt5.5, 需先在.pro文件下添加axcontainer组件

QT       += core gui axcontainer

其次,读写excel一般流程:

    // step1:连接控件
    QAxObject* excel = new QAxObject(this);
    excel->setControl("Excel.Application");  // 连接Excel控件
    excel->dynamicCall("SetVisible (bool Visible)", "false"); // 不显示窗体
    excel->setProperty("DisplayAlerts", false);  // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示

    // step2: 打开工作簿
    QAxObject* workbooks = excel->querySubObject("WorkBooks"); // 获取工作簿集合
    // 打开工作簿方式一:新建
//    workbooks->dynamicCall("Add"); // 新建一个工作簿
//    QAxObject* workbook = excel->querySubObject("ActiveWorkBook"); // 获取当前工作簿
    // 打开工作簿方式二:打开现成
    QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", ui->lineEdit->text()); // 从控件lineEdit获取文件名

    // step3: 打开sheet
    QAxObject* worksheet = workbook->querySubObject("WorkSheets(int)", 1); // 获取工作表集合的工作表1, 即sheet1


    // step4: 获取行数,列数
    QAxObject* usedrange = worksheet->querySubObject("UsedRange"); // sheet范围
    int intRowStart = usedrange->property("Row").toInt(); // 起始行数
    int intColStart = usedrange->property("Column").toInt();  // 起始列数

    QAxObject *rows, *columns;
    rows = usedrange->querySubObject("Rows");  // 行
    columns = usedrange->querySubObject("Columns");  // 列

    int intRow = rows->property("Count").toInt(); // 行数
    int intCol = columns->property("Count").toInt();  // 列数

    // step5: 读和写
    // 读方式一(坐标):
    QAxObject* cell = worksheet->querySubObject("Cells(int, int)", i, j);  //获单元格值
    qDebug() << i << j << cell->dynamicCall("Value2()").toString();
    // 读方式二(行列名称):
    QString X = "A" + QString::number(i + 1); //设置要操作的单元格,A1
    QAxObject* cellX = worksheet->querySubObject("Range(QVariant, QVariant)", X); //获取单元格
    qDebug() << cellX->dynamicCall("Value2()").toString();

    // 写方式:
    cellX->dynamicCall("SetValue(conts QVariant&)", 100); // 设置单元格的值

    // step6: 保存文件
    // 方式一:保存当前文件
    workbook->dynamicCall("Save()");  //保存文件
    workbook->dynamicCall("Close(Boolean)", false);  //关闭文件
    // 方式二:另存为
    QString fileName = QFileDialog::getSaveFileName(this, tr("保存文件"), (注:指定路径), tr("EXCEL(*.xlsx)"));
    workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName)); //保存到filepath
    // 注意一定要用QDir::toNativeSeparators, 将路径中的"/"转换为"\", 不然一定保存不了
    workbook->dynamicCall("Close (Boolean)", false);  //关闭文件
设置单元格属性:

    QString merge_cell("A1:Z10"); // 设置A1至Z10范围内的单元格的属性
    QAxObject *merge_range = worksheet->querySubObject("Range(const QString&)", merge_cell);
    merge_range->setProperty("HorizontalAlignment", -4108); // 水平居中
    merge_range->setProperty("VerticalAlignment", -4108);  // 垂直居中
    merge_range->setProperty("NumberFormatLocal", "@");  // 设置为文本





阅读更多
换一批

没有更多推荐了,返回首页