วิธีการทำให้ Excel โดยใช้ฟังก์ชัน MFC และแผ่นงาน

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 178781 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการทำให้ Microsoft Excel 97, Microsoft Excel 2000, Microsoft Excel 2002 หรือ Microsoft Excel 2003 โดยการใช้ไลบรารีคลาสมูลฐาน Microsoft (MFC) เวอร์ชันที่ 4.2 ที่ (ติดตั้งกับ Microsoft ในการ Visual c ++รุ่น 5.0 และ 6.0) โดยเฉพาะอย่างยิ่ง บทความนี้อธิบายวิธีการใช้ฟังก์ชันแผ่นงานโดยการเพิ่มไว้เช่นการวิเคราะห์ ToolPak (ATP) และวิธีการใช้ฟังก์ชันที่สูตรในแผ่นงานที่มีอยู่แล้วภายใน Microsoft Excel

ข้อมูลเพิ่มเติม

คุณสามารถคัดลอกรหัสในบทความนี้ไปยังฟังก์ชันการจัดการข้อความของเหตุการณ์ที่กำหนดไว้ในแฟ้ม.cpp MFC อย่างไรก็ตาม วัตถุประสงค์ของรหัสอยู่เพื่อ แสดงให้เห็นถึงขั้นตอนการใช้อินเทอร์เฟซ IDispatch และฟังก์ชันสมาชิกที่กำหนดไว้ใน Excel8.olb สำหรับ Excel 97 ใน Excel9.olb สำหรับ Excel 2000 และ Excel.exe สำหรับไลบรารีชนิด Excel 2003 และ Excel 2002 ประโยชน์ที่หลักที่มาจากการอ่าน และการทำความเข้าใจเกี่ยวกับรหัสในตัวอย่าง ดังนั้นคุณสามารถปรับเปลี่ยนตัวอย่าง หรือเขียนโค้ดจากการลบดำเนินการฟังก์ชันแผ่นงานใน Microsoft Excel ที่ใช้ MFC อัตโนมัติ

ขั้นตอนในการสร้างโครงการนี้

  1. ทำตามขั้นตอนที่ 1 ถึง 12 ในบทความฐานความรู้ของ Microsoft ต่อไปนี้เพื่อสร้างตัวอย่างโครงการที่ใช้อินเทอร์เฟซ IDispatch และฟังก์ชันสมาชิกที่กำหนดใน Excel8.olb หรือ Excel9.olb หรือ Excel.exe สำหรับ Excel 2002 และไลบรารีชนิด Excel 2003:
    178749วิธีการสร้างโครงการการทำงานอัตโนมัติที่ใช้ MFC และไลบรารีของชนิด
  2. ที่ด้านบนของแบบ AutoProjectDlg.cpp เพิ่มบรรทัดต่อไปนี้:
          #include "excel8.h"
    					
    ถ้าคุณกำลังอัตโนมัติ Excel 2000 รวม excel9.h ถ้าคุณกำลังอัตโนมัติ Excel 2002 หรือ Excel 2003 รวม excel.h

  3. เพิ่มรหัสต่อไปนี้เพื่อ CAutoProjectDlg::OnRun() ในแฟ้ม AutoProjectDLG.cpp: รหัสตัวอย่าง:
          try
          {
          _Application app;     // app is an _Application object.
          _Workbook book;       // More object declarations.
          _Worksheet sheet;
          Workbooks books;
          Worksheets sheets;
    
          Range range;          // Used for Microsoft Excel 97 components.
          LPDISPATCH lpDisp;    // Often reused variable.
    
          // Common OLE variants. Easy variants to use for calling arguments.
          COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          // Start Microsoft Excel, get _Application object,
          // and attach to app object.
          if(!app.CreateDispatch("Excel.Application"))
           {
            AfxMessageBox("Couldn't CreateDispatch() for Excel");
            return;
           }
    
    
          // Set visible.
          app.SetVisible(TRUE);
    
          // Register the Analysis ToolPak.
          CString sAppPath;
    
          sAppPath.Format ("%s\\Analysis\\Analys32.xll", app.GetLibraryPath());
    
          if(!app.RegisterXLL(sAppPath))
            AfxMessageBox("Didn't register the Analys32.xll");
    
          // Get the Workbooks collection.
          lpDisp = app.GetWorkbooks();     // Get an IDispatch pointer.
          ASSERT(lpDisp);
          books.AttachDispatch(lpDisp);    // Attach the IDispatch pointer
                                           // to the books object.
    
          // Open a new workbook and attach that IDispatch pointer to the
          // Workbook object.
          lpDisp = books.Add( covOptional );
          ASSERT(lpDisp);
          book.AttachDispatch( lpDisp );
    
             // To open an existing workbook, you need to provide all
             // arguments for the Open member function. In the case of 
             // Excel 2002 you must provide 16 arguments.
             // However in Excel 2003 you must provide 15 arguments.
             // The code below opens a workbook and adds it to the Workbook's
             // Collection object. It shows 13 arguments, required for Excel
             // 2000.
             // You need to modify the path and file name for your own
             // workbook.
    
          // 
          // lpDisp = books.Open("C:\\Test",     // Test.xls is a workbook.
          // covOptional, covOptional, covOptional, covOptional, covOptional,
          // covOptional, covOptional, covOptional, covOptional, covOptional,
          // covOptional, covOptional );   // Return Workbook's IDispatch
          // pointer.
    
          // Get the Sheets collection and attach the IDispatch pointer to your
          // sheets object.
          lpDisp = book.GetSheets();
          ASSERT(lpDisp);
          sheets.AttachDispatch(lpDisp);
    
          // Get sheet #1 and attach the IDispatch pointer to your sheet
          // object.
          lpDisp = sheets.GetItem( COleVariant((short)(1)) );
                                            //GetItem(const VARIANT &index)
          ASSERT(lpDisp);
          sheet.AttachDispatch(lpDisp);
    
          // Fill range A1 with "1/25/98", the settlement date.
          lpDisp = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));
          ASSERT(lpDisp);
          range.AttachDispatch(lpDisp);
          range.SetValue(COleVariant("1/25/98")); // Excel 97 & Excel 2000
    
    range.SetValue2(COleVariant("1/25/98")); // Excel 2002 and Excel 2003
    
    
          // Fill range A2 with "11/15/99", the maturity date.
          lpDisp = sheet.GetRange(COleVariant("A2"), COleVariant("A2"));
          ASSERT(lpDisp);
          range.AttachDispatch(lpDisp);
          range.SetValue(COleVariant("11/15/99"));  // Excel 97 & Excel 2000
    
    range.SetValue2(COleVariant("11/15/99")); // Excel 2002 and Excel 2003
    
    
          // Fill range A3 with "2", the frequency for semi-annual interest
          // payments.
          lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("A3"));
          ASSERT(lpDisp);
          range.AttachDispatch(lpDisp);
          range.SetValue(COleVariant("2"));  // Excel 97 & Excel 2000
    
    range.SetValue2(COleVariant("2"));  // Excel 2002 and Excel 2003
    
          // Fill range A4 with 1, the basis (actual/actual).
          lpDisp = sheet.GetRange(COleVariant("A4"), COleVariant("A4"));
          ASSERT(lpDisp);
          range.AttachDispatch(lpDisp);
          range.SetValue(COleVariant("1")); // Excel 97 & Excel 2000
    
    range.SetValue2(COleVariant("1")); // Excel 2002 and  Excel 2003
    
          // Fill range C1 with the formula "=COUPNCD(A1, A2, A3, A4)" and
          // format the cell with a Date type of the Number format.
          lpDisp = sheet.GetRange(COleVariant("C1"), COleVariant("C1"));
          ASSERT(lpDisp);
          range.AttachDispatch(lpDisp);
          range.SetNumberFormat(COleVariant("mm/dd/yy"));
          range.SetFormula(COleVariant("=COUPNCD(A1, A2, A3, A4)"));
    
          /* This is an alternative that works without placing variables on
          // the worksheet.
          // The values are arguments contained in the SetFormula() call.
          // range.SetFormula(COleVariant(
                           "=COUPNCD(\"09/15/96\",\"11/15/99\",2,1)"));
          */ 
    
          // *** The example in this block uses a built-in Microsoft Excel
          // function.
    
          // You do not have to register any add-in to use the built-in
    
          // Microsoft Excel worksheet functions.
          lpDisp = sheet.GetRange(COleVariant("C3"), COleVariant("C3"));
          ASSERT(lpDisp);
          range.AttachDispatch(lpDisp);
          range.SetFormula(COleVariant("=SUM(A3, A4)"));
          // or use:
          // range.SetFormula(COleVariant("=SUM(2,1)"));
    
          // *** End of example for built-in function usage.
    
          // Release dispatch pointers.
          range.ReleaseDispatch();
          sheet.ReleaseDispatch();
          // This is not really necessary because
          // the default second parameter of AttachDispatch releases
          // when the current scope is lost.
    
          } // End of processing.
    
            catch(COleException *e)
          {
            char buf[1024];     // For the Try...Catch error message.
            sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);
            ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);
          }
    
          catch(COleDispatchException *e)
          {
            char buf[1024];     // For the Try...Catch error message.
            sprintf(buf,
                   "COleDispatchException. SCODE: %08lx, Description: \"%s\".",
                   (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));
            ::MessageBox(NULL, buf, "COleDispatchException",
                               MB_SETFOREGROUND | MB_OK);
          }
    
          catch(...)
          {
            ::MessageBox(NULL, "General Exception caught.", "Catch-All",
                               MB_SETFOREGROUND | MB_OK);
          }
    					

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมประยุกต์ที่ทำงานอัตโนมัติของ Office คลิกหมายเลขบทความด้านล่างนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
222101วิธีการ: การค้นหา และใช้วัตถุ Office รุ่นของเอกสาร

คุณสมบัติ

หมายเลขบทความ (Article ID): 178781 - รีวิวครั้งสุดท้าย: 7 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Foundation Class Library 4.2 เมื่อใช้กับ:
    • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 2002 Standard Edition
Keywords: 
kbautomation kbhowto kbinterop kbmt KB178781 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:178781

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com