Kiều Mạnh
I don't program, I beat code into submission!!!
- Tham gia
- 9/6/12
- Bài viết
- 5,575
- Được thích
- 4,142
- Giới tính
- Nam
Tôi tách từ chủ đề sau từ bài #8 qua đây bàn luận nếu ai có nhu cầu tìm hiểu không làm loãng chủ đề sau
Keo ChatGPT viết bài sau .... Copy nguyên văn vào đây
Trong quá trình tìm hiểu và phát triển Excel Add-in theo chuẩn XLL (Excel C API), mình gặp một vấn đề khá thú vị và muốn mở chủ đề để mọi người cùng trao đổi kinh nghiệm.
Một XLL chuẩn chỉ được Excel nạp thông qua Excel C API với các hàm như:
Đây cũng là lý do vì sao trước đây XLL chủ yếu dùng để:
Nhìn bên ngoài:
MyAddin.xll<br>
rất dễ nghĩ rằng:
Theo mình hiểu, Excel-DNA đã xây dựng thêm một lớp trung gian, vừa đóng vai trò XLL để đăng ký UDF, vừa tự hiện thực cơ chế COM Add-in để Office có thể gọi Ribbon XML và các callback.
Nói cách khác, Ribbon của Excel-DNA không phải do XLL tự hỗ trợ, mà do framework của Excel-DNA hiện thực thêm.
Mình cũng từng thấy nhiều câu hỏi liên quan đến việc Ribbon trong Excel-DNA không tải hoặc lỗi GetCustomUI() khi đóng gói add-in, cho thấy Ribbon thực chất được cung cấp thông qua lớp framework này chứ không phải là tính năng sẵn có của XLL.
│
├── COM Add-in
│ ├── Ribbon
│ ├── TaskPane
│ └── Event
│
└── XLL
└── UDF
Đây có lẽ là cách phổ biến nhất.
Ưu điểm:
Đây chính là hướng Excel-DNA đang làm.
Ý tưởng là tự xây lớp bridge giữa:
Theo mình đây không phải là việc Microsoft hỗ trợ sẵn, mà là do người phát triển tự hiện thực thêm.
Nếu có thì mọi người đang xử lý Ribbon theo cách nào?
Vì vậy mình nghĩ đây là một chủ đề đáng để trao đổi:
Nếu chỉ dùng XLL thì mọi người giải quyết Ribbon như thế nào?
Rất mong được nghe thêm ý kiến, kinh nghiệm và các hướng triển khai từ mọi người.
Có lẽ rất nhiều người dùng đã quen với các dạng add-in mà Excel hỗ trợ, những dạng phổ biến hiện nay (không tính những add-in chỉ dùng cho các bản Office cũ hơn bản 2007) bao gồm .xlam và .xll, trong đó .xlam được viết bằng VBA, còn .xll được viết bằng C/C++ và một số ngôn ngữ lập trình khác như C#, Delphi, v.v., bất cứ ngôn ngữ lập trình nào hỗ trợ khả năng xuất ra DLL tiêu chuẩn (Standard DLL). Với .xlam, người dùng có thể tương tác sâu rộng với Excel cũng như có thể viết hàm tùy chỉnh (hoặc hàm do người dùng tự định nghĩa, user-defined function) để sử dụng trong bảng tính, trong khi...
- nguyendang95
- Trả lời: 7
- Diễn đàn: Excel và các ngôn ngữ lập trình khác
Keo ChatGPT viết bài sau .... Copy nguyên văn vào đây
Thảo luận: Ribbon cho XLL - Microsoft không hỗ trợ trực tiếp, vậy mọi người đang xử lý như thế nào?
Chào các Anh/Em,Trong quá trình tìm hiểu và phát triển Excel Add-in theo chuẩn XLL (Excel C API), mình gặp một vấn đề khá thú vị và muốn mở chủ đề để mọi người cùng trao đổi kinh nghiệm.
1. Microsoft có hỗ trợ Ribbon cho XLL không?
Theo những gì mình tìm hiểu thì câu trả lời là không.Một XLL chuẩn chỉ được Excel nạp thông qua Excel C API với các hàm như:
- xlAutoOpen
- xlAutoClose
- xlAutoRegister
- ...
- IRibbonExtensibility
- GetCustomUI()
Đây cũng là lý do vì sao trước đây XLL chủ yếu dùng để:
- UDF (User Defined Function)
- Command
- Menu kiểu Excel 2003 (Excel4 Macro)
- Các API của Excel C
2. Vậy tại sao Excel-DNA lại có Ribbon?
Đây là điều khá nhiều người (trong đó có mình trước đây) từng nhầm.Nhìn bên ngoài:
MyAddin.xll<br>
rất dễ nghĩ rằng:
Nhưng thực tế không phải vậy."XLL hỗ trợ Ribbon."
Theo mình hiểu, Excel-DNA đã xây dựng thêm một lớp trung gian, vừa đóng vai trò XLL để đăng ký UDF, vừa tự hiện thực cơ chế COM Add-in để Office có thể gọi Ribbon XML và các callback.
Nói cách khác, Ribbon của Excel-DNA không phải do XLL tự hỗ trợ, mà do framework của Excel-DNA hiện thực thêm.
Mình cũng từng thấy nhiều câu hỏi liên quan đến việc Ribbon trong Excel-DNA không tải hoặc lỗi GetCustomUI() khi đóng gói add-in, cho thấy Ribbon thực chất được cung cấp thông qua lớp framework này chứ không phải là tính năng sẵn có của XLL.
3. Nếu không dùng Excel-DNA thì sao?
Theo mình hiện nay có vài hướng.Hướng 1 - Tách riêng COM Add-in và XLL
Excel│
├── COM Add-in
│ ├── Ribbon
│ ├── TaskPane
│ └── Event
│
└── XLL
└── UDF
Đây có lẽ là cách phổ biến nhất.
Ưu điểm:
- Theo đúng kiến trúc Microsoft.
- Dễ bảo trì.
- Ribbon và UDF tách biệt.
- Phải triển khai hai thành phần.
Hướng 2 - Framework kiểu Excel-DNA
Một framework sẽ đảm nhiệm:- Excel C API
- COM
- Ribbon
- TaskPane
- Callback
Đây chính là hướng Excel-DNA đang làm.
Hướng 3 - Tự xây bridge
Đây là hướng mình đang quan tâm.Ý tưởng là tự xây lớp bridge giữa:
- Excel C API
- COM
- Ribbon
- Event
- TaskPane
Theo mình đây không phải là việc Microsoft hỗ trợ sẵn, mà là do người phát triển tự hiện thực thêm.
4. Một câu hỏi mình muốn thảo luận
Không biết trong diễn đàn có Anh/Em nào đang viết XLL bằng:- C++
- Delphi
- C++ Builder
- Rust
- Go
Nếu có thì mọi người đang xử lý Ribbon theo cách nào?
- Tách COM Add-in riêng?
- Dùng Excel-DNA?
- Dùng framework khác?
- Hay tự xây bridge?
5. Quan điểm cá nhân
Theo mình, việc Microsoft không tích hợp Ribbon trực tiếp vào chuẩn XLL có lẽ là do hai mô hình này được thiết kế cho hai mục đích khác nhau:- XLL tập trung vào hiệu năng và UDF.
- COM Add-in tập trung vào giao diện người dùng và khả năng mở rộng Office.
Vì vậy mình nghĩ đây là một chủ đề đáng để trao đổi:
Nếu chỉ dùng XLL thì mọi người giải quyết Ribbon như thế nào?
Rất mong được nghe thêm ý kiến, kinh nghiệm và các hướng triển khai từ mọi người.
