直接上代码,注释都有
bool MainWindow::ExcelToCsvFile(const QString &excelFileName, const QString &csvFileName)
{
if (!QFile::exists(excelFileName)){
qDebug() << "excelFileName " << excelFileName << "exist";
return false;
}
/* 当pApplication析构的时候会将其所有相关的子对象都清理,一种作用域指针 */
QScopedPointer<QAxObject> excel(new QAxObject());
/* 连接Excel控件 */
bool ok = excel->setControl("Excel.Application");
if (!ok){
qDebug() << "setControl Excel.Application fail!" ;
return false;
}
/* false表示不显示窗体 */
excel->dynamicCall("SetVisible(bool)", false);
/* 不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示 */
excel->setProperty("DisplayAlerts", false);
/* 获取工作簿集合(对象) */
QAxObject *workbooks = excel->querySubObject("Workbooks");
if (workbooks == nullptr){
qDebug() << "get workbooks fail!" ;
return false;
}
/* 获取当前工作簿 */
QAxObject *workbook = workbooks->querySubObject("Open(const QString &)", excelFileName); // 打开一个Excel文件
if (workbook == nullptr){
qDebug() << "get workbook fail!" ;
return false;
}
/* 获取工作表集合的工作表 */
QAxObject *worksheets = workbook->querySubObject("WorkSheets");
if (worksheets == nullptr){
qDebug() << "get worksheets fail!" ;
return false;
}
/* 获取工作表集合的工作表1,即sheet1 */
QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);
if (worksheet == nullptr){
qDebug() << "get worksheet fail!" ;
return false;
}
/* 另存为文件, 3: txt文件(空格分隔)| 6: csv文件(逗号分隔)*/
worksheet->dynamicCall("SaveAs(const QString&, int)", QDir::toNativeSeparators(csvFileName), 6);
/* 关闭工作簿*/
workbook->dynamicCall("Close()");
excel->dynamicCall("Quit()");
qDebug() << "save as success";
return true;
}