Excel User-Defined-Functions (UDF) Automation Add-In 1 พร้อมตัวติดตั้งแบบรวม ทั้งคู่เขียนใน VB.Net
โซลูชัน Microsoft Visual Studio 2022 เต็มรูปแบบและซอร์สโค้ดโปรเจ็กต์
มีตัวติดตั้งสำหรับ Office / Excel ทั้ง 32 บิตและ 64 บิต
คลิกที่รุ่น > เนื้อหาเพื่อดูตัวอย่างที่สร้างไว้ล่วงหน้า
ฟังก์ชันที่ผู้ใช้กำหนดของ Excel (UDF) ที่พัฒนาใน VB.Net มีมานานหลายปีแล้ว ตัวอย่างแรกๆ ได้แก่ -
http://www.cpearson.com/Excel/CreatingNETFunctionLib.aspx
https://www.codeproject.com/Articles/7753/Create-an-Automation-Add-In-for-Excel-using-NET
แม้ว่าฟังก์ชันเหล่านี้จะทำงานได้ดี แต่การปรับใช้อาจเป็นปัญหาได้มากกว่า โดยเฉพาะอย่างยิ่งในกรณีที่ผู้ใช้อาจไม่คุ้นเคย หรือได้รับอนุญาตให้เรียกใช้โปรแกรมอรรถประโยชน์บรรทัดคำสั่ง เช่น Regasm เพื่อทำการติดตั้งให้เสร็จสมบูรณ์
เป้าหมายการออกแบบสำหรับโครงการนี้คือ:-
ต้องใช้พีซี Windows ที่ติดตั้งซอฟต์แวร์ต่อไปนี้เพื่อสร้างโซลูชัน
ขอแนะนำให้ 'สร้างใหม่' ของส่วนประกอบข้างต้นทั้งหมด บนพีซีสำหรับการพัฒนาโดยเฉพาะ หากเป็นไปได้ และเมื่อมีการอัปเดตทั้งหมด
Visual Studio ควรมีการติดตั้งรายการต่อไปนี้
ยูทิลิตี้ต่อไปนี้มีประโยชน์ในการตรวจสอบกระบวนการลงทะเบียน แต่ไม่ได้บังคับ
Automation Add-In ได้รับการลงทะเบียนระหว่างกระบวนการติดตั้ง
จำเป็นต้องเขียนค่าที่แตกต่างกันลงใน Registry สำหรับ Office เวอร์ชัน 32 บิตและ 64 บิต
คลาสตัวติดตั้งจัดเตรียมค่าเหล่านี้ คุณสมบัติการดำเนินการแบบกำหนดเองถูกตั้งค่าสำหรับเวอร์ชันที่ต้องการในแต่ละโปรเจ็กต์ตัวติดตั้ง
มีโปรเจ็กต์ตัวติดตั้ง Office แบบ 32 บิตและ 64 บิตแยกกัน และควรสร้างขึ้นสำหรับแต่ละเวอร์ชันที่ต้องการ
Visual Studio สร้างไฟล์เอาต์พุตสอง setup.exe
และ AUTO_INSTALLER_nn.msi
จากแต่ละโครงการตัวติดตั้ง
ไฟล์ใดไฟล์หนึ่งเหล่านี้สามารถแจกจ่ายและเรียกใช้โดยผู้ใช้ปลายทาง เพื่อติดตั้งและถอนการติดตั้งได้ตามต้องการ
หลังจากรันโปรแกรมติดตั้ง ผู้ใช้จำเป็นต้องกำหนดค่า Excel เพื่อเปิดใช้งาน Automation Add-In
จาก Excel > ไฟล์ > ตัวเลือก > Add-In > จัดการ Add-In ของ Excel
คลิกที่ Automation เลื่อนลงและเลือก AUTOMATION.Functions
คลิกตกลงเพื่อยืนยัน
มีสูตร Excel ตัวอย่างสองสูตรมาให้
=IFX()
ในเซลล์แผ่นงานจะส่งกลับสตริงข้อความ AUTO FX OK
=TIMENOW()
ในเซลล์แผ่นงานส่งคืนเวลาปัจจุบันเป็นมิลลิวินาที เช่น 12:34:56.789
นี่คือฟังก์ชัน 'ผันผวน' และจะคำนวณใหม่เมื่อกดปุ่ม F9 หรือเซลล์อื่นมีการเปลี่ยนแปลง
ฟังก์ชันที่นำเสนอโดย Add-In สามารถแสดงรายการได้โดยการคลิกที่สูตร > แทรกฟังก์ชัน และเลือกอัตโนมัติ ฟังก์ชันเป็นหมวดหมู่
ผู้ใช้สามารถถอนการติดตั้ง Add-In ได้โดยคลิกขวาที่ปุ่ม Windows Start และเลือก Apps and Features
เลื่อนลงไปที่ Automation FX แล้วเลือกถอนการติดตั้ง
Class module Installer.vb
ดำเนินการลงทะเบียน Assembly และการอัปเดตรีจิสทรีที่จำเป็นเมื่อนักพัฒนาหรือผู้ใช้ปลายทางรันโปรแกรมติดตั้ง .exe หรือ .msi
แท็ก <System.ComponentModel.RunInstaller(True)>
ได้รับการจัดเตรียมโดยอัตโนมัติโดย vb.net ในไฟล์ Installer.Designer.vb
เมื่อมีการเพิ่มโมดูลคลาส Installer ใหม่ในโครงการ
แท็กนี้ถูกใช้โดยโปรแกรมติดตั้งเพื่อเรียก Public Overrides Sub Install(stateSaver As IDictionary)
ผ่านคุณสมบัติการดำเนินการแบบกำหนดเองในโปรเจ็กต์ AUTO_INSTALLER_32 และ AUTO_INSTALLER_64
จากนั้น Install
ย่อยจะเรียก RegisterAssembly
ซึ่งเทียบเท่ากับฟังก์ชัน 2 เพื่อเรียกใช้ RegAsm.exe
ด้วยตนเอง
RegAsm.exe
ใช้วิธีการเปิดเผยโดย RegistrationServices 3
ควรสังเกตประเด็นต่อไปนี้เสมอเพื่อหลีกเลี่ยงการดำเนินการอัปเดตรีจิสทรีที่ขัดแย้งกันระหว่างการพัฒนาและการทดสอบ
ในโปรเจ็กต์ AUTO_FUNCTIONS > คุณสมบัติ ไม่ ควรเลือกตัวเลือกด้านล่างเมื่อใดก็ได้
Register for COM Interop
ในส่วนการคอมไพล์ Make assembly COM-Visible
ในส่วน Application > Assembly Information แท็ก <ComRegisterFunction>
และ <ComUnRegisterFunction>
ไม่ ควรใช้ในโมดูลใดๆ
ในแต่ละโปรเจ็กต์ > คุณสมบัติเอาต์พุตหลัก รีจิสเตอร์ควรตั้งค่าเป็น vsdrpDoNotRegister
ควรพัฒนา Production Build ใหม่เพื่อให้แน่ใจว่า GUID ทั้งหมดไม่ซ้ำกัน และรวมการอัปเดต การอ้างอิง และการขึ้นต่อกันของ Visual Studio ทั้งหมดเข้าด้วยกัน
https://support.microsoft.com/en-us/topic/excel-com-add-ins-and-automation-add-ins-91f5ff06-0c9c-b98e-06e9-3657964eec72 ↩
https://learn.microsoft.com/en-us/dotnet/framework/interop/registering-assemblies-with-com ↩
https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.registrationservices?view=netframework-4.8.1 ↩