VC編程操做Excel

1.服務器

創建VC工程,本章說明通常是針對MFCapp

2.函數

加入Excel的庫文件.字體

從classwizard中add class處from type library,去office的安裝目錄下引入excel.exe(這是office 2003的選擇,其餘版本都是用olb文件),服務器就算引入了,這時會彈出對話框,要求加入一些類,這些類都是一些接口,裏面有大量的方法,類的對象表徵着excel文件的一個個部分,加載庫後會自動生成相應的接口頭文件和源文件ui

Excel的對象模型        spa

Application:表明應用程序自己。即Excel應用程序        excel

Workbooks:是Workbook 的集合,表明了工做薄。        code

Worksheets:是Worksheet的集合,是Workbook的子對象。        orm

Range:是Worksheet的子對象,能夠理解爲Sheet中必定範圍的單元格。        對象

Shapes:是Worksheet的子對象,用於存儲圖片等信息的單元格

3.

初始化COM庫.

在app的Initstance函數中添加始化代碼:

4.

if(!AfxOleInit()) 
{
    AfxMessageBox("沒法初始化COM的動態鏈接庫!");
    return FALSE;
 }

不過在控制檯程序中調用AfxOleInit()是無效的;

而後,建立Excel 服務器(啓動Excel)

定義app的全局或成員變量

_Application app;

if (!app.CreateDispatch("Excel.Application"))
{
   AfxMessageBox("沒法啓動Excel服務器");
   return FALSE;
}

設置Excel的狀態:

5.

app.SetVisible(bVisble); // 使Excel可見
app.SetUserControl(bControl); // 容許其餘用戶控制Excel

VC對Excel的操做

定義變量

Workbooks  books;
_Workbook  book;
Worksheets  sheets;
_Worksheet  sheet;
LPDISPATCH  lpDisp;
Range   range;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

6.

打開已有的Excel文件

books.AttachDispatch(app.GetWorkbooks());
   // 或者也能夠
   // books = app.GetWorkbooks();
  lpDisp = books.Open("", covOptional, covOptional,  covOptional,   covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional);

7.

新建一個.xls文件,並寫入數據

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 
        // Get the Workbooks collection so that you can add a new workbook
            books.AttachDispatch(app.GetWorkbooks());  // 獲得Workbooks
        book = books.Add(covOptional);     // 獲得Workbook
 
      // Get the Worksheets collection so that you can get the IDispatch for the first Worksheet
       sheets = book.GetWorksheets();     // 獲得Worksheets
       sheet = sheets.GetItem(COleVariant((short)1)); // 獲得Worksheet
       
       // 分別向每一個單元格添加數據
       // Excel2000 用函數SetValue()便可, Excel2003用函數SetValue2()
      //
      range  = sheet.GetRange(COleVariant("A1"), covOptional);  // 獲取A1 Range
      range.SetValue2( COleVariant("Date"));                               // 添加數據
 
     range = sheet.GetRange(COleVariant("B1"), covOptional);   // 獲取B1 Range
     range.SetValue2(COleVariant("Order"));                               // 添加數據
     range = sheet.GetRange(COleVariant("C1"), covOptional);   // 獲取C1 Range
     range.SetValue2(COleVariant("Amount"));                            // 添加數據
     range = sheet.GetRange(COleVariant("D1"), covOptional);   // 獲取D1 Range
     range.SetValue2(COleVariant("Tax"));                                   // 添加數據
    
       // 向單元格中添加公式
    range = sheet.GetRange(COleVariant("D2"), covOptional);      // 得到D2 Range 
    range = range.GetResize(COleVariant((long)NUMROWS), COleVariant((long)1)); // 從新設置D2的大小
    range.SetFormula(COleVariant("=C2*0.07"));                         // 給D2:D21設置公式
 
      // 設置單元格的格式
      range = sheet.GetRange(COleVariant("A1"), COleVariant("D1")); // 得到A1:D1的Range
      oFont = range.GetFont();                                                              // 得到Range的字體
      oFont.SetBold(COleVariant((short)TRUE));                                    // 設置是否粗體
      oFont.SetColor(COleVariant((long)RGB(255, 0, 0)));                     // 設置字體顏色
      oFont.SetName(COleVariant("黑體"));                                           // 設置字體類型
     rang.SetNumberFormatLocal(COleVariant("@"));     //設置單元格爲文本,賦值前有效
      range = range.GetEntireColumn();                                                // 得到所有的單元格
      range.AutoFit();                                                                            // 自動適合尺寸

8.

合併單元格

// 思路:1.先獲取A1:C1的Range範圍,而後從新定義此範圍,最後合併
      //          2.直接得到A1:C2的Range範圍,直接合並。結果和第一種方法同樣
        Range unionRange;
       unionRange = sheet.GetRange(COleVariant("A1"), COleVariant("C1")); 
       vResult = unionRange.GetMergeCells();
        unionRange = unionRange.GetResize(COleVariant((long)2), COleVariant((long)3));
        unionRange.Merge(COleVariant((long)0));      //合併單元格
        unionRange.SetRowHeight(COleVariant((short)30));   //設置單元格的高度
        unionRange.SetHorizontalAlignment(COleVariant((long)-4108));// 水平居中對齊 

9.

向單元格中插入圖片(支持BMP、JPG格式,其餘沒試)

Shapes   shapes   =   sheet.GetShapes();       // 從Sheet對象上得到一個Shapes    
    range   = sheet.GetRange(COleVariant("B16"),COleVariant("J22"));    // 得到Range對象,用來插入圖片
        
   rgMyRge1 = range;
   shapes.AddPicture("D://Test1.jpg"   ,   false   ,   true   ,   
                                  (float)range .GetLeft().dblVal, (float)range .GetTop().dblVal,     // 從本地添加一個圖片
                                  (float)range .GetWidth().dblVal, (float)range .GetHeight().dblVal);
   ShapeRange   sRange   =   shapes.GetRange(_variant_t(long(1)));
   sRange.SetHeight(float(30));   
   sRange.SetWidth(float(30)); 

10.

將已建的.xls文件另存爲

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    book.SaveAs(COleVariant("D://3.xls"),covOptional,covOptional,
                                covOptional,covOptional,covOptional,0,
                                covOptional,covOptional,covOptional,covOptional,covOptional); 

11.

關閉Excel服務

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    book.SetSaved(TRUE);     // 將Workbook的保存狀態設置爲已保存,即不讓系統提示是否人工保存
    range.ReleaseDispatch();    // 釋放Range對象
    sheet.ReleaseDispatch();    // 釋放Sheet對象
    sheets.ReleaseDispatch();    // 釋放Sheets對象
 
    book.ReleaseDispatch();     // 釋放Workbook對象
    books.ReleaseDispatch();    // 釋放Workbooks對象
    book.Close (covOptional, covOptional,covOptional);// 關閉Workbook對象
    books.Close();           // 關閉Workbooks對象
    
    app.Quit();          // 退出_Application
    app.ReleaseDispatch ();       // 釋放_Application
相關文章
相關標籤/搜索