Lập trình C# tạo Add-ins cho excel.

Liên hệ QC
Thế có Share không hay nhá hàng thôi bác :D
Tối tôi sẽ chia sẻ 1 dự án mẫu, trong đó sẽ có 1 Ribbon chứa nút lệnh chèn dữ liệu vào ô đang chọn, nút lệnh mở 1 Form và một hàm tự tạo cho anh em nào có nhu cầu nghiên cứu.
 
Mới thử tìm cái thì thấy dna nó như sau
1640331902073.png
1640331916551.png
Tham khảo link sau xem sao
 
Này là kết quả của việc xem clip hướng dẫn trên chủ đề này. Mới tập tễnh nhảy vô nên chưa dám share.
Thì ra là Xem Clip của @Tuanba1992 vậy tui nhầm là viết bằng C#, có lẻ chủ đề này cũng chẳng ai quan tâm nên tôi không chia sẽ dự án Add-ins.
Bài đã được tự động gộp:

Mới thử tìm cái thì thấy dna nó như sau
View attachment 270708
View attachment 270709
Tham khảo link sau xem sao
Cái này chỉ là cái cơ bản để tạo hàm bằng Exceldna thôi, còn tìm hiểu sẽ có nhiều thứ nửa.
 
Thì ra là Xem Clip của @Tuanba1992 vậy tui nhầm là viết bằng C#, có lẻ chủ đề này cũng chẳng ai quan tâm nên tôi không chia sẽ dự án Add-ins.
Mấy cái clip viết bằng C# mà bác post trên chủ đề này, nhưng mấy clip đó chỉ mới là cơ bản để bắt đầu thôi. Vẫn đang hóng file mẫu từ bác. Không biết sao cái Nuget của mình ko cho cài exceldna online được. Phải tải file về rồi kiếm cách cài offline. Loay hoay chỗ đó mất 2 ngày.
 
Mấy cái clip viết bằng C# mà bác post trên chủ đề này, nhưng mấy clip đó chỉ mới là cơ bản để bắt đầu thôi. Vẫn đang hóng file mẫu từ bác. Không biết sao cái Nuget của mình ko cho cài exceldna online được. Phải tải file về rồi kiếm cách cài offline. Loay hoay chỗ đó mất 2 ngày.
Đây là Code mẫu. (Do trong file có sử dụng giao diện MetroModernUI cho Form nên hơi nặng nếu không thích có thể bảo để giảm dung lượng file)
 
Đây là Code mẫu. (Do trong file có sử dụng giao diện MetroModernUI cho Form nên hơi nặng nếu không thích có thể bảo để giảm dung lượng file)
Cho em hỏi:
1. Đoạn code xml này là mình tự viết hay là có phải cài thêm tool để nó tự phát sinh ra đoạn code đó không? Bên Form thì em thấy có phần thiết kế giao diện, còn Ribbon thì chỉ thấy đoạn code này.
XML:
<CustomUI>
        <customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui' onLoad='VnToolsExcelLoad'>
            <ribbon>
                <tabs>
                    <tab id='TabVnTools01' label='GPE ADD-INS'>
                        <group id='VnGrp3' label='Nhóm' imageMso='MeetingsWorkspace'>
                            <button id='bnt1' label='Chèn ngày' size='large' onAction='BntClick' supertip='Chèn ngày tháng năm hiện tại' imageMso='DateInsert' />
                            <button id='bntAbount' label='Mở form' size='large' onAction='BntClick' supertip='Mở Form của tiện ích' imageMso='AnonymousAccess' />
                        </group>
                    </tab>
                </tabs>
            </ribbon>
            
            <!--Context Menu Cell - Menu chuột phải khi nhấp vào ô-->
            <contextMenus>
                <contextMenu idMso='ContextMenuCell'>
                    <menu id='ContextMenuVnTools' label='MENU CỦA ADD-INS' imageMso='ControlsGallery' supertip='Dùng chức năng này để định dạng nhanh các ô tính' >
                        <button id='bntCalendar' label='Chèn ngày' onAction='bntContextMenu' imageMso='DateInsert' supertip='Dùng chức năng này để chèn ngày tháng vào ô đang chọn'/>
                        <dynamicMenu id='Select_Sheet'    insertBeforeMso='Cut' label='Di chuyển đến' imageMso='RecoverUnsavedVersions'
                                screentip='Di chuyển nhanh đến sheet trong file'
                                supertip='Bạn dùng chức nang này dể di chuyển nhanh đến sheet mong muốn.'
                                getContent='OnGetContent'/>
                        <menuSeparator id='MySeparator' insertBeforeMso='Cut' />
                    </menu>
                </contextMenu>
            </contextMenus>
        </customUI>
    </CustomUI>
2. Muốn cài Addin lên máy khác thì ngoài file .xll thì còn phải kèm theo file .dll. Có cách nào gom chung vô 1 file .xll được không? Code mẫu của bác em copy file .xll ra thư mục riêng rồi chạy thì nó không load được cái Form, copy thêm mấy file .dll vào nữa thì ok.
 
Cho em hỏi:
1. Đoạn code xml này là mình tự viết hay là có phải cài thêm tool để nó tự phát sinh ra đoạn code đó không? Bên Form thì em thấy có phần thiết kế giao diện, còn Ribbon thì chỉ thấy đoạn code này.
Đoạn code xml là mình phải tự soạn mã (Cái này ai đã từng viết mã tạo Ribbon thì dễ dàng tạo được hoặc google một mâm)
2. Muốn cài Addin lên máy khác thì ngoài file .xll thì còn phải kèm theo file .dll. Có cách nào gom chung vô 1 file .xll được không? Code mẫu của bác em copy file .xll ra thư mục riêng rồi chạy thì nó không load được cái Form, copy thêm mấy file .dll vào nữa thì ok.
Cái này thì theo tôi nên để tất cả những file dll đó riêng biệt, khi mình phân phối Add-Ins chỉ cần tạo file Setup để nó tự đăngg ký. Còn muốn gom hết vào file thì mình packed (Dùng từ này không biết chính xác không) nó vào file, vụ này @Tuanba1992 rất rành. Cụ thể bạn mở File UDF Excel-AddIn64.dna trong dự án của bạn và thêm mã Pack các file Dll trong thư mục Debug vào và Build lại dự án. Cụ thể bạn thêm đoạn code này vào trước lệnh <CustomUI> như sau:
Mã:
<ExternalLibrary Path="UDF Excel.dll" ExplicitExports="false" LoadFromBytes="true" Pack="true" IncludePdb="false" />
    <Reference Path="ExcelApi.dll" Pack="true" />
    <Reference Path="MetroFramework.Design.dll" Pack="true" />
    <Reference Path="MetroFramework.dll" Pack="true" />
    <Reference Path="MetroFramework.Fonts.dll" Pack="true" />
    <Reference Path="NetOffice.dll" Pack="true" />
    <Reference Path="OfficeApi.dll" Pack="true" />
    <Reference Path="stdole.dll" Pack="true" />
    <Reference Path="UDF Excel-AddIn.dll" Pack="true" />
    <Reference Path="VBIDEApi.dll" Pack="true" />
    <Reference Path="UDF Excel.dll" Pack="true" />
        <CustomUI>................................
Trong đó các File Dll là các file được tạo ra trong thư mục Debug.
Bạn thử file đính kèm tôi đã Pack nhúng các file DLL vào 1 file XLL duy nhất xem có được không? Trong đó 1 file Office 32 Bit và 1 file Office 64 bit.
 

File đính kèm

  • UDF Excel.zip
    2.2 MB · Đọc: 24
Bạn thử file đính kèm tôi đã Pack nhúng các file DLL vào 1 file XLL duy nhất xem có được không? Trong đó 1 file Office 32 Bit và 1 file Office 64 bit.
Chạy ngon lành mà dung lượng file XLL duy nhất cũng nhẹ hơn mấy file DLL được Build ra. Quá hay.
 
Sau 1 tuần vọc C# tự nhiên thấy code VBA chạy ì ạch dễ sợ. Phát hiện khi viết hàm tự tạo trên C# trước khi return kết quả mà thêm đoạn code này thì sẽ làm được một hàm tác động được tới bảng tính mà không cần phải tạo Class Module như VBA
C#:
Task.Run(() => LamCaiGiDo(thamso1, thamso2,...));
return ketqua;
 
Sau 1 tuần vọc C# tự nhiên thấy code VBA chạy ì ạch dễ sợ. Phát hiện khi viết hàm tự tạo trên C# trước khi return kết quả mà thêm đoạn code này thì sẽ làm được một hàm tác động được tới bảng tính mà không cần phải tạo Class Module như VBA
C#:
Task.Run(() => LamCaiGiDo(thamso1, thamso2,...));
return ketqua;
bác có thể cho e xin code mẫu của c# liên quan đến range excel trong parameter không.
 
Hình như nó chỉ lấy được giá trị nằm trong range thôi, còn các giá trị thuộc tính thì không lấy được. Khi bạn viết hàm mà chọn range, nó sẽ chuyển thành mảng 2 chiều
 
Hình như nó chỉ lấy được giá trị nằm trong range thôi, còn các giá trị thuộc tính thì không lấy được. Khi bạn viết hàm mà chọn range, nó sẽ chuyển thành mảng 2 chiều
Câu này sai nhé bạn, nó cho phép parameter là đối tượng Range luôn. Viết hàm trả về giá trị cho một ô tính khác, lấy màu, định dạng... của một ô bất kỳ.
 
Web KT
Back
Top Bottom