1. 程式人生 > >VC程式碼解讀,新建或者開啟EXCEL檔案

VC程式碼解讀,新建或者開啟EXCEL檔案

之前做操作EXCEL檔案也有好幾次了,但是每次都是從網文上覆制貼上,從沒有自己仔細研究過,所以遇到問題也只從網上尋找答案,一點自己的見解也沒有,意識到這種方式不可取,才有了這篇文章。大神飄過即可,希望對於像我一樣的菜鳥們有所幫助

//新建一個Excel表格,並對其進行編輯,宣告使用的各變數
	CApplication _app;//指向的是EXCEL程式
	CWorkbooks workbooks;//所有workbook的集合,或者指的是所有excel檔案的集合?
	CWorkbook workbook;//指的是某一個excel檔案,或者說該檔案中所有worksheet的集合	
	CWorksheets worksheets;//指的是某一個檔案中worksheet可控制的集合
	CWorksheet worksheet;//指的是某一個worksheet,或者說該worksheet中所有單元格的集合
	CRange range;//某一個worksheet中可控制的單元格的集合
	LPDISPATCH lpDisp;
	COleVariant vResult((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
	COleVariant valTemp((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
	//進行預備工作,該函式的工作原理是
	//查詢登錄檔中的HKEY_CLASSES_ROOT/CLSID 各項中的ProgID是否和Excel.Application匹配,匹配則查詢該目錄下的LocalServer,其中包含了excel的exe檔案目錄,進行啟動
	if(!_app.CreateDispatch(L"Excel.Application"))
	{
		MessageBox(L"啟動excel程式失敗",L"提示",0);
		return;
	}
	//獲得所有工作表
	workbooks.AttachDispatch(_app.get_Workbooks());
	//新建工作表,必須指出的是valTemp必須是賦值之後的!!!!,否則不能通過
	workbook.AttachDispatch(workbooks.Add(valTemp));
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//       若是開啟已有檔案                                                                               ///////
	//       lpDisp = workbooks.Open(L"D:\\3.xlsx",valTemp, valTemp, valTemp, valTemp, valTemp,valTemp,     ///////
	//       valTemp, valTemp, valTemp, valTemp,valTemp, valTemp, valTemp,valTemp);                        ////////
	//得到Workbook                                                                                          ///////
	//workbook.AttachDispatch(lpDisp);                                                                      ///////
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////

	//獲得該工作表的worksheets
	worksheets.AttachDispatch(workbook.get_Worksheets());
	//獲得第二個worksheet!!!!!!!!!!!!!!!!!!!!!!!!!!
	worksheet.AttachDispatch(worksheets.get_Item(COleVariant((long)2)));
	//初始化range,使之指向該worksheet的範圍內
	range.AttachDispatch(worksheet.get_Cells());
	range.AttachDispatch(range.get_Item(COleVariant((long)1),			COleVariant((long)2)).pdispVal);		
	range.put_Value2(COleVariant(L"測試"));

	//將在記憶體中建立的excel檔案儲存到磁碟上,或者說將從磁碟上讀取到的檔案,處理之後儲存為其他的檔案
	workbook.SaveAs(COleVariant(L"D:\\temp.xlsx"),vResult,vResult,vResult,vResult,vResult,0,vResult,vResult,vResult,vResult,vResult);
	range.ReleaseDispatch();
	worksheet.ReleaseDispatch();
	worksheets.ReleaseDispatch();	
	workbook.ReleaseDispatch();
	workbooks.ReleaseDispatch();	
	//必須是這種順序,程式執行後,EXCEL程序才能被關閉
	_app.Quit();
	_app.ReleaseDispatch();

PS:經過這次的整理,自己有了較大的提高,至少知道了,每個語句的作用,當然註釋中有的是自己的理解,水平有限,希望大神指正!