MFC讀入匯出到EXCEL

來源:互聯網
上載者:User

標籤:list   選中   輸入   項目   ade   添加   研發   edit   風格   

https://wenku.baidu.com/view/d7383548767f5acfa1c7cd30.html

只看這個就夠了

copy版

VC2010對Excel的操作

  1. 建立新的C++工程

建立基於對話方塊的MFC程式

  1. 添加庫、添加Excel類庫

在工程名上右鍵,選擇“添加”—“類”(或者點擊功能表列的“項目”->“添加類”),選擇“TypeLib中的MFC類”(MFC Class From TypeLib)

 

類來源選“註冊表”,在可用的類型庫中選擇“Microsoft Excel 11.0 Object Library<1.5>”在介面列表框中選擇需要的類,在此,我們選擇_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets這六個就可以了。

 

可以看到,六個類被添加了進來。

  1. 修改標頭檔

分別將加進來的六個標頭檔上面的“#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace”注釋掉。

  1. 添加標頭檔

在stdAfx.h標頭檔中添加加進來的這幾個標頭檔

#include "CApplication.h"

#include "CRange.h"

#include "CWorkbook.h"

#include "CWorkbooks.h"

#include "CWorksheet.h"

#include "CWorksheets.h"

  1. 修改錯誤

編譯,會出現兩個錯誤:

…\crange.h(335): warning C4003: “DialogBoxW”宏的實參不足

…\crange.h(335): error C2059: 語法錯誤:“,”

雙擊錯誤提示,定位在錯誤行,

    VARIANT DialogBox()

    {

         VARIANT result;

         InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);

         return result;

    }

將該函數名“DialogBox()”前面加“_”底線,即“_DialogBox()”,這樣就可以編譯成功了。

  1. 在對話方塊中添加一個編輯框,並為其關聯一CEdit類型變數m_Path,添加“開啟”按鈕,實現開啟一已經存在的Excel檔案。並將路徑顯示在編輯框中。實現代碼如下。

void CExportToExcelDlg::OnBnClickedButtonOpen()

{

  CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

       _T("EXCEL檔案t(*.xls;*.xlsx)|*.xls;*.xlsx||"),AfxGetMainWnd());

  if(file.DoModal()==IDOK)

  {

       CString strPath=file.GetPathName();

       m_Path.SetWindowTextW(strPath);

       CApplication app;

       CWorkbook book;

       CWorkbooks books;

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

       {

           MessageBox(_T("Error!Creat Excel Application Server Faile!"));

           exit(1);

       }

       //books.AttachDispatch(app.get_Workbooks(),true);

       //book.AttachDispatch(books.Add(_variant_t(strPath)));

       books = app.get_Workbooks();      

       book = books.Add(_variant_t(strPath));

 

       app.put_Visible(true);

 

       //結尾,釋放

       book.ReleaseDispatch();  

       books.ReleaseDispatch();  

       app.ReleaseDispatch();

       app.Quit();

 

  }

}

 

  1. 在對話方塊中添加“寫入”按鈕,實現建立一Excel檔案(存在則覆蓋),並向檔案中寫入資料。實現代碼如下。

void CExportToExcelDlg::OnBnClickedButtonWrite()

{

  CString strFile = _T("D:\\WriteToExcelTest.xlsx");

 

  COleVariant

       covTrue((short)TRUE),

       covFalse((short)FALSE),

       covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);

 

  CApplication app;

  CWorkbook book;

  CWorkbooks books;

  CWorksheet sheet;

  CWorksheets sheets;

  CRange range;

  CFont font;

 

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

  {

       MessageBox(_T("Error!Creat Excel Application Server Faile!"));

  }

 

  books = app.get_Workbooks();

  //books.AttachDispatch(app.get_Workbooks());可代替上面一行

  book = books.Add(covOptional);

  //book.AttachDispatch(books.Add(covOptional),true); 可代替上面一行

  sheets=book.get_Worksheets();

  //sheets.AttachDispatch(book.get_Worksheets(),true); 可代替上面一行

  sheet = sheets.get_Item(COleVariant((short)1));

  //sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true); 可代替上面一行

  //下面兩行,是向A1中寫入"Yeah!I can write data to excel!"

  range = sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1")));

  range.put_Value2(COleVariant(_T("Yeah!I can write data to excel!")));

 

  //下面是向第二行的前十個儲存格中輸入1到10,十個數字

  for(long i=1;i<11;i++)

       range.put_Item(_variant_t((long)2),_variant_t((long)i),_variant_t((long)i));

 

  //設定列寬

  range = sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("J1")));

  range.put_ColumnWidth(_variant_t((long)5));

 

  //顯示表格

  app.put_Visible(TRUE);

 

  //儲存

  book.SaveCopyAs(COleVariant(strFile));

  book.put_Saved(true);

 

  //結尾,釋放

  book.ReleaseDispatch();  

  books.ReleaseDispatch();  

  app.ReleaseDispatch();

  app.Quit();

 

}

 

  1. 在對話方塊中添加清單控制項,並關聯變數m_Grid,並設定顯示為報表樣式。在對話方塊中添加“寫入列表”按鈕,實現將對話方塊中已有的表寫入到Excel中。實現代碼如下。

在初始化函數中,先初始化列表。

//設定列表視圖的擴充風格

    m_Grid.SetExtendedStyle(LVS_EX_FLATSB           //扁平風格顯示捲軸

         |LVS_EX_FULLROWSELECT                  //允許整行選中

         |LVS_EX_HEADERDRAGDROP                  //允許整列拖動

         |LVS_EX_ONECLICKACTIVATE                    //單擊選中項

         |LVS_EX_GRIDLINES);                                  //畫出網格線

    //設定表頭

    m_Grid.InsertColumn(0,_T("編號"),LVCFMT_LEFT,100,0);

    m_Grid.InsertColumn(1,_T("姓名"),LVCFMT_LEFT,100,1);

    m_Grid.InsertColumn(2,_T("所屬部門"),LVCFMT_LEFT,100,2);

    //向列表中插入資料

    int count = 0;

    m_Grid.InsertItem(count,_T("001"));

    m_Grid.SetItemText(count,1,_T("張一"));

    m_Grid.SetItemText(count++,2,_T("銷售部"));

    m_Grid.InsertItem(count,_T("002"));

    m_Grid.SetItemText(count,1,_T("列二"));

    m_Grid.SetItemText(count++,2,_T("研發部"));

    m_Grid.InsertItem(count,_T("003"));

    m_Grid.SetItemText(count,1,_T("宇三"));

    m_Grid.SetItemText(count++,2,_T("採購部"));

    m_Grid.InsertItem(count,_T("004"));

    m_Grid.SetItemText(count,1,_T("宙四"));

    m_Grid.SetItemText(count,2,_T("宣傳部"));

 

再編寫按鈕的響應函數

void CExportToExcelDlg::OnBnClickedButtonWritelist()

{

         // TODO: 在此添加控制項通知處理常式代碼

         CString strFile = _T("D:\\WriteListToExcelTest.xlsx");

 

         COleVariant

                  covTrue((short)TRUE),

                  covFalse((short)FALSE),

                  covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);

 

         CApplication app;

         CWorkbook book;

         CWorkbooks books;

         CWorksheet sheet;

         CWorksheets sheets;

         CRange range;

 

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

         {

                  MessageBox(_T("Error!Creat Excel Application Server Faile!"));

                  exit(1);

         }

         books = app.get_Workbooks();

         book = books.Add(covOptional);

         sheets = book.get_Worksheets();

         sheet = sheets.get_Item(COleVariant((short)1));

         //得到全部Cells

         range.AttachDispatch(sheet.get_Cells());

         CString sText[]={_T("編號"),_T("姓名"),_T("所屬部門")};

         for (int setnum=0;setnum<m_Grid.GetItemCount()+1;setnum++)

         {

                  for (int num=0;num<3;num++)

                  {

                          if (!setnum)

                          {

                                   range.put_Item(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)),

                                            _variant_t(sText[num]));

                          }

                          else

                          {

                                   range.put_Item(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)),

                                            _variant_t(m_Grid.GetItemText(setnum-1,num)));

                          }

                  }

         }

         //儲存

         book.SaveCopyAs(COleVariant(strFile));

         book.put_Saved(true);

         app.put_Visible(true);

        

         //釋放對象

         range.ReleaseDispatch();

         sheet.ReleaseDispatch();

         sheets.ReleaseDispatch();

         book.ReleaseDispatch();

         books.ReleaseDispatch();

         app.ReleaseDispatch();

         app.Quit();

 

}

最終結果如下。

 

按【開啟】按鈕,出現開啟對話方塊,可選擇Excel開啟。

 

按【寫入】按鈕,開啟Excel檔案。

 

按下【寫入列表】,開啟Excel檔案。

 

MFC讀入匯出到EXCEL

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.