VC操作Excel文件保存問(wèn)題_第1頁(yè)
VC操作Excel文件保存問(wèn)題_第2頁(yè)
VC操作Excel文件保存問(wèn)題_第3頁(yè)
VC操作Excel文件保存問(wèn)題_第4頁(yè)
VC操作Excel文件保存問(wèn)題_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VC操作Excel文件保存問(wèn)題用VC對(duì)Excel文件進(jìn)行寫操作后,在程序結(jié)束前需要對(duì)一些對(duì)象進(jìn)行收尾工作,如調(diào)用_Workbook:Save()方法(該方法是Microsoft提供的供VC調(diào)用的對(duì)Excel文件操作的標(biāo)準(zhǔn)方法,在文件excel9.cpp或excel.cpp中定義)保存文件。問(wèn)題就出現(xiàn)在這里,若選取要保存的Excel文件以前不存在則程序創(chuàng)建一個(gè)同名的空Excel文件,對(duì)Excel表的操作實(shí)際是對(duì)其同名副本的操作,Save()方法會(huì)觸發(fā)一個(gè)"另存為"的對(duì)話框,需要覆蓋原來(lái)同名的空Excel文件,否則寫入Excel的數(shù)據(jù)會(huì)丟失。若選取的Excel文件已經(jīng)存在,則調(diào)

2、用Save()方法不會(huì)觸發(fā)"另存為"對(duì)話框,系統(tǒng)會(huì)自動(dòng)保存寫到Excel中的數(shù)據(jù)。需要說(shuō)明的是,在調(diào)用Save()前,已經(jīng)調(diào)用過(guò)SetAlertBeforeOverwriting(FALSE)和SetDisplayAlerts(FALSE)關(guān)掉一些警告窗口了。若調(diào)用SaveAs()方法,雖不會(huì)觸發(fā)"另存為"對(duì)話框,但會(huì)出拋出“找不到成員”的錯(cuò)誤,這時(shí)保存寫好的Excel文件后并重新打開(kāi)發(fā)現(xiàn)數(shù)據(jù)還是丟失。想盡所有辦法,可總無(wú)法去掉那個(gè)討厭的"另存為"對(duì)話框,請(qǐng)各位大蝦幫忙。多謝了!SaveAs()

3、是excelapp的方法嗎。xlApp.ActiveWorkbook.SaveAs"C:excel.xlsxlApp.Quit我的沒(méi)有問(wèn)題。如今Excel是越來(lái)越重要了,在我們自己開(kāi)發(fā)的程序中不免要和Excel打交道了。利用Automation技術(shù),我們可以在不去了解數(shù)據(jù)庫(kù)的情況下玩轉(zhuǎn)Excel,而且你會(huì)發(fā)現(xiàn)一切竟如此輕松!好了,咱們開(kāi)始吧,我不喜歡用長(zhǎng)篇累牘的代碼來(lái)故弄玄虛,所以下面的代碼都是切中要害的片段,總體上是個(gè)連貫的過(guò)程,包括啟動(dòng)Excel,讀取數(shù)據(jù),寫入數(shù)據(jù),以及最后的關(guān)閉Excel,其中還包括了很多人感興趣的合并單元格的處理。特別說(shuō)明以下代碼需要MFC的支持,而且工程中

4、還要包含EXCEL2000的定義文件:EXCEL9.H,EXCEL9.CPP*/*/變量定義_Applicationapp;Workbooksbooks;_Workbookbook;Worksheetssheets;_Worksheetsheet;Rangerange;RangeiCell;LPDISPATCHlpDisp;COleVariantvResult;COleVariantcovTrue(short)TRUE),covFalse(short)FALSE),covOptional(long)DISP_E_PARAMNOTFOUND,VT_ERROR);/*/初始化COM的動(dòng)態(tài)連接庫(kù)if

5、(!AfxOleInit()AfxMessageBox("無(wú)法初始化COM的動(dòng)態(tài)連接庫(kù)!");return;/*/創(chuàng)建Excel2000服務(wù)器(啟動(dòng)Excel)if(!app.CreateDispatch("Excel.Application")AfxMessageBox("無(wú)法啟動(dòng)Excel服務(wù)器!");return;app.SetVisible(TRUE);/使Excel可見(jiàn)app.SetUserControl(TRUE);/允許其它用戶控制Excel/*/打開(kāi)c:1.xlsbooks.AttachDispatch(app.Get

6、Workbooks();lpDisp=books.Open("C:1.xls",covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);/*/得到Workbookbook.AttachDispatch(lpDisp);/*/得到Worksheetssheets.AttachDispatch(book.GetWorksheets();/*/得到當(dāng)

7、前活躍sheet/如果有單元格正處于編輯狀態(tài)中,此操作不能返回,會(huì)一直等待lpDisp=book.GetActiveSheet();sheet.AttachDispatch(lpDisp);*/讀取已經(jīng)使用區(qū)域的信息,包括已經(jīng)使用的行數(shù)、列數(shù)、起始行、起始列RangeusedRange;usedRange.AttachDispatch(sheet.GetUsedRange();range.AttachDispatch(usedRange.GetRows();/longiRowNum=range.GetCount();已經(jīng)使用的行數(shù)range.AttachDispatch(usedRange.G

8、etColumns();/longiColNum=range.GetCount();已經(jīng)使用的列數(shù)/longiStartRow=usedRange.GetRow();已使用區(qū)域的起始行,從1開(kāi)始/longiStartCol=usedRange.GetColumn();已使用區(qū)域的起始列,從1開(kāi)始/*/讀取第一個(gè)單元格的值range.AttachDispatch(sheet.GetCells();range.AttachDispatch(range.GetItem(COleVariant(long)1),COleVariant(long)1).pdispVal);COleVariantvResu

9、lt=range.GetValue();CStringstr;if(vResult.vt=VT_BSTR)/字符串str=vResult.bstrVal;elseif(vResult.vt=VT_R8)/8字節(jié)的數(shù)字str.Format("%f",vResult.dblVal);elseif(vResult.vt=VT_DATE)/時(shí)間格式SYSTEMTIMEst;VariantTimeToSystemTime(&vResult.date,&st);elseif(vResult.vt=VT_EMPTY)/單元格空的str="&quo

10、t;*/讀取第一個(gè)單元格的對(duì)齊方式,數(shù)據(jù)類型:VT_I4/讀取水平對(duì)齊方式range.AttachDispatch(sheet.GetCells();iCell.AttachDispatch(range.GetItem(COleVariant(long(1),COleVariant(long(1).pdispVal);vResult.lVal=0;vResult=iCell.GetHorizontalAlignment();if(vResult.lVal!=0)switch(vResult.lVal)case1:/默認(rèn)break;case-4108:/居中break;case-4131:/靠左

11、break;case-4152:/靠右break;/垂直對(duì)齊方式iCell.AttachDispatch(range.GetItem(COleVariant(long(1),COleVariant(long(1).pdispVal);vResult.lVal=0;vResult=iCell.GetVerticalAlignment();if(vResult.lVal!=0)switch(vResult.lVal)case-4160:/靠上break;case-4108:/居中break;case-4107:/靠下break;*/設(shè)置第一個(gè)單元格的值"HI,EXCEL!"ra

12、nge.SetItem(COleVariant(1),COleVariant(1),COleVariant("HI,EXCEL!");/*/設(shè)置第一個(gè)單元格字體顏色:紅色Fontfont;range.AttachDispatch(sheet.GetCells();range.AttachDispatch(range.GetItem(COleVariant(long(1),COleVariant(long(1).pdispVal);font.SetColor(COleVariant(long)0xFF0000);/*/合并單元格的處理/包括判斷第一個(gè)單元格是否為合并單元格,以

13、及將第一個(gè)單元格進(jìn)行合并RangeunionRange;range.AttachDispatch(sheet.GetCells();unionRange.AttachDispatch(range.GetItem(COleVariant(long)1),COleVariant(long)1).pdispVal);vResult=unionRange.GetMergeCells();if(vResult.boolVal=-1)/是合并的單元格/合并單元格的行數(shù)range.AttachDispatch(unionRange.GetRows();longiUnionRowNum=range.GetCo

14、unt();/合并單元格的列數(shù)range.AttachDispatch(unionRange.GetColumns();longiUnionColumnNum=range.GetCount();/合并區(qū)域的起始行,列l(wèi)ongiUnionStartRow=unionRange.GetRow();/起始行,從1開(kāi)始longiUnionStartCol=unionRange.GetColumn();/起始列,從1開(kāi)始elseif(vResult.boolVal=0)/不是合并的單元格/將第一個(gè)單元格合并成2行,3列range.AttachDispatch(sheet.GetCells();union

15、Range.AttachDispatch(range.GetItem(COleVariant(long)1),COleVariant(long)1).pdispVal);unionRange.AttachDispatch(unionRange.GetResize(COleVariant(long)2),COleVariant(long)3);unionRange.Merge(COleVariant(long)0);/合并單元格/*/將文件保存為2.xlsbook.SaveAs(COleVariant("C:2.xls"),covOptional,covOptional,covOptional,cov

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論