Tôi đang sử dụng Excel 2007. Tôi có mã C# được viết bằng một nhị phân riêng biệt. Mã này sử dụng các lớp tĩnh và các phương thức tĩnh trên các lớp. Tôi có một tham chiếu đến DLL trong dự án VSTO Excel Worksheet của tôi. Tôi phải thêm hoặc sửa đổi điều gì để làm việc này?Phương thức gọi được viết bằng C# trong Excel 2007 từ công thức ô
Mã của tôi C# trông như thế này:
using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
namespace FooStatistics
{
[ComVisible(true)]
public static class Statistics
{
public static int Count(Range range)
{
return range.Count;
}
Tôi muốn để có thể đặt một công thức vào một tế bào Excel mà trông như thế này:
=FooStatistic.Statistic.Count(A1:A10)
Hoặc bất cứ điều gì.
Tôi đã xem this nhưng dường như là các lớp không tĩnh trong Excel 2003. Tôi không thể tin rằng tích hợp không tốt hơn bây giờ.
Tôi đã xem xét rất nhiều câu hỏi về StackOverflow về vấn đề này. Họ không xuất hiện để cung cấp tích hợp bản địa (nhiều người nói, "Sử dụng thư viện mã nguồn mở X") và, đáng ngại, nhiều người không được OP chấp nhận. Tôi không tìm kiếm, "Làm cho nó thành một đối tượng COM và gọi nó từ VBA."
Vì vậy, tôi đang tìm:
- Excel 2007
- mã trong C# DLL
- cuộc gọi từ di động Excel như UDF
- hội nhập có nguồn gốc
Vì vậy, đây là another StackOverflow link, trong đó hai người trả lời nói:
- Theo như tôi biết, bạn không thể trực tiếp tạo UDF trong VSTO.
- VSTO không hỗ trợ tạo Excel UDF. Tự động hóa Add-Ins có thể được tạo ra trong. Net, và dường như được Microsoft chấp thuận cách làm việc đó.
Đây là câu hỏi từ tháng 6 năm 2009. Đây có phải là sự thật - trong năm 2009, bạn phải trưng bày các thành phần .NET của bạn dưới dạng máy chủ COM để nhận UDFs có thể gọi cho Excel?
Huh. Tôi đang trải qua tất cả các giai đoạn phát triển phần mềm: giận dữ, từ chối, thương lượng, trầm cảm và chấp nhận. – hughdbrown
Vì vậy, khi tôi làm tất cả điều này, tôi nhận được một cảnh báo thời gian biên dịch "... không chứa bất kỳ loại có thể được đăng ký cho COM Interop." Tôi nghi ngờ điều này là bởi vì tôi đã sử dụng một lớp tĩnh với các phương thức tĩnh. Tôi có cần * để có một lớp học không tĩnh không? Hay cái gì khác? – hughdbrown
Vì vậy, tôi có thể làm điều này để làm việc miễn là tôi không sử dụng các lớp tĩnh và các phương thức tĩnh. Tôi kết thúc với một đối tượng không có thật mà không có bất động sản hoặc phương pháp nhưng tôi có thể gọi. Thở dài. – hughdbrown