




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高校學(xué)生心理健康教育指導(dǎo)綱要
- 教育類發(fā)職稱論文的期刊
- 2025大班工作總結(jié)
- 低血糖癥診療與護(hù)理要點
- 中班健康早睡早起的好處
- 質(zhì)數(shù)與和數(shù)的課件
- 建筑公司入職培訓(xùn)
- 中診臟腑辨證病例討論
- 肝病綜合征的診治方法
- 兼職小工考試題及答案
- 化學(xué)-貴州省畢節(jié)市2024年畢節(jié)市高二年級下學(xué)期7月期末聯(lián)考試題和答案
- 2024年首屆全國“紅旗杯”班組長大賽考試題庫800題(含答案)
- 四川省宜賓市2022-2023學(xué)年五年級下學(xué)期數(shù)學(xué)期末試卷(含答案)
- JT-T-891-2014道路車輛清障救援操作規(guī)范
- 《民用無人駕駛航空器系統(tǒng)分類及分級》考試題庫(含答案)
- 國際化競爭格局下的動漫游戲行業(yè)發(fā)展策略
- GB/T 44087-2024北斗三號區(qū)域短報文通信用戶終端技術(shù)要求與測試方法
- GB/T 43868-2024電化學(xué)儲能電站啟動驗收規(guī)程
- 中醫(yī)藥健康管理服務(wù)流程
- 資本論在中國智慧樹知到期末考試答案2024年
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 6-16-02-06 油氣水井測試工 人社廳發(fā)202226號
評論
0/150
提交評論