วิธีการใช้ MFC เพื่อทำให้เป็นอัตโนมัติใน Excel 2000 และ Excel 2002 และขอรับอาร์เรย์จากช่วงใน Excel 2000 และ Excel 2002

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

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

สรุป

บทความนี้อธิบายวิธีการทำให้ Microsoft Excel และคืนค่าจากช่วง multi-cell ไปยังอาร์เรย์

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

เมื่อต้องการคืนค่าจากช่วง multi-cell โดยไม่มีการสอบถามเซลล์หนึ่งโดยหนึ่ง คุณต้องใช้ฟังก์ชันการสมาชิก GetValue ของวัตถุช่วงการคืนค่าไปยังตัวแปร คุณสร้าง SAFEARRAY ที่ขึ้นอยู่กับตัวแปรที่คุณส่งกลับจาก GetValue แล้ว เมื่อคุณมีการ SAFEARRAY คุณสามารถเข้าถึงองค์ประกอบใช้ GetElement ขั้นตอนต่อไปนี้แสดงให้เห็นถึงกระบวนการนี้ และสาธิตวิธีคุณสามารถเข้าถึงสายอักขระและองค์ประกอบที่เป็นตัวเลข

หมายเหตุสำหรับอัตโนมัติ Microsoft Excel 2000 และ 2002

ตัวอย่างรหัสในบทความนี้ใช้คลาส wrappers ที่สร้างขึ้นจากไลบรารีของวัตถุ Excel 97 (Excel 8.olb) มีการปรับเปลี่ยน slight รหัสนี้สามารถถูกประยุกต์ใช้กับการทำงานอัตโนมัติไคลเอนต์ที่ใช้คลาส wrappers สำหรับ Excel 2000 (Excel9.olb) หรือ Excel 2002 (Excel.olb)สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตัวอย่างรหัสที่อธิบายไว้ในบทความนี้กับ Microsoft Excel 2000 หรือไลบรารีชนิด 2002 คลิกหมายเลขบทความด้านล่างนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
224925ข้อมูล: ไลบรารีชนิดสำหรับ Office อาจเปลี่ยน มีการนำออกใช้ใหม่

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

  1. ใน Microsoft Excel สร้างสมุดงานใหม่ เติมข้อมูลเซลล์ A1:C8 ด้วย mixture เป็นสายอักขระและข้อมูลที่เป็นตัวเลข บันทึกสมุดงานเป็น "c:\test.xls" และ Microsoft Excel จบการทำงาน
  2. ทำตามขั้นตอนที่ 1 ถึง 12 ในบทความใน Microsoft Knowledge Base เพื่อสร้างตัวอย่างโครงการ interfaces IDispatch ใช้ และสมาชิกฟังก์ชันที่กำหนดไว้ในไลบรารีชนิด Excel8.olb ต่อไปนี้:
    178749วิธีการสร้างโครงการการทำงานอัตโนมัติที่ใช้ MFC และไลบรารีของชนิด
  3. ที่ด้านบนของไฟล์ AutoProjectDlg.cpp เพิ่มบรรทัดต่อไปนี้:
          #include "excel8.h"
    					
  4. เพิ่มรหัสต่อไปนี้เพื่อ CAutoProjectDlg::OnRun() ในแฟ้ม AutoProjectDlg.cpp:

    ตัวอย่างรหัส

          // OLE Variant for Optional.
          COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          _Application objApp;
          _Workbook objBook;
          Workbooks objBooks;
          Worksheets objSheets;
          _Worksheet objSheet;
          Range objRange;
          VARIANT ret;
    
          // Instantiate Excel and open an existing workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Open("C:\\Test.xls",
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range object for which you wish to retrieve the
          //data and then retrieve the data (as a variant array, ret).
          objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));
          ret = objRange.GetValue();
    
          //Create the SAFEARRAY from the VARIANT ret.
          COleSafeArray sa(ret);
    
          //Determine the array's dimensions.
          long lNumRows;
          long lNumCols;
          sa.GetUBound(1, &lNumRows);
          sa.GetUBound(2, &lNumCols);
    
          //Display the elements in the SAFEARRAY.
          long index[2];
          VARIANT val;
          int r, c;
          TRACE("Contents of SafeArray\n");
          TRACE("=====================\n\t");
          for(c=1;c<=lNumCols;c++)
          {
             TRACE("\t\tCol %d", c);
          }
          TRACE("\n");
          for(r=1;r<=lNumRows;r++)
          {
             TRACE("Row %d", r);
             for(c=1;c<=lNumCols;c++)
             {
                index[0]=r;
                index[1]=c;
                sa.GetElement(index, &val);
                switch(val.vt)
                {
                case VT_R8:
                   {
                      TRACE("\t\t%1.2f", val.dblVal);
                      break;
                   }
                case VT_BSTR:
                   {
                      TRACE("\t\t%s",(CString)val.bstrVal);
                      break;
                   }
    
                case VT_EMPTY:
                   {
                      TRACE("\t\t<empty>");
                      break;
                   }
                }
             }
             TRACE("\n");
          }
    
          //Close the workbook without saving changes
          //and quit Microsoft Excel.
          objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);
          objApp.Quit();
    					
  5. การคอมไพล์โครงการ และเรียกใช้งาน
  6. คลิกเรียกใช้ ค่าในเซลล์ A1:C8 จะแสดงในหน้าต่างผลลัพธ์

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัตโนมัติ Microsoft Excel ที่ใช้ MFC กรุณาคลิกหมายเลขบทความด้านล่างนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
186120วิธีการใช้ MFC เพื่อทำให้ Excel และกรอกข้อมูลช่วงที่ มีแถวลำดับ
184663วิธีการฝัง และการทำให้แผ่นงาน Microsoft Excel ที่ มี MFC
179706วิธีการใช้ MFC เพื่อทำให้ Excel และสร้าง/รูปแบบสมุดงานใหม่แบบ
178781HOWTO: การทำให้ Excel ที่ใช้ MFC และฟังก์ชันแผ่นงาน
178783HOWTO: ใช้ MFC เมื่อต้องการสร้างแผนภูมิ Microsoft Excel
167668วิธีการผ่าน SafeArray ของสายอักขระในตัวแปร *

คุณสมบัติ

หมายเลขบทความ (Article ID): 186122 - รีวิวครั้งสุดท้าย: 18 กันยายน 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Keywords: 
kbprogramming kbfunctions kbautomation kbhowto kbinterop kbmt KB186122 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:186122

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

 

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