Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để nhúng và tự động hoá một Microsoft Excel bảng tính với MFC

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:184663
TÓM TẮT
Bài viết này mô tả cách để nhúng một Microsoft Excel Bảng vào một đối tượng xem trong ứng dụng SDI MFC.

Bài viết này bao gồm các bước theo bước hướng dẫn để nhúng bảng tính và thêm một số văn bản vào ô A1, cũng như ý kiến giải thích từng bước.

Mặc dù mẫu mã trong bài viết này có thể được thực hiện và đưa vào ứng dụng của bạn, các lợi ích thực sự đến từ đọc và hiểu biết về mẫu Mã.
THÔNG TIN THÊM
Microsoft cung cấp lập trình ví dụ để minh hoạ chỉ, không có bảo hành hoặc thể hiện hay ngụ ý. Điều này bao gồm, nhưng không giới hạn, bảo đảm ngụ ý khả năng bán hàng hoặc cho một mục đích cụ thể. Bài viết này giả định rằng bạn đã quen thuộc với ngôn ngữ lập trình mà đang được chứng minh và với những công cụ được sử dụng để tạo ra và gỡ lỗi thủ tục. Microsoft hỗ trợ các kỹ sư có thể giúp giải thích các chức năng của một thủ tục cụ thể. Tuy nhiên, họ sẽ sửa đổi các ví dụ để cung cấp thêm chức năng hoặc xây dựng quy trình để đáp ứng các yêu cầu cụ thể của bạn.

Để tạo ra các ứng dụng MFC, hãy làm theo các bước sau:
  1. Sử dụng AppWizard để tạo ra một mới MFC AppWizard (EXE) dự án được đặt tên "embed_excel."
  2. Chọn tài liệu duy nhất như loại ứng dụng để tạo ra, và chọn Container là loại tài liệu hợp chất hỗ trợ để bao gồm. Chấp nhận tất cả các thiết lập mặc định khác.

    Các lớp học sau đây có được tạo ra:

    Ứng dụng: CEmbed_ExcelApp Embed_Excel.h và Embed_Excel.cpp

    Khung: CMainFrame MainFrm.h và MainFrm.cpp

    Tài liệu: CEmbed_ExcelDoc trong Embed_ExcelDoc.h và Embed_ExcelDoc.CPP

    Xem: CEmbed_ExcelView trong Embed_ExcelView.h và Embed_ExcelView.CPP

    Kho chứa khoản mục: CEmbed_ExcelCntrItem CntrItem.h và CntrItem.cpp
  3. Trên các Xem trình đơn, nhấp vào ClassWizard. Bấm vào các Tự động hóa tab, bấm vào Thêm Class, và chọn Từ một thư viện kiểu. Xác định vị trí các Thư viện loại Microsoft Excel, và thêm tất cả các lớp học trong thư viện kiểu cho dự án của bạn. Cho Excel 97, thư viện kiểu này tọa lạc tại Excel8.olb. Cho Excel 2000 loại thư viện nằm ở Excel9.olb, và cho Excel 2002 và sau đó, thư viện kiểu nó nằm ở Excel.exe.
  4. Thêm dòng sau vào CntrItem.h:
    LPDISPATCH GetIDispatch();					
  5. Sau đó thêm các phương pháp GetIDispatch để CntrItem.cpp:
       Sample Code   -----------      /*******************************************************************      *   This method returns the IDispatch* for the application linked to      *   this container.      ********************************************************************/       LPDISPATCH CEmbed_ExcelCntrItem::GetIDispatch()      {         //The this and m_lpObject pointers must be valid for this function         //to work correctly. The m_lpObject is the IUnknown pointer to         // this object.         ASSERT_VALID(this);         ASSERT(m_lpObject != NULL);         LPUNKNOWN lpUnk = m_lpObject;         //The embedded application must be running in order for the rest         //of the function to work.         Run();         //QI for the IOleLink interface of m_lpObject.         LPOLELINK lpOleLink = NULL;         if (m_lpObject->QueryInterface(IID_IOleLink,            (LPVOID FAR*)&lpOleLink) == NOERROR)         {            ASSERT(lpOleLink != NULL);            lpUnk = NULL;            //Retrieve the IUnknown interface to the linked application.            if (lpOleLink->GetBoundSource(&lpUnk) != NOERROR)            {               TRACE0("Warning: Link is not connected!\n");               lpOleLink->Release();               return NULL;            }            ASSERT(lpUnk != NULL);         }         //QI for the IDispatch interface of the linked application.         LPDISPATCH lpDispatch = NULL;         if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&lpDispatch)            !=NOERROR)         {            TRACE0("Warning: does not support IDispatch!\n");            return NULL;         }         //After assuring ourselves it is valid, return the IDispatch         //interface to the caller.         ASSERT(lpDispatch != NULL);         return lpDispatch;      }					
  6. Thêm dòng sau vào Embed_ExcelView.h:
          void EmbedAutomateExcel();					
  7. Sau đó thêm các phương pháp EmbedAutomateExcel để Embed_ExcelView.CPP:
    Sample Code-----------      /********************************************************************      *   This method encapsulates the process of embedding an Excel      *   Worksheet in a View object and automating that worksheet to add      *   some text to cell A1.      ********************************************************************/       void CEmbed_ExcelView::EmbedAutomateExcel()      {         //Change the cursor so the user knows something exciting is going         //on.         BeginWaitCursor();         CEmbed_ExcelCntrItem* pItem = NULL;         TRY         {            //Get the document associated with this view, and be sure it's            //valid.            CEmbed_ExcelDoc* pDoc = GetDocument();            ASSERT_VALID(pDoc);            //Create a new item associated with this document, and be sure            //it's valid.            pItem = new CEmbed_ExcelCntrItem(pDoc);            ASSERT_VALID(pItem);            // Get Class ID for Excel sheet.            // This is used in creation.            CLSID clsid;            if(FAILED(::CLSIDFromProgID(L"Excel.sheet",&clsid)))               //Any exception will do. We just need to break out of the               //TRY statement.               AfxThrowMemoryException();            // Create the Excel embedded item.            if(!pItem->CreateNewItem(clsid))               //Any exception will do. We just need to break out of the               //TRY statement.               AfxThrowMemoryException();            //Make sure the new CContainerItem is valid.            ASSERT_VALID(pItem);            // Launch the server to edit the item.            pItem->DoVerb(OLEIVERB_SHOW, this);            // As an arbitrary user interface design, this sets the            // selection to the last item inserted.            m_pSelection = pItem;   // set selection to last inserted item            pDoc->UpdateAllViews(NULL);            //Query for the dispatch pointer for the embedded object. In            //this case, this is the Excel worksheet.            LPDISPATCH lpDisp;            lpDisp = pItem->GetIDispatch();            //Add text in cell A1 of the embedded Excel sheet            _Workbook wb;            Worksheets wsSet;            _Worksheet ws;            Range range;            _Application app;            //set _Workbook wb to use lpDisp, the IDispatch* of the            //actual workbook.            wb.AttachDispatch(lpDisp);            //Then get the worksheet's application.            app = wb.GetApplication();            //Then get the first worksheet in the workbook            wsSet = wb.GetWorksheets();            ws = wsSet.GetItem(COleVariant((short)1));            //From there, get a Range object corresponding to cell A1.            range = ws.GetRange(COleVariant("A1"), COleVariant("A1"));            //Fill A1 with the string "Hello, World!"            range.SetValue(COleVariant("Hello, World!"));           //NOTE: If you are automating Excel 2002, the Range.SetValue method has an            //additional optional parameter specifying the data type.  Because the            //parameter is optional, existing code will still work correctly, but new            //code should use the new convention.  The call for Excel2002 should look            //like the following:           //range.SetValue( C<?xm-insertion_mark_start author="v-thomr" time="20070326T121607-0600"?>O<?xm-insertion_mark_end?><?xm-deletion_mark author="v-thomr" time="20070326T121606-0600" data="o"?>leVariant( (long)DISP_E_PARAMNOTFOUND, VT_ERROR ),            //                COleVariant("Hello, World!"));         }           //Here, we need to do clean up if something went wrong.           CATCH(CException, e)           {              if (pItem != NULL)              {                 ASSERT_VALID(pItem);                 pItem->Delete();              }              AfxMessageBox(IDP_FAILED_TO_CREATE);           }           END_CATCH           //Set the cursor back to normal so the user knows exciting stuff           //is no longer happening.           EndWaitCursor();        }					
  8. Thêm dòng sau vào Embed_ExcelView.h:
          #include "excel8.h"						
    NOTE Nếu bạn đang tự động hoá Excel 2000, tập tin tiêu đề là "excel9.h." Nếu bạn đang tự động hoá Excel 2002 hoặc một phiên bản sau này của Excel, tập tin tiêu đề là "excel.h."
  9. Xem xét các phương pháp OnInsertObject() của lớp View. Nó là thú vị để lưu ý rằng phương pháp này, và các phương pháp mà chúng tôi đã chỉ viết, nổi bật tương tự. Trong thực tế, chúng tôi đã viết mã là chỉ đơn thuần là một trường hợp đặc biệt của OnInsertObject(), cho phép người dùng để chọn từ một danh sách có sẵn OLE các đối tượng để chèn vào các ứng dụng. Bởi vì chúng tôi chỉ muốn tự động hoá các Bảng tính Excel, chúng tôi ghi đè hành vi này. Đối với ứng dụng của chúng tôi, loại bỏ tất cả các Mã từ bên trong của InsertObject() và thay thế bằng một cuộc gọi đến EmbedAutomateExcel().
  10. Biên dịch và chạy các ứng dụng.
  11. Trên các Chỉnh sửa trình đơn, nhấp vào Chèn đối tượng mới.
Kết quả: Một Microsoft Excel bảng tính được nhúng vào quan điểm. Ngoài ra, cell A1 dân cư với "Hello, World!" thông qua tự động hóa.
XL2007

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 184663 - Xem lại Lần cuối: 08/20/2011 06:29:00 - Bản sửa đổi: 2.0

Microsoft Office Excel 2007, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Foundation Class Library 4.2, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition

  • kbprogramming kbautomation kbhowto kbinterop kbmt KB184663 KbMtvi
Phản hồi