สรุป
บทความนี้ตอบคำถามทั่วไปเกี่ยวกับการทำงานอัตโนมัติของ Microsoft Office จาก Visual C++
ข้อมูลเพิ่มเติม
สารบัญ
-
ทำงานอัตโนมัติคืออะไร
-
ฉันเพิ่งเริ่มทำงานอัตโนมัติ ที่ฉันสามารถค้นหาทรัพยากรที่ดีในการเรียนรู้เพิ่มเติมได้อย่างไร
-
มีวิธีอื่นที่ฉันสามารถใช้ระบบอัตโนมัติหรือไม่
-
COM คืออะไร
-
วิธีทำฉันแนบกับอินสแตนซ์ของโปรแกรมประยุกต์ Office ที่กำลังทำงานอยู่หรือไม่
-
วิธีทำฉันจึงส่งผ่านพารามิเตอร์หรือไม่ก็ได้
-
วิธีทำฉันจึงตรวจจับเหตุการณ์ที่แสดง โดยโปรแกรมประยุกต์ของ Office
-
รหัสการดำเนินการอัตโนมัติของฉันช้าเกินไป วิธีสามารถฉันเร็วหรือไม่
-
สิ่งใดเหล่านี้ใหญ่มากค่าความผิดพลาด เช่น-2147352573 หรือ 0x80030002 หมายถึงอะไร
-
ไลบรารีชนิดคืออะไร
-
รหัสการดำเนินการอัตโนมัติของฉันทำงานกับ Microsoft Excel 95 แต่ล้มเหลวกับ Microsoft Excel 97 เหตุใด
-
ทำไมไม่แอพลิเคชันกำลังทำโดยอัตโนมัติอยู่ในหน่วยความจำหลังจากเสร็จสิ้นการโปรแกรมของฉันได้อย่างไร
-
ฉันทราบว่าสิ่งที่ฉันต้องการทำเป็นผู้ใช้แอพลิเคชัน Microsoft Office แต่วิธีอย่างนี้โดยทางโปรแกรมโดยใช้ระบบอัตโนมัติหรือไม่
-
ฉันสามารถทำโปรแกรมประยุกต์ Microsoft Office ที่ฝังตัวหรือไม่
-
วิธีทำเข้าคุณสมบัติเอกสารของฉันในเอกสาร Microsoft Office
คำถามและคำตอบ
-
ทำงานอัตโนมัติคืออะไร Automation (เดิมคือ OLE Automation) เป็นเทคโนโลยีที่ช่วยให้คุณสามารถใช้ประโยชน์จากฟังก์ชันการทำงานของโปรแกรมที่มีอยู่ และรวบรวมลงในโปรแกรมประยุกต์ของคุณเอง ตัวอย่างเช่น คุณสามารถใช้ Microsoft Word การการสะกดและไวยากรณ์ตรวจสอบความสามารถในการเข้าไปในโปรแกรมประยุกต์ของคุณโดยไม่มี Microsoft Word ที่มองเห็นได้โดยผู้ใช้ของคุณ แม้ว่าคุณสามารถใช้ Microsoft Excel การสร้างแผนภูมิ พิมพ์ และข้อมูลการวิเคราะห์เครื่องมือทั้งหมด เทคโนโลยีนี้สามารถทำให้ง่ายขึ้นอย่างมาก และความเร็วของการพัฒนา
-
ฉันเพิ่งเริ่มทำงานอัตโนมัติ ที่ฉันสามารถค้นหาทรัพยากรที่ดีในการเรียนรู้เพิ่มเติมได้อย่างไร 24 บทของธิติ Kruglinski "ภายใน Visual C++" (ISBN:1-57231-565 - 2) ให้ภาพรวมทางทั่วไปรวมทั้งตัวอย่างที่ยอดเยี่ยม นอกจากนี้ ฐานความรู้ของ Microsoft เป็นแหล่งข้อมูลดี บทความนี้เองเป็นจุดเริ่มต้นดี และคุณสามารถค้นหาข้อมูลอ้างอิงที่เฉพาะเจาะจงมากขึ้นในบทความในฐานความรู้ของ Microsoft ต่อไปนี้:
ค้นหาทรัพยากรศึกษา OLE Automationถ้าคุณต้องการเรียนรู้ตามตัวอย่าง โปรดดูบทความในฐานความรู้ของ Microsoft ต่อไปนี้:
HOWTO ใช้ MFC เพื่อทำให้เป็นอัตโนมัติ Excel & สร้าง/รูปแบบสมุดงานใหม่
-
มีวิธีอื่นที่ฉันสามารถใช้ระบบอัตโนมัติหรือไม่ มีวิธีพื้นฐานสามที่คุณสามารถใช้ระบบอัตโนมัติ: MFC, #import และ C/c ++:
-
ด้วย MFC ใช้ ClassWizard Visual C++ เพื่อสร้าง "คลาส wrapper" จากไลบรารีชนิด Microsoft Office คลาสที่เหล่านี้ ตลอดจนคลาสอื่น ๆ MFC เช่น COleVariant, COleSafeArray, COleException ทำงานของระบบอัตโนมัติ วิธีนี้มักจะขอแนะนำทางอื่น ๆ และตัวอย่างฐานความรู้ของ Microsoft ส่วนใหญ่ใช้ MFC
-
#import ไดเรกทีฟแบบใหม่ที่มีสถานะเป็นพร้อมใช้งานกับ 5.0 Visual C++ สร้าง VC ++ "ตัวชี้สมาร์ท" จากไลบรารีชนิดที่ระบุ จะมีประสิทธิภาพมาก แต่มักจะไม่แนะนำเนื่องจาก มีการอ้างอิง - ตรวจนับปัญหาที่จะเกิดขึ้นเมื่อใช้กับโปรแกรมประยุกต์ของ Microsoft Office
-
ระบบอัตโนมัติสำหรับการ C/c ++เป็นส่วนใหญ่ยาก แต่บางครั้งจำเป็นเพื่อหลีกเลี่ยงค่าโสหุ้ยกับ MFC หรือปัญหาเกี่ยวกับ #import ทั่วไป คุณทำงานกับ APIs ดังกล่าวเป็น CoCreateInstance() และ COM อินเตอร์เฟสเช่น IDispatch และ IUnknown
เป็นสิ่งสำคัญที่ต้องหมายเหตุว่า มีความแตกต่างบางเล็กระหว่างการทำงานอัตโนมัติจาก c ++เมื่อเปรียบเทียบกับ C แบบธรรมดา เพราะ COM ถูกกำหนดไว้รอบ ๆ คลาส c ++ สำหรับข้อมูลเพิ่มเติม โปรดดูบทความใน Microsoft Knowledge Base สำหรับเป็นตัวอย่างของ C ต่อไปนี้:
HOWTO: ใช้ OLE Automation จากโปรแกรมประยุกต์ C
-
-
COM คืออะไร ระบบอัตโนมัติจะขึ้นอยู่กับรูปแบบวัตถุคอมโพเนนต์ (COM) COM เป็นสถาปัตยกรรมของซอฟต์แวร์มาตรฐานขึ้นอยู่กับอินเทอร์เฟส และออกแบบมาให้มีรหัสที่ถูกแยกเป็นวัตถุที่มีอยู่ด้วยตนเอง คิดว่า เป็นส่วนขยาย ของ paradigm วัตถุที่เกี่ยวข้องกับการเขียนโปรแกรม (OOP) แต่สามารถใช้ได้กับแอพลิเคชันแยกต่างหาก แต่ละวัตถุแสดงชุดของอินเทอร์เฟส และติดต่อสื่อสารทั้งหมดไปยังวัตถุ เช่นการเริ่มต้น การแจ้งเตือน และโอน ย้ายข้อมูล เกิดขึ้นโดยผ่านอินเตอร์เฟซเหล่านี้ COM เป็นชุดบริการที่มีให้ โดยการเชื่อมโยงแบบไดนามิกไลบรารี (Dll) ติดตั้งอยู่กับระบบปฏิบัติการ ระบบอัตโนมัติใช้บริการเหล่านั้นจำนวนมาก ตัวอย่างหนึ่งคือ "Marshalling" การบริการ ซึ่งแพคเกจของโปรแกรมประยุกต์ไคลเอ็นต์ที่เรียกใช้ฟังก์ชันสมาชิกของอินเทอร์เฟซของโปรแกรมประยุกต์เซิร์ฟเวอร์ และส่งผ่านเร็กคอร์ดที่ มีอาร์กิวเมนต์ของพวกเขา ไปยังเซิร์ฟเวอร์โปรแกรมประยุกต์ จะทำให้ดูเหมือน ว่า อินเทอร์เฟซของเซิร์ฟเวอร์จะถูกเปิดเผยในของไคลเอ็นต์พื้นที่หน่วยความจำ ซึ่งไม่ใช่เป็นกรณีเมื่อไคลเอนต์เป็น.exe ทำงานอยู่ในพื้นที่ของกระบวนการของตนเอง เรียงข้อมูลยังได้รับค่าที่ส่งกลับจากวิธีการของเซิร์ฟเวอร์กลับ ข้ามขอบเขตของกระบวนการ และอย่างปลอดภัยไว้ ในมือของการเรียกของไคลเอ็นต์ มีบริการอื่น ๆ มากมายที่จำเป็นต่อการทำงานอัตโนมัติที่กำหนดไว้ในไลบรารี COM ต่าง ๆ แหล่งที่มาของข้อมูลที่เกี่ยวกับรวม "ภายใน Ole –ฉบับ" โดย Kraig Brockschmidt, ISBN 1-55615-843-2 "ภายใน COM" โดย "อ้างอิงของนักเขียนโปรแกรม Automation และ Dale Rogerson - ISBN 1-57231-349-8, ISBN 1-57231-584-9
-
วิธีทำฉันแนบกับอินสแตนซ์ของโปรแกรมประยุกต์ Office ที่กำลังทำงานอยู่หรือไม่ ใช้ GetActiveObject() API เซิร์ฟเวอร์ automation ที่ลงทะเบียนตัวเองในการดูสีลอก (เรียกใช้ออบเจ็กต์ตาราง), ผ่านทาง API แบบ RegisterActiveObject() ไคลเอนต์ automation สามารถเรียกใช้ในอินสแตนซ์ที่กำลังทำงานอยู่กับรหัสเช่น:
// Translate server ProgID into a CLSID. ClsidFromProgID // gets this information from the registry. CLSID clsid; CLSIDFromProgID(L"Excel.Application", &clsid); // Get an interface to the running instance, if any.. IUnknown *pUnk; HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk); ASSERT(!FAILED(hr)); // Get IDispatch interface for Automation... IDispatch *pDisp; hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp); ASSERT(!FAILED(hr)); // Release the no-longer-needed IUnknown... pUnk->Release();
หมายเหตุ: ถ้ามีหลายอินสแตนซ์การทำงานของโปรแกรมประยุกต์ Office ที่คุณต้องการแนบ คุณจะสามารถแนบกับอินสแตนซ์แรกที่ถูกเปิดใช้แล้วโดยใช้ GetActiveObject() API ใน คุณสามารถทำซ้ำในการดูสีลอกสำหรับแต่ละอินสแตนซ์แต่ละ แต่โปรแกรมประยุกต์ Office ไม่ลงทะเบียนตนเองถ้าอินสแตนซ์อื่นอยู่แล้วในการดูสีลอกเนื่องจากมอนิเกอร์ตัวเองไว้เสมอ (จะไม่สามารถจำแนกต่อไป) ซึ่งหมายความ ว่า คุณไม่สามารถแนบกับอินสแตนซ์ใด ๆ ยกเว้นตัวแรก อย่างไรก็ตาม เนื่องจากในโปรแกรมประยุกต์ Office ยังทะเบียนเอกสารของตนในการดูสีลอก คุณสามารถเรียบร้อยแล้วแนบกับอินสแตนซ์อื่น โดยการดูสีลอกค้นหาเอกสารเฉพาะ แนบ แล้ว การรับวัตถุโปรแกรมประยุกต์จากนั้นทำซ้ำ ไม่มีรหัสบางอยู่ในบทความฐานความรู้ของ Microsoft ต่อไปนี้สำหรับการดูสีลอกทำซ้ำ และค้นหาชื่อเอกสาร:
HOWTO: รับ IDispatch ของ Excel หรือเอกสาร Word จากการ OCXคุณไม่จำเป็นต้องทำเช่นนี้สำหรับ PowerPoint เนื่องจากเป็นโปรแกรมประยุกต์สแตนซ์เดียว คุณสามารถมีอินสแตนซ์หนึ่งของการทำงานเท่านั้น
-
วิธีทำฉันจึงส่งผ่านพารามิเตอร์หรือไม่ก็ได้ วิธีการบางอย่างมีพารามิเตอร์ "หรือไม่ก็ได้" ใน Visual Basic คุณสามารถ casually ละเว้นเหล่านั้นเมื่อมีการเรียกเมธอด อย่างไรก็ตาม เมื่อเรียก ด้วย Visual C++ คุณจำเป็นต้องผ่านตัวแปรพิเศษที่มีฟิลด์.vt คือ VT_ERROR และฟิลด์.scode DISP_E_PARAMNOTFOUND นั่นก็คือ:
// VARIANT used in place of optional-parameters. VARIANT varOpt; varOpt.vt = VT_ERROR; varOpt.scode = DISP_E_PARAMNOTFOUND;
นี่คือจริง ๆ สิ่งที่ Visual Basic จะทำ behind-the-scenes
-
วิธีทำฉันจึงตรวจจับเหตุการณ์ที่แสดง โดยโปรแกรมประยุกต์ของ Office โดยปกติแล้วคุณใช้อินเทอร์เฟซสำหรับเหตุการณ์ที่คุณต้องการตรวจจับ ("รับ"), และการตั้งค่าการเชื่อมต่อแบบคำแนะนำกับแอพลิเคชัน ("ต้นทาง") บทความต่อไปนี้แสดงตัวอย่างแต่ละขั้นตอนสำหรับ Microsoft Word:
HOWTO: ตรวจจับเหตุการณ์แอพลิเคชัน Microsoft Word97 โดยใช้ VC ++โดยทั่วไป การเซ็ตอัพการเชื่อมต่อคำแนะนำ คุณได้รับ IConnectionPointContainer ของเซิร์ฟเวอร์ และโทร FindConnectionPoint() กับ IID ของอินเทอร์เฟซของเหตุการณ์ ซึ่งทำให้คุณอินเทอร์เฟส IConnectionPoint และทั้งหมดที่เหลือจะเรียก Advise() กับอินสแตนซ์ของอินเทอร์เฟซของเหตุการณ์ เซิร์ฟเวอร์จะเรียกกลับผ่านอินเทอร์เฟซนี้เมื่อมีเหตุการณ์เหล่านี้เกิดขึ้น
-
รหัสการดำเนินการอัตโนมัติของฉันช้าเกินไป วิธีสามารถฉันเร็วหรือไม่ สาเหตุทั่วไปของปัญหาความเร็วในการทำงานอัตโนมัติกับการอ่าน และเขียนข้อมูลซ้ำได้ นี่เป็นเรื่องปกติสำหรับไคลเอนต์ทำงานอัตโนมัติใน Excel อย่างไรก็ตาม คนส่วนใหญ่ไม่ทราบว่า ข้อมูลนี้มักจะสามารถเขียน หรืออ่านได้ทั้งหมดในครั้งเดียวโดยใช้ SAFEARRAY ดูบทความฐานความรู้ของ Microsoft ต่อไปนี้สำหรับข้อมูลเพิ่มเติมและข้อมูลตัวอย่าง:
HOWTO: ใช้ MFC เพื่อทำให้เป็นอัตโนมัติ Excel และกรอกข้อมูลช่วงกับอาร์เรย์
HOWTO: ใช้ MFC เพื่อทำให้เป็นอัตโนมัติ Excel & รับอาร์เรย์จากช่วง
HOWTO: ใช้ MFC เพื่อทำให้เป็นอัตโนมัติ Excel และสร้าง/รูปแบบสมุดงานใหม่นอกจากนี้ จึงควรชี้ว่า ใช้คลิปบอร์ดสามารถบางครั้งการปรับปรุงประสิทธิภาพการทำงานออก ตัวอย่างเช่น คุณสามารถคัดลอกข้อมูลของคุณไปยังคลิปบอร์ด ให้ใช้ระบบอัตโนมัติเพื่อแจ้งเซิร์ฟเวอร์เมื่อต้องการวางไว้ หรือกลับ กัน บอกเซิร์ฟเวอร์เพื่อคัดลอกคลิปบอร์ด และวางลงในโปรแกรมประยุกต์ของคุณ
-
ค่าเหล่านี้ข้อผิดพลาดที่ใหญ่มาก เช่น-2147352573 หรือค่าเฉลี่ย 0x80030002 ทำอะไรได้บ้าง ค่าเหล่านี้จะถูกเรียกว่า HRESULTs และมีกำหนดใน winerror.h หมายเลขมีขนาดใหญ่ดังนั้นเนื่องจากบิตแรกแสดงว่าเป็นผลลัพธ์ผิดพลาดหรือไม่ คุณสามารถใช้ยูทิลิตี ErrLook.Exe ที่มาพร้อมกับ Visual C++ การแปลตัวเลขเหล่านี้เป็นคำอธิบายที่มีความหมาย ถ้าคุณต้องการดูคำอธิบายสำหรับข้อผิดพลาดทางการเขียนโปรแกรม คุณสามารถใช้ FormatMessage() API ดูบทความฐานความรู้ของ Microsoft ต่อไปนี้สำหรับข้อมูลเพิ่มเติมและตัวอย่างในการใช้ของ FormatMessage():
ข้อมูล: การแปลข้อผิดพลาดระบบอัตโนมัติสำหรับ VB/VBA
ตัวอย่าง : Decode32 และข้อผิดพลาด OLE Decode16 รหัสเครื่องมือถอดรหัสหมายเหตุ: ถ้าคุณกำลังใช้ Visual C++ 6.0 และมีตัวแปรที่ประกอบด้วยค่านี้ได้ในหน้าต่างการตรวจสอบการตรวจแก้จุดบกพร่อง ผนวก ", hr " (โดยไม่ใส่เครื่องหมายอัญประกาศ) เพื่อให้มี Visual C++ แปลนั้นสำหรับคุณ
-
ไลบรารีชนิดคืออะไร ไลบรารีชนิดจะคล้ายคลึงกับแฟ้มส่วนหัวของ C/c ++ ประกอบด้วยอินเทอร์เฟส วิธี และคุณสมบัติที่มีการเผยแพร่เซิร์ฟเวอร์ คุณสามารถดูไลบรารีชนิดที่ มีตัวแสดงวัตถุ OLE/COM (Oleview.exe) ที่มาพร้อมกับ Visual C++ นี่คือรายการของชื่อแฟ้มในไลบรารีชนิดสำหรับ Microsoft Office 95, 97 และ 2000: Office Application | Type library ------------------------+---------------- Word 95 and prior | wb70en32.tlb Excel 95 and prior | xl5en32.olb Powerpoint 95 and prior | Powerpoint.tlb Access 95 and prior | msaccess.tlb Binder 95 | binder.tlb Schedule+ | sp7en32.olb Project | pj4en32.olb Team Manager | mstmgr1.olb Word 97 | msword8.olb Excel 97 | excel8.olb Powerpoint 97 | msppt8.olb Access 97 | msacc8.olb Binder 97 | msbdr8.olb Graph 97 | graph8.olb Outlook 97 | msoutl8.olb Outlook 98 | msoutl85.olb Word 2000 | msword9.olb Excel 2000 | excel9.olb Powerpoint 2000 | msppt9.olb Access 2000 | msacc9.olb Outlook 2000 | msoutl9.olb Word 2002 | msword.olb Excel 2002 | excel.exe Powerpoint 2002 | msppt.olb Access 2002 | msacc.olb Outlook 2002 | msoutl.olb
-
รหัสการดำเนินการอัตโนมัติของฉันทำงานกับ Excel 95 แต่ล้มเหลวกับ Excel 97 เกิดอะไรขึ้น รูปแบบวัตถุสำหรับ Excel ทำการเปลี่ยนแปลงสำคัญจากรุ่น 95 กับ 97 Excel 95 ได้ใช้เมธอดและคุณสมบัติของทั้งหมดในการดำเนินการเดียวของ IDispatch ความหมาย ว่า บ่อยครั้งคุณไม่สามารถเรียกวิธีการออกอินวอยซ์แล้วสำหรับวัตถุ X, Y ของวัตถุ ไม่ใช่การออกแบบที่ดี ดังนั้นใน Office 97 วัตถุแต่ละชิ้นมีของตัวเอง แยกใช้งาน Idispatch ซึ่งหมายความ ว่า ถ้าคุณขอให้เมธอดหรือคุณสมบัติจากวัตถุ X จาก Y วัตถุแยกต่างหาก คุณได้รับข้อผิดพลาด 0x80020003, -2147352573, "ไม่พบสมาชิก" เมื่อต้องการหลีกเลี่ยงข้อผิดพลาดนี้ คุณจำเป็นเพื่อให้แน่ใจว่า คุณทำการเรียกจากอินเทอร์เฟซ IDispatch อยู่ภายใต้ semantically ถูกต้อง ดูบทความฐานความรู้ของ Microsoft ต่อไปนี้สำหรับข้อมูลเพิ่มเติม:
HOWTO: "ไม่พบสมาชิก" 0x80020003 การแก้ไขปัญหาข้อผิดพลาด
-
แอพลิเคชันกำลังทำโดยอัตโนมัติอยู่ในหน่วยความจำหลังจากเสร็จสิ้นการโปรแกรมของฉัน เกิดอะไรขึ้น น่า ทั้งนี้เนื่องจากคุณได้ลืมที่จะนำออกใช้อินเทอร์เฟซที่ถูกซื้อมา และคุณจำเป็นต้องติดตามดังกล่าวลง ต่อไปนี้คือบางคำแนะนำทั่วไป และสิ่งที่ต้องค้นหา:
-
ถ้าคุณกำลังใช้ #import ไม่น่าคุณไม่สามารถเรียกใช้เบอร์บักการตรวจนับอ้างอิงที่เชื่อมโยงอยู่ด้วย บ่อยครั้งบักสามารถทำรอบ ๆ แต่โดยปกติแล้วจะเป็นที่ต้องการใช้วิธีการอย่างใดอย่างหนึ่งวิธีดำเนินการอัตโนมัติอื่น ๆ #import ไม่ทำงานอย่างมีประสิทธิภาพกับโปรแกรมประยุกต์ Office เนื่องจากไลบรารีชนิดและการใช้งานค่อนข้างซับซ้อน นอกจากนี้ ปัญหาการตรวจนับอ้างอิงดังกล่าวจะยากต่อการติดตามลงได้เนื่องจากการเรียก COM อินเทอร์เฟซระดับมากมาย behind-the-scenes เมื่อใช้ #import
-
ตรวจสอบเพื่อดูถ้าคุณกำลังเรียกใด ๆ วิธีการ เช่นเปิด สร้าง ที่ส่งกลับค่าการ IDispatch * (LPDISPATCH), และละเว้นค่าที่ส่งคืน ถ้าคุณกำลัง แล้วคุณจะ abandoning อินเทอร์เฟซนี้ส่งคืน และจะต้องเปลี่ยนรหัสของคุณเพื่อให้คุณนำออกใช้เมื่อจำเป็น
-
ใส่คำบรรยายทีละน้อยส่วนของโค้ดของคุณจนกว่าปัญหาหายไป จาก นั้นเพิ่มกลับ judiciously เพื่อติดตามลงจุดเริ่มต้นของปัญหา
-
หมายเหตุว่า โปรแกรมประยุกต์บางโปรแกรมจะยังคงทำงานอยู่ถ้าผู้ใช้มี "touched" แอพลิเคชัน ถ้าเหตุการณ์นี้เกิดขึ้นในขณะที่คุณทำโดยอัตโนมัติ แล้วแอพลิเคชันจะอาจจะยังคงทำงานหลังจากนี้ โปรแกรมประยุกต์ Office ที่มีคุณสมบัติ "UserControl" บนแอพลิเคชันออปเจ็กต์ที่คุณสามารถอ่าน/เขียนเพื่อเปลี่ยนลักษณะการทำงานนี้
-
นอกจากนี้ โปรแกรมประยุกต์บางโปรแกรมจะตัดสินใจว่า จะยังคงทำงานอยู่ถ้าเกิดพอส่วนติดต่อผู้ใช้ "การกระทำ" ถ้าคุณกำลังตั้งใจแอพลิเคชันเพื่อจบการทำงาน เรียกวิธีการ Quit() บนแอพลิเคชันออบเจ็กต์ Word จะปิดระบบโดยไม่คำนึงถึงจำนวนของการอ้างอิงเมื่อเรียกว่า Quit นี่ไม่ลักษณะการทำงานที่คาดไว้ของ COM Excel อย่างไรก็ตาม จะได้อย่างถูกต้องเพียงแค่ซ่อนตัวเอง แต่ยังคงทำงานอยู่จนกว่าการอินเตอร์เฟสที่ค้างอยู่ทั้งหมดจะถูกนำออกใช้ โดยทั่วไป คุณควรปล่อยการอ้างอิงทั้งหมดที่คงค้าง และโทร Quit() เท่านั้น ถ้าคุณต้องการให้โปรแกรมประยุกต์จบการทำงาน
-
-
ฉันทราบว่าสิ่งที่ฉันต้องการทำเป็นผู้ใช้แอพลิเคชัน Office แต่วิธีอย่างนี้โดยทางโปรแกรม โดยอัตโนมัติหรือไม่ สิ่งที่คุณสนใจคือ อะไรวัตถุ วิธี และคุณสมบัติคุณจำเป็นต้องใช้ วิธีดีที่สุดเมื่อต้องการเรียนรู้วิธีการนำทางไปยังรูปแบบวัตถุ ของ Word, Excel, Powerpoint ขึ้นอยู่กับสิ่งที่คุณต้องการทำเป็นผู้ใช้ มีการ ใช้ตัวบันทึกแมโคร เพียงแค่เลือก Macro\ 'บันทึกแมโคใหม่' จากเมนูเครื่องมือ ดำเนินงานคุณสนใจ จาก นั้นเลือก 'หยุดการบันทึก ' Macro\ หลังจากที่คุณเสร็จสิ้นการบันทึก เลือก Macro\Macros จากเมนูเครื่องมือ เลือกแมโครที่คุณบันทึก จาก นั้นคลิก'แก้ไข นี้จะนำคุณไปสร้างรหัส VBA ที่จะทำงานคุณบันทึกไว้ ระลึกแมโครที่บันทึกไว้จะไม่รหัสได้ดีที่สุดในกรณีส่วนใหญ่ แต่วัตถุนั้นไม่ดีมากสำหรับตัวอย่างรวดเร็ว
-
ฉันสามารถทำโปรแกรมประยุกต์ Office ที่ฝังตัวหรือไม่ จริง ๆ เคล็ดลับคือการรับตัวชี้ IDispatch: นี้จะกำหนดเป็นแบบ Visual C++ ทางเทคนิคหมายเหตุ 39 (TN039) ดูบทความฐานความรู้ของ Microsoft ต่อไปนี้สำหรับตัวอย่างแบบทีละขั้นตอน:
HOWTO: ฝัง และทำแผ่นงาน Microsoft Excel ด้วย MFC
-
วิธีทำเข้าคุณสมบัติเอกสารของฉันในเอกสาร Office คุณสมบัติของเอกสารจะสามารถเข้าถึงได้โดย ผ่าน Automation หรือโดยตรงโดย ใช้ IPropertyStorage บทความฐานความรู้ของ Microsoft ต่อไปนี้สาธิตวิธีแต่ละวิธี:
HOWTO: ใช้ระบบอัตโนมัติในการดึงข้อมูลคุณสมบัติเอกสารที่มีอยู่ภายใน
HOWTO: อ่านคุณสมบัติเอกสารผสม ด้วย VC ++ โดยตรง