一、使用QAxObject
1.环境配置
首先在Qt Modules中引入axserver;axcontainer;
代码中包含相关头文件#include <QAxObject>
头文件
public:
void OpenExcel(const QString& strExcelPath);
void AddNewExcel();
void SaveAndClose(const QString& strExcelPath);
int GetRowsCount();
QString GetCell(int row, int column);
QString GetCell(QString numer);
void SetCell(int row, int column, QString value);
void SetCell(QString number, QString value);
void SetCellColor(int row, int column, QColor color);
private:
QAxObject* m_pExcel;
QAxObject* m_pWorkBooks;
QAxObject* m_pWorkBook;
QAxObject* m_pWorkSheets;
QAxObject* m_pWorkSheet;
cpp文件
// 打开已有的excel
void MainWindow::OpenExcel(const QString & strExcelPath)
{
// 连接excel 控件
m_pExcel = new QAxObject("Excel.Application");
// m_pExcel->setControl("Excel.Applicatio");
// 设置操作excel时不打开excel窗体
m_pExcel->dynamicCall("SetVisible(bool Visible)", false);
// 设置不显示任何警告信息
m_pExcel->setProperty("DisplayAlert", false);
// 获取当前工作簿
m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");
// 打开指定工作簿
m_pWorkBook = m_pWorkBooks->querySubObject("Open(const QString&)", strExcelPath);
if (m_pWorkBook)
{
qDebug() << "Open Excel Success!";
}
// 获取sheets
m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");
// 获取某个sheet
m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)", 1);
}
// 创建新的Excel
void MainWindow::AddNewExcel()
{
// 获取当前工作簿
m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");
m_pWorkBooks->dynamicCall("Add");
m_pWorkBook = m_pExcel->querySubObject("ActiveWorkBook");
m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");
m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)", 1);
}
// 保存并关闭Excel
void MainWindow::SaveAndClose(const QString& strExcelPath)
{
// 保存文件,一定要将路径中的'/'转为'\\',前者只能被Qt识别
m_pWorkBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(strExcelPath));
// 关闭文件
m_pWorkBook->dynamicCall("Close(Boolean)", false);
// 关闭excel
m_pExcel->dynamicCall("Quit()");
delete m_pExcel;
m_pExcel = nullptr;
}
// 获取行数
int MainWindow::GetRowsCount()
{
int iRows = 0;
QAxObject* pRows = m_pWorkSheet->querySubObject("Rows");
iRows = pRows->property("Count").toInt();
return iRows;
}
// 获取单元格内容,行号+列号
QString MainWindow::GetCell(int row, int column)
{
QAxObject* pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);
return pCell->property("Value").toString();
}
// 获取单元格内容,单元格标号如: A1,C5
QString MainWindow::GetCell(QString number)
{
QAxObject* pCell = m_pWorkSheet->querySubObject("Range(QString)", number);
return pCell->property("Value").toString();
}
// 设置单元格内容,行号+列号
void MainWindow::SetCell(int row, int column, QString value)
{
QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(int, int)", row, column);
pCell->setProperty("Value", value);
}
// 设置单元格内容,单元格标号如: A1,C5
void MainWindow::SetCell(QString number, QString value)
{
QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(QString)", number);
pCell->setProperty("Value", value);
}
// 设置单元格颜色的方式与设置值的方式一样,都是先获取到单元格,再设置属性
void MainWindow::SetCellColor(int row, int column, QColor color)
{
QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(int, int)", row, column);
QAxObject* pInterior = pCell->querySubObject("Interior");
pInterior->setProperty("Color", color);
}
二、使用QXlsx
推荐两个网站
QT 使用第三方库QtXlsx操作Excel表
Qt Xlsx使用教程
生成动态库的资源文件
QXlsx模块源文件及编译后的文件
复制编译后的文件到本地路径,参考网址:毓树麟风——Qt5下Qxlsx模块安装及使用