手头一个石油项目,需要把管柱序列中的工具信息导出到Excel中,遇到的难点是导出图片。现在给出自己的实现例子:
QString filename = QFileDialog::getSaveFileName(this,
tr("保存管柱序列"),"",tr("*.xls")); //选择路径
if(filename.isEmpty())
{
QMessageBox::critical(0, tr("错误"), tr("要保存的文件名为空!"));
return;
}
//建立Excel对象
QAxObject *excel = new QAxObject("Excel.Application");
excel->dynamicCall("SetVisible(bool)", true); //如果为了看自己的程序到底怎样工作,可以设置为true
excel->setProperty("Visible", 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);//获取工作表集合的工作表1,即sheet1
QAxObject * shapes = worksheet->querySubObject("Shapes");
QString picDir=QString("F:\\swpu\\qt\\qt_excel\\tool\\1.png");
shapes->dynamicCall("AddPicture( QString&, bool, bool, double, double, double, double",picDir,true,true,0,0,180,148);
workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filename));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
workbook->dynamicCall("Close()");//关闭工作簿
excel->dynamicCall("Quit()");//关闭excel
delete excel;
自己实验的结果,图片路径似乎只能绝对路径,所以在项目中,用到
QDir::currentPath()
去获得程序的执行路径,然后加上图片的相对路径,从而获得图片的绝对路径。
工程代码,请移步 这里