#include<QAxObject>
修改.pro文件:

1、读Excel
void ReadExcel(const QString filePath,QVariantList& dataList,int s)//读取Excel文件
{
QAxObject *excel = new QAxObject("Excel.Application");
excel->setControl("Excel.Application");
excel->setProperty("Visible", false); // 不显示窗体
excel->setProperty("DisplayAlerts", false); // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示
QAxObject* workbooks = excel->querySubObject("WorkBooks"); //获取工作簿集合
workbooks->dynamicCall("Open(const QString)", filePath); //打开打开已存在的工作簿
QAxObject* workbook = excel->querySubObject("ActiveWorkBook"); //获取当前工作簿
QAxObject* sheet = workbook->querySubObject("WorkSheets(int)", s);//获取工作sheet s
QAxObject* range = sheet->querySubObject("UsedRange"); //获取该sheet的使用范围对象
QVariant var = range->dynamicCall("Value");
delete range;
dataList = var.toList(); //得到表格中的所有数据 所有数据用QVariantList存储
workbooks->dynamicCall("Close()"); //关闭工作簿
excel->dynamicCall("Quit()"); //退出进程
}
2、写Excel
批量写指定sheet:
void WriteExcel(const QString filePath,QString range,QList<QVariant> dataList,int s)
{
QAxObject* excel = new QAxObject("Excel.Application");
excel->setControl("Excel.Application"); // 连接Excel控件
excel->dynamicCall("SetVisible (bool Visible)", "false"); // 不显示窗体
excel->setProperty("DisplayAlerts", false); // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示
QAxObject* workbooks = excel->querySubObject("WorkBooks"); // 获取工作簿集合
QAxObject* workbook = workbooks->querySubObject("Open(const QString&)",filePath);
QAxObject* sheet = workbook->querySubObject("WorkSheets(int)", s);//打开sheet(s)
QAxObject* user_range = sheet->querySubObject("Range(const QString&)", range);//写数据在表格的范围 range形式:A1:D100
if (nullptr == user_range || user_range->isNull()) {
return;
}
user_range->dynamicCall("SetValue(const QVariant&)", QVariant(dataList));
workbook->dynamicCall("Save()"); //保存文件
workbook->dynamicCall("Close (Boolean)", false); // 关闭文件
excel->dynamicCall("Quit(void)"); // 关闭excel
}
单独写指定单元格 :
void WriteExcel(const QString filePath,int row,int col,QString write_in,int sheet)//写入Excel文件
{
QAxObject* excel = new QAxObject("Excel.Application");
excel->setControl("Excel.Application"); // 连接Excel控件
excel->dynamicCall("SetVisible (bool Visible)", "false"); // 不显示窗体
excel->setProperty("DisplayAlerts", false); // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示
QAxObject* workbooks = excel->querySubObject("WorkBooks"); // 获取工作簿集合
QAxObject* workbook = workbooks->querySubObject("Open(const QString&)",filePath);
QAxObject* worksheet = workbook->querySubObject("WorkSheets(int)", sheet);//打开sheet(sheet)
QAxObject* cell = worksheet->querySubObject("Cells(int, int)", row, col);//选择单元格
cell->dynamicCall("SetValue(conts QVariant&)", write_in); // 设置单元格的值
workbook->dynamicCall("Save()"); //保存文件
workbook->dynamicCall("Close(Boolean)", false); //关闭文件
}
3、int转为Excel列号
char intto26char( int dig)
{
int acs = dig - 1 + 'A';
return (char)acs;
}
QString IntColToExcel(int column)//列数转为Excel对应列数
{
int col = column + 1;
int system = 26;
QString digArr;
while (col > 0)
{
int mod = col % system;
if (mod == 0) mod = system;
digArr.append(intto26char(mod));
col = (col - 1) / 26;
}
QString bf;
for (int i =digArr.length()-1; i >= 0; i--)
{
bf.append(digArr[i]);
}
return bf;
}
参考:
https://www.iteye.com/blog/fengpeng-93855
本文介绍了如何在QT中进行Excel的读写操作,包括修改.pro文件以支持相关功能,批量写入指定工作表,以及将整数转换为Excel列号的方法。参考了CSDN上的相关博客资源。

3万+

被折叠的 条评论
为什么被折叠?



