วิธีการอัตโนมัติ Excel จาก MFC และ Visual c ++ 2005 หรือ c ++ Visualสุทธิเพื่อกรอกข้อมูล หรือขอรับข้อมูลในช่วงโดยใช้อาร์เรย์

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 308407 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับ Microsoft C#สุทธิรุ่นของบทความนี้ ดู302096.
สำหรับ Microsoft เห็นภาพ พื้นฐานสุทธิรุ่นของบทความนี้ ดู302094.
หมายเหตุMicrosoft Visual c ++ 2005, Microsoft Visual c ++NET 2003 และ Microsoft Visual c ++สุทธิ 2002 สนับสนุนทั้งสองรหัสที่ได้รับการจัดการรูปแบบที่ให้ไว้ โดย MicrosoftNET Framework และไม่มีการจัดการท้องถิ่น Microsoft Windows รหัสรูปแบบ ข้อมูลในบทความนี้ใช้เฉพาะกับ c ++การแสดงผลที่ไม่มีการจัดการรหัส
ขยายทั้งหมด | ยุบทั้งหมด

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

สรุป

บทความทีละขั้นตอนนี้อธิบายเกี่ยวกับวิธีการที่ทำให้เป็นอัตโนมัติ Microsoft Excel จาก Visual c ++ 2005 หรือ c ++ที่มองเห็นสุทธิเพื่อกรอกข้อมูล และเรียกคืนค่าในช่วงที่แบบโดย ใช้อาร์เรย์

สร้างไคลเอ็นต์การดำเนินการอัตโนมัติสำหรับ Excel

เมื่อต้องการกรอกข้อมูลใน multi-cell ช่วงโดยไม่ต้องเก็บเซลล์หนึ่งที่มี เวลา คุณสามารถตั้งค่าได้ค่าคุณสมบัติของตัวช่วงวัตถุเป็นอาร์เรย์ที่สองมิติ ในทำนองเดียวกัน คุณสามารถเรียกคืนการ อาร์เรย์ที่สองมิติของค่าสำหรับเซลล์หลาย ๆ เซลล์พร้อมกันโดยใช้การค่าคุณสมบัติ ขั้นตอนต่อไปนี้สาธิตกระบวนการนี้สำหรับทั้งสองอย่าง การตั้งค่า และรับข้อมูลด้วยการใช้อาร์เรย์สองมิติ
  1. ทำตามขั้นตอนใน "สร้างข้อ Automation ไคล" ส่วนของบทความฐานความรู้ของ Microsoft ต่อไปนี้เพื่อสร้างแบบ basic ไคลเอ็นต์การดำเนินการอัตโนมัติ:
    307473วิธีการใช้ไลบรารีชนิดสำหรับ Office Automation จาก c ++ Visualสุทธิ
    ในขั้นตอนที่ 3 เพิ่มปุ่มที่สองและกล่องกาเครื่องหมาย แบบฟอร์ม ID ของปุ่มเพื่อการเปลี่ยนแปลงIDC_GETVALUESและคำอธิบายเฉพาะได้รับค่า. ID ของกล่องกาเครื่องหมายเพื่อการเปลี่ยนแปลงIDC_CHECKและคำอธิบายเฉพาะกรอกข้อมูล ด้วยสายอักขระ.

    ในขั้นตอนที่ 4 ของบทความ เลือก "รา Microsoft Excel 10.0 วัตถุรี" ถ้าคุณกำลังทำงานอัตโนมัติสำหรับ Excel 2002 จาก Office XP ตำแหน่งที่ตั้งเริ่มต้นสำหรับ Excel 2002 คือ C:\Program Files\Microsoft Office\Office10\Excel.exe หรือ เลือก "รา Microsoft Excel 11.0 วัตถุรี" ถ้าคุณกำลังทำงานอัตโนมัติสำหรับ Microsoft Office Excel 2003 ตำแหน่งที่ตั้งเริ่มต้นสำหรับ Excel 2003 เป็น C:\Program Files\Microsoft Office\Office11\Excel.exe เลือกอินเตอร์เฟสของ Microsoft Excel ต่อไปนี้:
    • _Application
    • _Workbook
    • _Worksheet
    • ช่วง
    • สมุดงาน
    • แผ่นงาน
    ในขั้นตอนที่ 6 เพิ่มต่อไปนี้#รวมคำสั่งโดยตรงหลังจาก#pragma ครั้งไดเรกทีฟใน Autoprojectdlg.h:
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. เพิ่มการแปรสาธารณะสมาชิกสองที่ต่อไปนี้เพื่อCAutoProjectDlgคลาส:
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. ในกล่องโต้ตอบของคุณ ให้คลิกขวาIDC_CHECKและเลือกเพิ่มตัวแปร. ตั้งชื่อ m_bFillWithStrings ที่ตัวแปร และคลิกเสร็จสิ้น.
  4. บนกล่องโต้ตอบของคุณ คลิกสองครั้งเรียกใช้และแทนโค้ดต่อไปนี้
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    โดย:
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	CWorkbooks oBooks;
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// If you have not created Excel, create a new instance.
    	if (oExcel.m_lpDispatch == NULL) {
    		oExcel.CreateDispatch("Excel.Application");
    	}
    	// Show Excel to the user.
    	oExcel.put_Visible(TRUE);
    	oExcel.put_UserControl(TRUE);
    
    	// Add a new workbook and get the first worksheet in that book.
    	oBooks = oExcel.get_Workbooks();
    	oBook = oBooks.Add(covOptional);
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    
    	// Get a range of data.
    	oRange = oSheet.get_Range(COleVariant("A1"),covOptional);
    	oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));
    
    	COleSafeArray saRet;
    	DWORD numElements[2];
    	numElements[0] = 5;
    	numElements[1] = 5;
    
    	long index[2];
    	// Create a BSTR or double safe array.
    	if (m_bFillWithStrings.GetCheck())
    		saRet.Create(VT_BSTR,2,numElements);
    	else
    		saRet.Create(VT_R8,2,numElements);
    
    	// Fill the array with data.
    	for (int iRow = 1; iRow <= 5; iRow++) {
    		for (int iCol = 1; iCol <= 5; iCol++) {
    			index[0]=iRow-1;
    			index[1]=iCol-1;
    			if (m_bFillWithStrings.GetCheck()) {
    				CString szTemp;
    				szTemp.Format("%d|%d",iRow,iCol);
    				BSTR bstr = szTemp.AllocSysString();
    				saRet.PutElement(index,bstr);
    				SysFreeString(bstr);
    			} else {
    				double d = iRow * iCol;
    				saRet.PutElement(index,&d);
    			}
    		}
    	}
    	// Send the array to Excel.
    	oRange.put_Value(covOptional,COleVariant(saRet));
    }
    					
    หมายเหตุใน Visual c ++ 2005 คุณต้องเพิ่มพบโดยทั่วไปภาษาขณะทำงานสนับสนุนคอมไพเลอร์อ็อพชัน(/clr:oldSyntax) ไปเรียบร้อยแล้วคอมไพล์โค้ดตัวอย่างก่อนหน้านี้ เมื่อต้องการเพิ่มทั่วไปภาษาขณะใช้งานการสนับสนุนของคอมไพเลอร์ตัว ให้ทำตามขั้นตอนเหล่านี้:
    1. คลิกโครงการแล้ว คลิกProjectNameคุณสมบัติ.

      หมายเหตุProjectNameคือตัวยึดสำหรับชื่อของโครงการ
    2. ขยายคุณสมบัติการตั้งค่าคอนฟิกแล้ว คลิกทั่วไป.
    3. ในบานหน้าต่างด้านขวา คลิกเพื่อเลือกสนับสนุนการใช้งานจริงภาษาทั่วไป ไวยากรณ์เก่า (/ clr:oldSyntax)ในการสนับสนุนการใช้งานจริงภาษาทั่วไปการตั้งค่าโครงการ
    4. คลิกนำไปใช้แล้ว คลิกตกลง.
    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานจริงภาษาทั่วไปสนับสนุนตัวเลือกคอมไพเลอร์ แวะไปที่เว็บไซต์ของเครือข่ายสำหรับนักพัฒนา Microsoft (MSDN) ต่อไปนี้:
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    ขั้นตอนเหล่านี้ใช้กับบทความทั้งหมด
  5. กลับไปยังกล่องโต้ตอบของคุณ และคลิกสองครั้งได้รับค่า. การแทนรหัสต่อไปนี้
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    โดย:
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// Make sure that Excel has been started.
    	if (oExcel.m_lpDispatch == NULL) {
    		AfxMessageBox("Excel has not been started.  Press button1 to start Excel.");
    		return;
    	}
    	// Get the first worksheet.
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    	// Set the range of data to retrieve
       	oRange = oSheet.get_Range(COleVariant("A1"),COleVariant("E5"));
    
    	// Get the data.
    	COleSafeArray saRet(oRange.get_Value(covOptional));
    
            long iRows;
            long iCols;
            saRet.GetUBound(1, &iRows);
            saRet.GetUBound(2, &iCols);
    
    	CString valueString = "Array Data:\r\n";
    	long index[2];
    	// Loop through the data and report the contents.
    	for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
    		for (int colCounter = 1; colCounter <= iCols; colCounter++) {
    			index[0]=rowCounter;
    			index[1]=colCounter;		   
    			COleVariant vData;
    			saRet.GetElement(index,vData);
    			CString szdata(vData);
                valueString += szdata;
    			valueString += "\t";		
    		}
    		valueString += "\r\n";
    	}
    	AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
    }
    					

ทดสอบการไคลเอ็นต์การดำเนินการอัตโนมัติ

  1. กด F5 เพื่อสร้าง และเรียกใช้โปรแกรมตัวอย่าง
  2. คลิกเรียกใช้. โปรแกรมเริ่มต้น Excel สมุดงานใหม่ และนำเซลล์ A1:E5 ของแผ่นงานแรกกับข้อมูลตัวเลขจากอาร์เรย์
  3. คลิกได้รับค่า. โปรแกรมดึงข้อมูลในเซลล์ A1:E5 ลงในอาร์เรย์ที่ใหม่ และแสดงผลลัพธ์ในกล่องข้อความ
  4. เลือกกรอกข้อมูล ด้วยสายอักขระคลิกเรียกใช้เมื่อต้องการเติมเซลล์ A1:E5 ด้วยข้อมูลสายอักขระ
  5. คลิกได้รับค่าเมื่อต้องการแสดงค่าสายอักขระในกล่องข้อความ

การแก้ไขปัญหา

ถ้าคุณเพิ่มคลา wrappers สำหรับไลบรารีวัตถุ Excel โดยใช้ ที่แฟ้มตัวเลือกในการเพิ่มระดับชั้นจาก TypeLib ซาร์ คุณอาจได้รับการ ข้อผิดพลาดเมื่อคุณเรียกดูไลบรารีวัตถุได้ เมื่อต้องการหลีกเลี่ยงปัญหานี้ พิมพ์เต็มรูปแบบเส้นทางและชื่อแฟ้มสำหรับไลบรารีวัตถุแทนการเรียกดู แฟ้มสำหรับข้อมูลเพิ่มเติม ให้คลิก เลขบทความด้านล่างเพื่อดูบทความในฐานความรู้ของ Microsoft:
311408จุดบกพร่อง: เตือน 'อ่านอย่างเดียว' เมื่อเพิ่มคลา MFC จากไลบรารี
ถ้าคุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ข้อความเมื่อคุณ สร้างโปรแกรมประยุกต์ของคุณตัวอย่าง การเปลี่ยนแปลง "DialogBox ตัวแปร" ใน CRange.h ไป "ตัวแปร _DialogBox":
คำเตือน C4003: ไม่พอที่จะเกิดขึ้นจริง พารามิเตอร์สำหรับแมโคร 'DialogBoxA'
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุ ข้อผิดพลาดนี้ ให้ดูบทความต่อไปนี้ของ Knowledge Base:
311407จุดบกพร่อง: ตัวช่วยสร้าง MFC ไม่แก้ไขข้อขัดแย้งกับแมโคร API การตั้งชื่อ

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

สำหรับข้อมูลเพิ่มเติม ให้ดูที่นักพัฒนา Microsoft ต่อไปนี้ เว็บไซต์เครือข่าย (MSDN):
Microsoft Office การพัฒนา ด้วย Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489 (office.10) .aspx
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้อาร์เรย์เพื่อตั้งค่า และการดึงข้อมูล Excel ข้อมูลกับรุ่นก่อนหน้าของ Visual Studio ดู Knowledge Base ต่อไปนี้ บทความ:
186120วิธีการใช้ MFC อัตโนมัติ Excel และเติมช่วงกับอาร์เรย์
186122วิธีการใช้ MFC Excel โดยอัตโนมัติ และได้รับอาร์เรย์จากช่วง
247412รายละเอียด: วิธีการถ่ายโอนข้อมูลไปยัง Excel จาก Visual Basic

คุณสมบัติ

หมายเลขบทความ (Article ID): 308407 - รีวิวครั้งสุดท้าย: 28 มกราคม 2554 - Revision: 5.0
ใช้กับ
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
Keywords: 
kbautomation kbhowtomaster kbmt KB308407 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:308407

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

 

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