Qt篇——QTableWidget保存表格數據到Excel文件中,讀Excel內容到QTableWidget

表格和excel例子如下圖所示:?

一、QTableWidget保存表格數據到Excel文件中

代碼如下:

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

#include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time =QDateTime::currentDateTime();QString excelName = "data_" + current_date_time.toString("yyyy-MM-dd_hh-mm-ss");QString filePath = QFileDialog::getSaveFileName(this, "Save Data", excelName, "Microsoft Excel 2013(*.xlsx)");int row = ui->originDataTable->rowCount();int col = ui->originDataTable->columnCount();QAxObject* excel = new QAxObject(this);//excel->setControl("ket.Application");//wpsexcel->setControl("Excel.Application"); //Excelexcel->dynamicCall("SetVisible(bool Visible)", false);excel->setProperty("DisplayAlerts", false);QAxObject* workbooks = excel->querySubObject("WorkBooks");workbooks->dynamicCall("Add");QAxObject* workbook = excel->querySubObject("ActiveWorkBook");QAxObject* worksheets = workbook->querySubObject("Sheets");QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1);for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {QAxObject* Range = worksheet->querySubObject("Cells(int,int)", i + 1, j + 1);Range->dynamicCall("SetValue(const QString &)", ui->originDataTable->item(i, j)->text());}}workbook->dynamicCall("SaveAs(const QString &)", QDir::toNativeSeparators(filePath));if (excel != NULL) {excel->dynamicCall("Quit()");delete excel;excel = NULL;}QMessageBox::information(this, QStringLiteral("提示"), "保存成功");
}

二、讀Excel文件內容到QTableWidget表格中

#include <QAxObject>void MainWindow::saveTableToExcel() {QString strFile = QFileDialog::getOpenFileName(this,QStringLiteral("選擇Excel文件"),"","Exel file(*.xls *.xlsx)");if (strFile.isEmpty()){return;}QAxObject excel("Excel.Application");excel.setProperty("Visible", false);QAxObject *work_books = excel.querySubObject("WorkBooks");//打開指定文件work_books->dynamicCall("Open (const QString&)", strFile);QAxObject *work_book = excel.querySubObject("ActiveWorkBook");QString ExcelName;static int row_count = 0, column_count = 0;QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);QAxObject *used_range = work_sheet->querySubObject("UsedRange");QAxObject *rows = used_range->querySubObject("Rows");row_count = rows->property("Count").toInt();QAxObject *column = used_range->querySubObject("Columns");column_count = column->property("Count").toInt();//這里先清空QTableWidget表格數據ui->originDataTable->clearContents();ui->setRowCount(0);for (int i = 1; i <= row_count; i++) {QStringList dataList;for (int j = 1; j <= column_count;j++) {QAxObject *range = work_sheet->querySubObject("Cells(int,int)",i,j); //獲取cell的值QString strVal = range->dynamicCall("Value2()").toString();dataList << strVal;}int row = ui->originDataTable->rowCount();ui->originDataTable->insertRow(row);for (int col = 0; col < dataList.size(); ++col) {QTableWidgetItem *pItem = new QTableWidgetItem(dataList[col]);ui->originDataTable->setItem(row, col, pItem);}}work_book->dynamicCall("Close(Boolean)", false);  //關閉文件excel.dynamicCall("Quit(void)");  //退出
}

總結:

QAxObject讀取excel較為方便,不必使用第三方庫;缺點是讀取excel文件時非常慢,一個內容很少的excel文件讀取都需要幾秒鐘。 用第三方庫讀取效率會高一些,我用的是xlsx的庫,需要的可以在評論區留下自己的郵箱,我將在有空時回復并發到郵箱。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

六、MQTT源碼簡單瀏覽

1、MQTT程序分層 1.1、MQTT客戶端工作流程 (1)連接MQTT服務器。 (2)客戶端向服務器發送訂閱主題。 (3)客戶端等待MQTT的消息。 (4)客戶端向服務器發送消息。 2.2、MQTT程序結構 APP層 while循環或一個進程中&#xff1a;等待消息&#xff0c;處理消息&#xff1b; 發送消…

[法規規劃|方案實操]數據資產入表,城投將獲融資新渠道

2023年8月&#xff0c;財政部發布了《企業數據資源相關會計處理暫行規定》&#xff0c;并從2024年1月1日開始實施&#xff0c;標志著數據資產正式納入企業的資產負債表。這一舉措被視為數據資產從理論走向實踐的重大一步。 數據資產入表對城投運營模式的影響 隨著全球經濟格局…

Vue3速成

文章目錄 day 11. 創建vue3工程3. 響應式數據4. 計算屬性 day 25. watch 監視6. watchEffect7. 標簽的ref屬性8. 回顧TS中的接口_泛型_自定義類型 day 1 1. 創建vue3工程 相關代碼如下&#xff1a; ## 創建vue工程 npm create vuelastest## 安裝node_modules npm install //…

JSON 文件里的 “$schema” 是干什么用的?

最近我在做一些前端項目&#xff0c;我發現有的配置文件&#xff0c;比如 .prettierrc.json 或者 tsconfig.json 里面都會看到一個 $schema 字段&#xff0c;有點好奇&#xff0c;就查了一下。 什么是 JSON Schema JSON Schema是一種基于JSON (JavaScript Object Notation) 的…

【Leetcode】2369. 檢查數組是否存在有效劃分

文章目錄 題目思路代碼結果 題目 題目鏈接 給你一個下標從 0 開始的整數數組 nums &#xff0c;你必須將數組劃分為一個或多個 連續 子數組。 如果獲得的這些子數組中每個都能滿足下述條件 之一 &#xff0c;則可以稱其為數組的一種 有效 劃分&#xff1a; 子數組 恰 由 2 個…

MATLAB算法實戰應用案例精講-【圖像處理】三維重建(最終篇)

目錄 前言 相機定標和三維重建 針孔相機模型和變形 三維成像 一、機器視覺系統組成

大數據智能化-長視頻領域

隨著數字化時代的到來&#xff0c;長視頻領域的發展迎來了新的機遇和挑戰。在這一背景下&#xff0c;大數據智能化技術的應用成為長視頻行業提升用戶體驗、優化運營管理的重要手段之一。本文將從優愛騰3大長視頻背景需求出發&#xff0c;分析靜態資源CDN、視頻文件存儲與分發、…

網絡安全、信息安全、計算機安全,有何區別?

這三個概念都存在&#xff0c;一般人可能會混為一談。 究竟它們之間是什么關系&#xff1f;并列&#xff1f;交叉&#xff1f; 可能從廣義上來說它們都可以用來表示安全security這樣一個籠統的概念。 但如果從狹義上理解&#xff0c;它們應該是有區別的&#xff0c;區別在哪呢&…

力扣hot100題解(python版36-40題)

36、二叉樹的中序遍歷 給定一個二叉樹的根節點 root &#xff0c;返回 它的 *中序 遍歷* 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]示例 3&#xff1a; 輸入&am…

tcping實用小工具

Tcping實用小工具命令詳解 一、tcping介紹 tcping&#xff1a;tcping命令基于tcp協議監控&#xff0c;可以從較低級別的協議獲得簡單的&#xff0c;可能不可靠的數據報服務。 原則上&#xff0c;TCP應該能夠在從容硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。 …

【機器學習基礎】層次聚類-BIRCH聚類

&#x1f680;個人主頁&#xff1a;為夢而生~ 關注我一起學習吧&#xff01; &#x1f4a1;專欄&#xff1a;機器學習 歡迎訂閱&#xff01;相對完整的機器學習基礎教學&#xff01; ?特別提醒&#xff1a;針對機器學習&#xff0c;特別開始專欄&#xff1a;機器學習python實戰…

企業微信私有部署:實現高效溝通與信息安全

隨著移動互聯網的快速發展&#xff0c;企業微信作為一種高效、便捷的通訊工具&#xff0c;已經成為了眾多企業的首選。然而&#xff0c;對于一些對信息安全有特殊要求的大型企業而言&#xff0c;使用公有版企業微信并不能滿足其安全需求。因此&#xff0c;企業微信私有部署應運…

matplotlib.animation 3d姿態動畫

目錄 演示效果&#xff1a; 演示代碼&#xff1a; 保存為gif 演示效果&#xff1a; 演示代碼&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定義人體關鍵點…

【c++入門】純粹的五位偶數

說明 純粹偶數指的是一個數的各個位都是偶數的數&#xff0c;比如&#xff1a;24686&#xff1b;請編程求出10000~n中&#xff0c;所有的五位的純粹偶數有多少個&#xff1f; 輸入數據 一個整數n&#xff08;n為一個5位的整數&#xff09; 輸出數據 一個整數&#xff0c;代…

網絡防御第6次作業

防病毒網關 按照傳播方式分類 病毒 病毒是一種基于硬件和操作系統的程序&#xff0c;具有感染和破壞能力&#xff0c;這與病毒程序的結構有關。病毒攻擊的宿主程序是病毒的棲身地&#xff0c;它是病毒傳播的目的地&#xff0c;又是下一次感染的出發點。計算機病毒感染的一般過…

Java基礎 - Stream 流:Stream API的中間操作

在上一篇博客中&#xff0c;我介紹了構建 Stream 流的多種方式&#xff0c;以及 Stream 流的特點和優勢。如果你還沒有閱讀&#xff0c;你可以點擊這里查看。 Java基礎 - Stream 流&#xff1a;構建流的多種方式 在這篇博客中&#xff0c;我將探索 Stream API 的中間操作&…

動態規劃(算法競賽、藍橋杯)--分組背包DP

1、B站視頻鏈接&#xff1a;E16 背包DP 分組背包_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i組第j個物品的體積 s[i]:第i組物品的個數 int f[N][N]; // f[i,j]:前i組物品&#xff0c;能放…

學習JavaEE的日子 Day21 枚舉

Day21 1.枚舉的引入 需求&#xff1a;編寫季節類&#xff08;Season&#xff09;&#xff0c;該類只有四個對象&#xff08;spring&#xff0c;summer&#xff0c;autumn&#xff0c;winter&#xff09; 概念&#xff1a;枚舉&#xff08;enum&#xff09;全稱為 enumeration&…

基帶信號處理設計原理圖:2-基于6U VPX的雙TMS320C6678+Xilinx FPGA K7 XC7K420T的圖像信號處理板

基于6U VPX的雙TMS320C6678Xilinx FPGA K7 XC7K420T的圖像信號處理板 綜合圖像處理硬件平臺包括圖像信號處理板2塊&#xff0c;視頻處理板1塊&#xff0c;主控板1塊&#xff0c;電源板1塊&#xff0c;VPX背板1塊。 一、板卡概述 圖像信號處理板包括2片TI 多核DSP處理…

Linux進程管理:(二)進程調度原語

文章說明&#xff1a; Linux內核版本&#xff1a;5.0 架構&#xff1a;ARM64 參考資料及圖片來源&#xff1a;《奔跑吧Linux內核》 Linux 5.0內核源碼注釋倉庫地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 進程調度的概念比較簡單&#xff0c…