• Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget


    表格和excel例子如下图所示: 

    一、QTableWidget保存表格数据到Excel文件中

    代码如下:

    (pro文件中添加QT += axcontainer)

    1. #include
    2. void MainWindow::saveTableToExcel() {
    3. QDateTime current_date_time =QDateTime::currentDateTime();
    4. QString excelName = "data_" + current_date_time.toString("yyyy-MM-dd_hh-mm-ss");
    5. QString filePath = QFileDialog::getSaveFileName(this, "Save Data", excelName, "Microsoft Excel 2013(*.xlsx)");
    6. int row = ui->originDataTable->rowCount();
    7. int col = ui->originDataTable->columnCount();
    8. QAxObject* excel = new QAxObject(this);
    9. //excel->setControl("ket.Application");//wps
    10. excel->setControl("Excel.Application"); //Excel
    11. excel->dynamicCall("SetVisible(bool Visible)", false);
    12. excel->setProperty("DisplayAlerts", false);
    13. QAxObject* workbooks = excel->querySubObject("WorkBooks");
    14. workbooks->dynamicCall("Add");
    15. QAxObject* workbook = excel->querySubObject("ActiveWorkBook");
    16. QAxObject* worksheets = workbook->querySubObject("Sheets");
    17. QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1);
    18. for (int i = 0; i < row; i++) {
    19. for (int j = 0; j < col; j++) {
    20. QAxObject* Range = worksheet->querySubObject("Cells(int,int)", i + 1, j + 1);
    21. Range->dynamicCall("SetValue(const QString &)", ui->originDataTable->item(i, j)->text());
    22. }
    23. }
    24. workbook->dynamicCall("SaveAs(const QString &)", QDir::toNativeSeparators(filePath));
    25. if (excel != NULL) {
    26. excel->dynamicCall("Quit()");
    27. delete excel;
    28. excel = NULL;
    29. }
    30. QMessageBox::information(this, QStringLiteral("提示"), "保存成功");
    31. }

    二、读Excel文件内容到QTableWidget表格中

    1. #include
    2. void MainWindow::saveTableToExcel() {
    3. QString strFile = QFileDialog::getOpenFileName(this,QStringLiteral("选择Excel文件"),"","Exel file(*.xls *.xlsx)");
    4. if (strFile.isEmpty()){
    5. return;
    6. }
    7. QAxObject excel("Excel.Application");
    8. excel.setProperty("Visible", false);
    9. QAxObject *work_books = excel.querySubObject("WorkBooks");
    10. //打开指定文件
    11. work_books->dynamicCall("Open (const QString&)", strFile);
    12. QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
    13. QString ExcelName;
    14. static int row_count = 0, column_count = 0;
    15. QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);
    16. QAxObject *used_range = work_sheet->querySubObject("UsedRange");
    17. QAxObject *rows = used_range->querySubObject("Rows");
    18. row_count = rows->property("Count").toInt();
    19. QAxObject *column = used_range->querySubObject("Columns");
    20. column_count = column->property("Count").toInt();
    21. //这里先清空QTableWidget表格数据
    22. ui->originDataTable->clearContents();
    23. ui->setRowCount(0);
    24. for (int i = 1; i <= row_count; i++) {
    25. QStringList dataList;
    26. for (int j = 1; j <= column_count;j++) {
    27. QAxObject *range = work_sheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
    28. QString strVal = range->dynamicCall("Value2()").toString();
    29. dataList << strVal;
    30. }
    31. int row = ui->originDataTable->rowCount();
    32. ui->originDataTable->insertRow(row);
    33. for (int col = 0; col < dataList.size(); ++col) {
    34. QTableWidgetItem *pItem = new QTableWidgetItem(dataList[col]);
    35. ui->originDataTable->setItem(row, col, pItem);
    36. }
    37. }
    38. work_book->dynamicCall("Close(Boolean)", false); //关闭文件
    39. excel.dynamicCall("Quit(void)"); //退出
    40. }

    总结:

    QAxObject读取excel较为方便,不必使用第三方库;缺点是读取excel文件时非常慢,一个内容很少的excel文件读取都需要几秒钟。 用第三方库读取效率会高一些,我用的是xlsx的库,需要的可以在评论区留下自己的邮箱,我将在有空时回复并发到邮箱。

  • 相关阅读:
    【CSS3】CSS3 动画 ③ ( 动画属性 | CSS3 常见动画属性简介 | 动画属性简写方式 | 动画属性简写语法 | 代码示例 )
    RabbitMQ学习总结-基础篇
    函数的凹凸性与拐点
    究竟RPA能做什么?从企业,团队,个人的角度来分析RPA带来的好处
    osg实现三次样条Cardinal曲线
    vuex的辅助函数
    机器视觉工程师为什么要反复调试?
    Git基础
    Xilinx的TestPattern模块编译错误解决方法
    C++——电话号码的字母组合问题
  • 原文地址:https://blog.csdn.net/u011391361/article/details/136314243