手頭一個石油項目,需要把管柱序列中的工具信息導出到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()
去獲得程序的執行路徑,然後加上圖片的相對路徑,從而獲得圖片的絕對路徑。
工程代碼,請移步這裏