今天幫朋友弄了一個小的程式,能夠把Excel中資料進行整理,並且顯示出來,c++可以直接連接Excel。串連語句為:
CString strID;<br />CString sItem1;<br />CString sItem2;<br />CDatabase database;<br />CString sSql;<br />CString sDriver;<br />CString sDsn;</p><p>// 檢索是否安裝有Excel驅動 "Microsoft Excel Driver (*.xls)"<br />sDriver = GetExcelDriver();<br />if (sDriver.IsEmpty())<br />{<br />// 沒有發現Excel驅動<br />AfxMessageBox("沒有安裝Excel驅動!");<br />return ;<br />}</p><p>// 建立進行存取的字串<br />sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, m_filepath);</p><p>TRY<br />{<br />// 開啟資料庫(既Excel檔案)<br />database.Open(NULL, false, false, sDsn);</p><p>CRecordset recset(&database);<br />//CRecordset rs(&database);<br />// 設定讀取的查詢語句.<br />sSql = "SELECT 樣本代碼,股票代號 FROM [sheet1$]"; </p><p>// 執行查詢語句<br />recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);<br />m_list.DeleteAllItems();<br />while(!recset.IsEOF()){</p><p>recset.GetFieldValue("樣本代碼",sItem1);<br />recset.GetFieldValue("股票代號",sItem2);</p><p>m_list.InsertItem(i,"");<br />strID.Format("%d",i);<br />m_list.SetItemText(i,0,strID);<br />m_list.SetItemText(i,1,sItem1);<br />m_list.SetItemText(i,2,sItem2);
在Excel表格裡取出數字,在MFC list Control控制項中顯示出來,在這裡用到了一個GetExcelDriver函數:
CString CgupiaoDlg::GetExcelDriver()<br />{<br />char szBuf[2001];<br />WORD cbBufMax = 2000;<br />WORD cbBufOut;<br />char *pszBuf = szBuf;<br />CString sDriver;</p><p>// 擷取已安裝驅動的名稱(涵數在odbcinst.h裡)<br />if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))<br />//AfxMessageBox("沒有安裝驅動!");<br />return "";</p><p>// 檢索已安裝的驅動是否有Excel...<br />do<br />{<br />if (strstr(pszBuf, "Excel") != 0)<br />{<br />//發現 !<br />sDriver = CString(pszBuf);<br />break;<br />}<br />pszBuf = strchr(pszBuf, '/0') + 1;<br />}<br />while (pszBuf[1] != '/0');</p><p>return sDriver;<br />}
這些就是基本的操作,在做完這些之後,我後來才發現一些高手已經把操作串連Excel封裝成類了,如果要下載,請到下面的地址進行下載
http://www.codeproject.com/KB/database/cspreadsheet.aspx,這個是用ODBC進行串連的,
還有個用ADO 連線的,速度更快http://www.codeproject.com/KB/office/BasicExcel.aspx。