vc++-操作excel文件方法_第1頁
vc++-操作excel文件方法_第2頁
vc++-操作excel文件方法_第3頁
vc++-操作excel文件方法_第4頁
vc++-操作excel文件方法_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

我以前寫了個VC操作Excel2003的例子,是一個Console的程序,你可以修改一下文件保存的路徑,然后運行一下看看。

/dukejoe/archive/2007/04/16/1156319.aspx

以下是一部分的VC代碼,全部的看鏈接吧。我就不都粘了

C/C++code/********************************************************************************這是上面VBAReportDemo的對應程序*演示使用VC操作Excel2003*功能:設置單元格,風格,凍結(jié)窗格。以及如何將對應的VB代碼翻譯成VC**時間:2007-04-1609:31*作者:高宏偉(DukeJoe)*QQ:21807822*Blog:*注釋:本代碼可單獨研究,但最好和上面的VBAReportDemo對應看比較好**開發(fā)環(huán)境:VisualStudio.NET2003*操作系統(tǒng):WindowsXPHomeEditionServicePack2*******************************************************************************/#include<iostream>usingnamespacestd;#import"C:\ProgramFiles\CommonFiles\MicrosoftShared\OFFICE11\mso.dll"rename("RGB","MSRGB")#import"C:\ProgramFiles\CommonFiles\MicrosoftShared\VBA\VBA6\VBE6EXT.OLB"raw_interfaces_only,\rename("Reference","ignorethis"),rename("VBE","JOEVBE")#import"C:\ProgramFiles\MicrosoftOffice\OFFICE11\excel.exe"exclude("IFont","IPicture")\rename("RGB","ignorethis"),rename("DialogBox","ignorethis"),rename("VBE","JOEVBE"),\rename("ReplaceText","JOEReplaceText"),rename("CopyFile","JOECopyFile"),\rename("FindText","JOEFindText"),rename("NoPrompt","JOENoPrompt")usingnamespaceOffice;usingnamespaceVBIDE;usingnamespaceExcel;intExportExcelFile();intmain(intargc,char*argv[]){if(FAILED(::CoInitialize(NULL)))return1;ExportExcelFile();::CoUninitialize();return0;}intExportExcelFile(){_ApplicationPtrpApplication=NULL;_WorkbookPtrpThisWorkbook=NULL;_WorksheetPtrpThisWorksheet=NULL;SheetsPtrpThisSheets=NULL;RangePtrpThisRange=NULL;_variant_tvt;Excel::XlFileFormatvFileFormat;Excel::XlSaveAsAccessModevSaveAsAccessMode;Excel::XlSaveConflictResolutionvSaveConflictResolution;pApplication.CreateInstance("Excel.Application");pApplication->PutVisible(0,VARIANT_TRUE);pThisWorkbook=pApplication->GetWorkbooks()->Add();pThisSheets=pThisWorkbook->GetWorksheets();pThisWorksheet=pThisSheets->GetItem((short)1);//設置整個sheet的填充色為白色pThisWorksheet->GetCells()->GetInterior()->PutColor(RGB(255,255,255));pThisWorksheet->GetCells()->ClearContents();pThisRange=pThisWorksheet->GetRange("A1:C5");pThisRange->ClearFormats();//如果有不會的,可以在debug文件夾的excel.tlh里找找//pThisRange->GetItem(1,1);pThisRange->PutItem(1,1,_variant_t("哈爾濱市平房區(qū)"));pThisRange->PutItem(1,2,_variant_t("高宏偉"));pThisRange->PutItem(1,3,_variant_t("QQ:21807822"));pThisRange->PutItem(2,1,_variant_t("1"));pThisRange->PutItem(3,1,_variant_t("2"));pThisRange->PutItem(4,1,_variant_t("3"));pThisRange->PutItem(5,1,_variant_t("4"));//為Range的四周和內(nèi)部加上邊框pThisRange->GetBorders()->GetItem(xlEdgeLeft)->PutLineStyle(xlContinuous);pThisRange->GetBorders()->GetItem(xlEdgeTop)->PutLineStyle(xlContinuous);pThisRange->GetBorders()->GetItem(xlEdgeRight)->PutLineStyle(xlContinuous);pThisRange->GetBorders()->GetItem(xlEdgeBottom)->PutLineStyle(xlContinuous);pThisRange->GetBorders()->GetItem(xlInsideHorizontal)->PutLineStyle(xlContinuous);pThisRange->GetBorders()->GetItem(xlInsideVertical)->PutLineStyle(xlContinuous);//設置第一行的格式(背景色、粗體、顏色、列寬)pThisRange->GetRange("A1:C1")->GetInterior()->ColorIndex=47;pThisRange->GetRange("A1:C1")->GetInterior()->Pattern=xlPatternSolid;pThisRange->GetRange("A1:C1")->GetFont()->ColorIndex=6;pThisRange->GetRange("A1:C1")->GetFont()->Bold=TRUE;pThisRange->GetEntireColumn()->ColumnWidth=18.63;pThisRange->GetRange("A2:C5")->GetInterior()->ColorIndex=16;pThisRange->GetRange("A2:C5")->GetInterior()->Pattern=xlPatternSolid;pThisRange->GetRange("A2:C5")->GetFont()->ColorIndex=2;//凍結(jié)窗格pApplication->ActiveWindow->FreezePanes=FALSE;pApplication->Range["A2"]->Select();pApplication->ActiveWindow->FreezePanes=TRUE;//存盤退出vSaveAsAccessMode=xlNoChange;vFileFormat=xlWorkbookNormal;vSaveConflictResolution=xlLocalSessionChanges;pThisWorkbook->SaveAs(_variant_t("D:\\VisualStudioProjects\\VCReportDemo\\joe.xls"),vFileFormat,_variant_t(""),_variant_t(""),_variant_t(false),_variant_t(false),vSaveAsAccessMode,vSaveConflictResolution,_variant_t(false));pThisWorkbook->Close();pApplication->Quit();return0;}VC操作Excel文件保存問題用VC對Excel文件進行寫操作后,在程序結(jié)束前需要對一些對象進行收尾工作,如調(diào)用_Workbook::Save()方法(該方法是Microsoft提供的供VC調(diào)用的對Excel文件操作的標準方法,在文件excel9.cpp或excel.cpp中定義)保存文件。

問題就出現(xiàn)在這里,若選取要保存的Excel文件以前不存在則程序創(chuàng)建一個同名的空Excel文件,對Excel表的操作實際是對其同名副本的操作,Save()方法會觸發(fā)一個"另存為"的對話框,需要覆蓋原來同名的空Excel文件,否則寫入Excel的數(shù)據(jù)會丟失。若選取的Excel文件已經(jīng)存在,則調(diào)用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()是excelapp的方法嗎。

xlApp.ActiveWorkbook.SaveAs"C:\excel.xls"

xlApp.Quit

我的沒有問題。如今Excel是越來越重要了,在我們自己開發(fā)的程序中不免要和Excel打交道了。利用Automation技術(shù),我們可以在不去了解

數(shù)據(jù)庫的情況下玩轉(zhuǎn)Excel,而且你會發(fā)現(xiàn)一切竟如此輕松!

好了,咱們開始吧,我不喜歡用長篇累牘的代碼來故弄玄虛,所以下面的代碼都是切中要害的片段,總體上是個連貫的過程,

包括啟動Excel,讀取數(shù)據(jù),寫入數(shù)據(jù),以及最后的關(guān)閉Excel,其中還包括了很多人感興趣的合并單元格的處理。

特別說明以下代碼需要MFC的支持,而且工程中還要包含EXCEL2000的定義文件:EXCEL9.H,EXCEL9.CPP

*****************************************************************************************************************

//*****

//變量定義

_Applicationapp;

Workbooksbooks;

_Workbookbook;

Worksheetssheets;

_Worksheetsheet;

Rangerange;

RangeiCell;

LPDISPATCHlpDisp;

COleVariantvResult;

COleVariant

covTrue((short)TRUE),

covFalse((short)FALSE),

covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

//*****

//初始化COM的動態(tài)連接庫

if(!AfxOleInit())

{

AfxMessageBox("無法初始化COM的動態(tài)連接庫!");

return;

}

//*****

//創(chuàng)建Excel2000服務器(啟動Excel)

if(!app.CreateDispatch("Excel.Application"))

{

AfxMessageBox("無法啟動Excel服務器!");

return;

}

app.SetVisible(TRUE);//使Excel可見

app.SetUserControl(TRUE);//允許其它用戶控制Excel

//*****

//打開c:\\1.xls

books.AttachDispatch(app.GetWorkbooks());

lpDisp=books.Open("C:\\\\1.xls",

covOptional,covOptional,covOptional,covOptional,covOptional,

covOptional,covOptional,covOptional,covOptional,covOptional,

covOptional,covOptional);

//*****

//得到Workbook

book.AttachDispatch(lpDisp);

//*****

//得到Worksheets

sheets.AttachDispatch(book.GetWorksheets());

//*****

//得到當前活躍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.GetColumns());

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);

COleVariantvResult=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="";

}

//*****

//讀取第一個單元格的對齊方式,數(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://默認

break;

case-4108://居中

break;

case-4131://靠左

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;

}

}

//*****

//設置第一個單元格的值"HI,EXCEL!"

range.SetItem(COleVariant(1),COleVariant(1),COleVariant("HI,EXCEL!"));

//*****

//設置第一個單元格字體顏色:紅色

Fontfont;

range.AttachDispatch(sheet.GetCells());

range.AttachDispatch((range.GetItem(COleVariant(long(1)),COleVariant(long(1)))).pdispVal);

font.SetColor(COleVariant((long)0xFF0000));

//*****

//合并單元格的處理

//包括判斷第一個單元格是否為合并單元格,以及將第一個單元格進行合并

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.GetCount();

//合并單元格的列數(shù)

range.AttachDispatch(unionRange.GetColumns());

longiUnionColumnNum=range.GetCount();

//合并區(qū)域的起始行,列

longiUnionStartRow=unionRange.GetRow();//起始行,從1開始

longiUnionStartCol=unionRange.GetColumn();//起始列,從1開始

}

elseif(vResult.boolVal==0)

{//不是合并的單元格}

//將第一個單元格合并成2行,3列

range.AttachDispatch(sheet.GetCells());

unionRange.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.xls

book.SaveAs(COleVariant("C:\\\\2.xls"),covOptional,covOptional,\\

covOptional,covOptional,covOptional,0,\\

covOptional,covOptional,covOptional,covOptional);

//*****

//關(guān)閉所有的book,退出Excel

book.Close(covOptional,COleVariant(OutFilename),covOptional);

books.Close();

app.Quit();//Excel保存

Sheet.OleProcedure("SaveAs",FName.c_str());VC寫excel文件常用操作(一):字體、列寬設置、寫單元格(2010-05-1322:22:39)轉(zhuǎn)載▼1、字體設置從Excel.exe中導入Font類,顏色設置代碼如下:Fontfont;COleVariantvTrue((short)true),vFalse((short)false);font.AttachDispatch(range.GetFont());//獲得Range的字體對象

font.SetColor(_variant_t((long)0x0000ff));//設置字體顏色為紅色

font.SetBold(vTrue);//粗體

font.SetItalic(vTrue);//斜體font.DetachDispatch();//釋放字體對象注意:Excel中RGB的值與某些場合相反,即:0x00bbggrr|||________紅色||__________綠色|____________藍色2、列寬設置range.AttachDispatch(sheet.GetRange(_variant_t("C1"),_variant_t("C100")));//獲取表單中的列"C"對象

range.SetColumnWidth(_variant_t((long)40));//設置列寬為40

range.DetachDispatch();3、寫單元格range.AttachDispatch(sheet.GetCells(),true);//打印乘法表for(i=1;i<10;i++)

{

for(j=1;j<=i;j++)

{

range.SetItem(_variant_t((long)i),_variant_t((long)j),_variant_t((long)(i*j)));

}

}VC操作Excel刪除里面sheet的方法2009-04-2311:55:55|分類:\o"默認分類"默認分類|字號訂閱VC里可以用Excel提供的類型庫來編程操作Excel表格,最近有人問及怎么刪除一個sheet,該提問者說他的代碼只能刪除一個空的sheet,非空的總是刪不了,我以前也沒操作過Excel試了一下,發(fā)現(xiàn)是可以的,Excel提供的類型庫還是瞞好用的,只要去挖掘.......代碼如下,我就不解析了,看看就懂voidCOptExcelDlg::OnOK(){_Applicationapp;if(!app.CreateDispatch(_T("Excel.Application"),NULL)){AfxMessageBox(_T("fail2"));return;}app.SetVisible(FALSE);app.SetUserControl(FALSE);app.SetDisplayAlerts(F

溫馨提示

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

評論

0/150

提交評論