最近在学习Qt,想做个读写卡工具,卡号来自excel,相当于需要加载excel,这里记录一下读写excel的过程。
先上代码:
头文件代码如下:
#ifndef EXCELMANAGER_H
#define EXCELMANAGER_H
#include <QObject>
#include <QList>
struct ExcelRow
{
//卡号码
QString cardNum;
//是否已经使用过了。
bool usedStatus;
};
Q_DECLARE_METATYPE(ExcelRow);
class ExcelManager : public QObject
{
Q_OBJECT
public:
explicit ExcelManager(QObject *parent = nullptr);
public:
QList<ExcelRow> ReadExcel(const QString &filePath);
int RepairExcel(const QString &filePath,QString content,int row);//row 行 column 列
int RepairExcelList(const QString &filePath,QList<QString> contents);
signals:
void signalRefreshProBar(int);
void signalShowProBar(bool);
public slots:
};
#endif // EXCELMANAGER_H
cpp代码如下:
#include "excelmanager.h"
#include <QFileDialog>
#include <QAxObject>
#include <QVariant>
#include <QList>
#include <QDebug>
#define EXCEL_USED "Used" // 卡号
ExcelManager::ExcelManager(QObject *parent) : QObject(parent)
{
}
int ExcelManager::RepairExcel(const QString &filePath,QString content,int row)//row 行 column 列
{
QAxObject excel("Excel.Application"); //加载Excel驱动
excel.setProperty("Visible", false); //不显示Excel界面,如果为true会看到启动的Excel界面
excel.setProperty("DisplayAlerts", false);//不显示任何警告信息
QAxObject* pWorkBooks = excel.querySubObject("WorkBooks");
pWorkBooks->dynamicCall("Open (const QString&)", filePath);//打开指定文
QAxObject* pWorkBook = excel.querySubObject("ActiveWorkBook");
QAxObject* pWorkSheets = pWorkBook->querySubObject("Sheets");//获取工作表
int nSheetCount = pWorkSheets->property("Count").toInt