การผูกสำหรับเซิร์ฟเวอร์การดำเนินการอัตโนมัติของ Office ด้วย Visual .NET c#

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

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

สรุป

เมื่อคุณทำให้โปรแกรมประยุกต์เช่น Microsoft Office โปรแกรมประยุกต์ โทรศัพท์ไปยังคุณสมบัติและเมธของ Office วัตถุของโปรแกรมประยุกต์ต้องเชื่อมต่อบางวิธีไปยังวัตถุเหล่านั้น โดยทั่วไปคือเรียกกระบวนการของคุณสมบัติการเชื่อมต่อและวิธีการเรียกไปยังวัตถุที่ใช้งานคุณสมบัติและเมธเหล่านั้นผูก. ใน Visual c# สองชนิดของการผูกที่พร้อมใช้งานอยู่รวมก่อนหน้าและรวมภายหลัง. ชนิดของการผูกที่คุณเลือกอาจส่งผลต่อด้านจำนวนมากของโปรแกรมของคุณ รวมทั้งประสิทธิภาพ ความยืดหยุ่น และ maintainability

บทความนี้อธิบาย และเปรียบเทียบการรวมก่อนหน้า และล่าช้าไคลเอ็นต์ของ Visual c# ระบบอัตโนมัติ และแสดงตัวอย่างรหัสที่แสดงให้เห็นถึงชนิดรวมทั้งสอง

รวมก่อนหน้า

ด้วยการรวมก่อนหน้า Visual c# ใช้ชนิดข้อมูลที่พร้อมใช้งานเกี่ยวกับการ Office แอพพลิเคชันสอบถามเพื่อผูกโดยตรงไปยังวิธีหรือคุณสมบัติที่ต้องการใช้ งาน คอมไพเลอร์สามารถดำเนินการชนิด และไวยากรณ์ตรวจสอบเพื่อให้มั่นใจได้ผ่านการว่า หมายเลขที่ถูกต้องและชนิดของพารามิเตอร์เมธอดหรือคุณสมบัติ และค่าที่ส่งคืนจะเป็นชนิดที่คาดไว้ เนื่องจากงานน้อยกว่าจะจำเป็นต้องใช้ในขณะที่ดำเนินการเพื่อทำให้การเรียกไปยังคุณสมบัติหรือเมธอด รวมก่อนหน้าเป็นบางครั้งเร็วกว่า อย่างไรก็ตาม ถึงแม้ว่าการรวมก่อนหน้าอาจจะเร็วกว่า ผลต่างของประสิทธิภาพการทำงานเมื่อเปรียบเทียบกับการรวมภายหลังจะมัก negligible

ก่อนการผูกมี disadvantage รองที่ทำให้ที่ดังกล่าวสามารถเกิดปัญหาความเข้ากันได้รุ่นที่เป็นไปได้ ตัวอย่างเช่น สมมติว่า เซิร์ฟเวอร์ Automation ที่เช่น Microsoft Excel 2002 แนะนำใหม่วิธีหรือคุณสมบัติที่ไม่ใช้งานใน Excel 2000 หรือทำการเปลี่ยนแปลงคุณสมบัติที่มีอยู่หรือเมธอด การเปลี่ยนแปลงเหล่านี้อาจเปลี่ยนแปลงเค้าโครงแบบไบนารีของวัตถุ และทำให้เกิดปัญหากับโปรแกรมที่ Visual c# ประยุกต์ที่ใช้ข้อมูลชนิดของ Excel 2002 เพื่อทำให้ Excel 2000 แนะนำเพื่อหลีกเลี่ยงปัญหานี้ได้ ด้วยการรวมก่อนหน้า นั้นโดยทั่วไปให้ที่ คุณต้องใช้ข้อมูลชนิดสำหรับโปรแกรมประยุกต์ Office ที่คุณต้องการสนับสนุนเมื่อคุณพัฒนา และไคลเอนต์ทำงานอัตโนมัติของทดสอบ รุ่นแรกสุด

ขั้นตอนต่อไปนี้แสดงให้เห็นถึงวิธีการสร้างการทำงานอัตโนมัติไคลเอนต์ที่ใช้การรวมก่อนหน้า โปรดสังเกตว่า ตามที่แสดงขั้นตอน ก่อนมีการผูกต้องคุณสามารถอ้างอิงไลบรารีชนิดสำหรับไคลเอ็นต์การทำงานอัตโนมัติ

สร้างการทำงานอัตโนมัติไคลเอนต์ที่ใช้การรวมก่อนหน้า

  1. เริ่ม Microsoft Visual Studio .NET ในการแฟ้ม:เมนู คลิกใหม่แล้ว คลิกProject. เลือกแอพลิเคชันของ windowsจากชนิดโครงการ c# แสดงผล Form1 จะถูกสร้างขึ้นตามค่าเริ่มต้น
  2. เพิ่มการอ้างอิงไปยังการไลบรารีวัตถุ Microsoft Excel. โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. ในการProjectเมนู คลิกเพิ่มการอ้างอิง.
    2. ในการcomแท็บ ค้นหานี้Microsoft Excel การไลบรารีวัตถุคลิกเลือก.

      หมายเหตุ:office 2003 มีแอสเซมบลี Interop หลัก (PIAs) office XP ไม่สามารถรวม PIAs แต่จะสามารถดาวน์โหลดสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Office XP PIAs คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
      328912แอสเซ Microsoft Office XP หลัก interop มบลี (PIAs) พร้อมใช้งานสำหรับการดาวน์โหลด
    3. คลิกตกลงในการเพิ่มการอ้างอิงกล่องโต้ตอบเพื่อยอมรับการเลือกของคุณ ถ้าคุณได้รับการพรอมต์เพื่อสร้าง wrappers สำหรับไลบรารีที่คุณเลือก คลิกใช่.
  3. ในการมุมมองเมนู การเลือกกล่องเครื่องมือเมื่อต้องการแสดงในกล่องเครื่องมือ และเพิ่มปุ่มไป Form1
  4. คลิกสองครั้งbutton1. หน้าต่างรหัสสำหรับแบบฟอร์มปรากฏขึ้น
  5. ในหน้าต่างโค้ด ให้แทนที่โค้ดต่อไปนี้
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    with::
    private void button1_Click(object sender, System.EventArgs e)
    {
    	Excel.Application objApp;
    	Excel._Workbook objBook;
    	Excel.Workbooks objBooks;
    	Excel.Sheets objSheets;
    	Excel._Worksheet objSheet;
    	Excel.Range range;
    
    	try
    	{
    		// Instantiate Excel and start a new workbook.
    		objApp = new Excel.Application();
    		objBooks = objApp.Workbooks;
    		objBook = objBooks.Add( Missing.Value );
    		objSheets = objBook.Worksheets;
    		objSheet = (Excel._Worksheet)objSheets.get_Item(1);
    
    		range = objSheet.get_Range("A1", Missing.Value);
    
    		range.set_Value(Missing.Value, "Hello, World!" );
    
    		//Return control of Excel to the user.
    		objApp.Visible = true;
    		objApp.UserControl = true;
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }  
    					
  6. เลื่อนไปที่ด้านบนของหน้าต่างรหัส เพิ่มบรรทัดต่อไปนี้จุดสิ้นสุดของรายการการใช้directives:
    using System.Reflection;
    using Excel = Microsoft.Office.Interop.Excel;
    					

รวมภายหลัง

contrast การรวมก่อนหน้า ไม่มีการผูกรอจนกว่าเวลาที่ใช้ในการผูกคุณสมบัติและวิธีเรียกไปยังวัตถุเหล่านั้น เมื่อต้องการทำเช่นนี้ วัตถุปลายทางต้องใช้อินเทอร์เฟซ COM พิเศษ:IDispatch. กระบวนการIDispatch::GetIDsOfNamesวิธีที่อนุญาตให้ Visual c# เพื่อ interrogate วัตถุเกี่ยวกับวิธีการใดและคุณสมบัติสนับสนุนและIDispatch::Invokeวิธีแล้วให้ Visual c# การเรียกวิธีและคุณสมบัติเหล่านั้น รวมภายหลังในนี้ต้องมีประโยชน์ของการลบบางส่วนของการอ้างอิงของรุ่นที่อยู่ชั้น ด้วยการรวมก่อนหน้า อย่างไรก็ตาม มันได้ข้อเสียของการลบเช็คเวลาคอมไพล์บนความสมบูรณ์ของรหัสการดำเนินการอัตโนมัติ รวม ทั้งไม่ให้คุณลักษณะ Intellisense ที่สามารถทำให้เกิดการเรียกใช้ clues เพื่อแก้ไขการเรียกวิธีและคุณสมบัติ

เมื่อต้องการใช้รวมภายหลังใน Visual c# ใช้System.Type.InvokeMemberวิธีการ เรียกวิธีการนี้IDispatch::GetIDsOfNamesและIDispatch::Invokeเมื่อต้องการผูกกับวิธีการและคุณสมบัติของเซิร์ฟเวอร์ Automation

สร้างการทำงานอัตโนมัติไคลเอนต์ที่ใช้การรวมภายหลัง

  1. เริ่ม Microsoft Visual Studio .NET ในการแฟ้ม:เมนู คลิกใหม่แล้ว คลิกProject. เลือกแอพลิเคชันของ windowsจากชนิดโครงการ c# แสดงผล Form1 จะถูกสร้างขึ้นตามค่าเริ่มต้น
  2. ในการมุมมองเมนู การเลือกกล่องเครื่องมือเมื่อต้องการแสดงในกล่องเครื่องมือ และเพิ่มปุ่มไป Form1
  3. คลิกสองครั้งbutton1. หน้าต่างรหัสสำหรับแบบฟอร์มปรากฏขึ้น
  4. ในหน้าต่างโค้ด ให้แทนที่โค้ดต่อไปนี้
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    						
    with::
    private void button1_Click(object sender, System.EventArgs e)
    {
    	object objApp_Late;
    	object objBook_Late;
    	object objBooks_Late;
    	object objSheets_Late;
    	object objSheet_Late;
    	object objRange_Late;
    	object[] Parameters;
    
    	try
    	{
    		// Get the class type and instantiate Excel.
    		Type objClassType; 
    		objClassType = Type.GetTypeFromProgID("Excel.Application"); 
    		objApp_Late = Activator.CreateInstance(objClassType);
    
    		//Get the workbooks collection.
    		objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", 
    		BindingFlags.GetProperty, null, objApp_Late, null );
    
    		//Add a new workbook.
    		objBook_Late = objBooks_Late.GetType().InvokeMember( "Add", 
    			BindingFlags.InvokeMethod, null, objBooks_Late, null );
    
    		//Get the worksheets collection.
    		objSheets_Late = objBook_Late.GetType().InvokeMember( "Worksheets",
    			BindingFlags.GetProperty, null, objBook_Late, null );
    
    		//Get the first worksheet.
    		Parameters = new Object[1];
    		Parameters[0] = 1;
    		objSheet_Late = objSheets_Late.GetType().InvokeMember( "Item", 
    			BindingFlags.GetProperty, null, objSheets_Late, Parameters );
    
    		//Get a range object that contains cell A1.
    		Parameters = new Object[2];
    		Parameters[0] = "A1";
    		Parameters[1] = Missing.Value;
    		objRange_Late = objSheet_Late.GetType().InvokeMember( "Range",
    			BindingFlags.GetProperty, null, objSheet_Late, Parameters );
    
    		//Write "Hello, World!" in cell A1.
    		Parameters = new Object[1];
    		Parameters[0] = "Hello, World!";
    		objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
    			null, objRange_Late, Parameters );
    
    		//Return control of Excel to the user.
    		Parameters = new Object[1];
    		Parameters[0] = true;
    		objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    		objApp_Late.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }
    					
  5. เลื่อนไปที่ด้านบนของหน้าต่างรหัส เพิ่มบรรทัดต่อไปนี้จุดสิ้นสุดของรายการการใช้directives:
    using System.Reflection; 
    					

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

สำหรับข้อมูลเพิ่มเติม โปรดแวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft Developer Network (MSDN)::
Microsoft Office การพัฒนากับ Visual Studio
.aspx http://msdn2.microsoft.com/en-us/library/aa188489 (office.10)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรวม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
245115ใช้การรวมก่อนหน้าและการรวมภายหลังในการทำงานอัตโนมัติ
244167เขียนเครื่องไคลเอนต์ในการทำงานอัตโนมัติสำหรับหลายรุ่นของ Office
247579ใช้ DISPID รวมถึงการทำให้โปรแกรมประยุกต์ Office เมื่อใดก็ ตามที่เป็นไปได้

คุณสมบัติ

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

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

 

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