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

下載本文檔

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

文檔簡介

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

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

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

5、(!AfxOleInit()AfxMessageBox("無法初始化COM的動態(tài)連接庫!");return;/*/創(chuàng)建Excel2000服務(wù)器(啟動Excel)if(!app.CreateDispatch("Excel.Application")AfxMessageBox("無法啟動Excel服務(wù)器!");return;app.SetVisible(TRUE);/使Excel可見app.SetUserControl(TRUE);/允許其它用戶控制Excel/*/打開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)中,此操作不能返回,會一直等待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開始/longiStartCol=usedRange.GetColumn();已使用區(qū)域的起始列,從1開始/*/讀取第一個單元格的值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)/時間格式SYSTEMTIMEst;VariantTimeToSystemTime(&vResult.date,&st);elseif(vResult.vt=VT_EMPTY)/單元格空的str="&quo

10、t;*/讀取第一個單元格的對齊方式,數(shù)據(jù)類型:VT_I4/讀取水平對齊方式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;/垂直對齊方式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è)置第一個單元格的值"HI,EXCEL!"ra

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

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

評論

0/150

提交評論