2010-09-03 53 views
31

Tôi phải duyệt qua khoảng 25 trang tính trong excel để thực hiện thao tác. Tôi đang thực hiện bằng cách sử dụng vba và tìm kiếm nó thực sự chậm, do đó muốn biết liệu tôi có thể sử dụng C# hay không điều đó sẽ giúp tôi đẩy nhanh tiến trình.Chúng ta có thể viết macro trong C# cho Excel

+0

Tôi không nghĩ bạn có thể sử dụng C# trực tiếp trong macro. Bạn có thể tạo một AddIn được viết bằng C# để làm việc với trang tính. Nếu nó tăng tốc quá trình của bạn không thể được trả lời cho đến khi bạn mô tả những gì bạn đang làm. – Khh

+0

@gizgok: hi, vui lòng chấp nhận câu trả lời của tôi – abatishchev

Trả lời

-1

Bạn đang làm chính xác những hoạt động nào? Thứ nhất, bạn không cần phải viết mã VBA. Bạn có thể chỉ cần ghi macro trong sổ làm việc và lưu nó trong C: \ Program Files \ Microsoft Office \ Office12 \ Xlstart. Excel sẽ ghi lại một macro và làm cho nó có sẵn trong tất cả các trang tính mà bạn mở.

Bạn cũng có thể tinh chỉnh mã VBA được tạo tự động trong quy trình được đề cập ở trên để phù hợp với nhu cầu của bạn.

Cá nhân, tôi không nghĩ rằng việc viết bổ trợ C# để thực hiện công việc sẽ tăng tốc tác vụ. VBA là một ngôn ngữ được thiết kế đặc biệt để làm việc với Mô hình đối tượng Office. Nếu điều đó không hoạt động đủ nhanh thì bạn cần phải xem xét hoạt động nào bạn đang thực hiện?

Tôi nghĩ rằng việc tạo bổ trợ C# để thao tác Mô hình đối tượng Excel và duy trì quá nhiều việc phải làm. Nó cũng sẽ liên quan đến một đường cong học tập lớn.

+1

Macro được tạo bằng tính năng Excel _record macro_ có xu hướng ** rất chậm ** vì chúng phát hành một tấn lệnh _activate_ và _select_ không cần thiết. Nó có thể hữu ích để ghi lại một macro ngắn để xem làm thế nào một cái gì đó có thể được thực hiện, nhưng nếu tốc độ thực hiện là ở tất cả các mối quan tâm, bạn cần phải viết lại vĩ mô ghi lại. – riderBill

28

Gọi C# từ sổ làm việc Excel như macro VBA - bạn không thể

Truy cập sổ làm việc Excel từ ứng dụng C# - bạn có thể. Điều này được gọi là Microsoft Visual Studio Tools cho Office (VSTO)

+40

Nói như Yoda - bạn làm –

+0

Đây phải là câu trả lời được chấp nhận – Arijoon

+0

Tôi sẽ không đồng ý. Bạn có thể gọi một dịch vụ web (C#) thông qua một macro. Tôi nghĩ điều tương tự cũng áp dụng cho các thiết bị đầu cuối an toàn được viết bằng webapi ... – cs0815

7

Mặc dù bạn có thể viết tương đương trong C# với macro VBA hiện tại của bạn bằng VSTO, tôi nghi ngờ rất nhiều nếu nó sẽ tạo ra bất kỳ sự khác biệt đáng kể nào về hiệu năng.

Trong cả hai trường hợp, bạn sẽ thao tác cùng các đối tượng Excel COM và thời gian thực hiện có thể rất giống nhau.

Hiệu suất của bạn sẽ phụ thuộc chủ yếu vào các kỹ thuật bạn đang sử dụng để thao tác các đối tượng Excel. Ví dụ đơn giản, bạn có thể gán các giá trị từ một phạm vi Excel cho mảng 2 chiều trong một câu lệnh đơn: điều này nhanh hơn nhiều so với việc lặp qua các hàng và cột trong mã và sao chép các giá trị vào mảng của bạn từng cái một.

Tôi khuyên bạn nên đăng bit của mã VBA mà bạn thấy quá chậm và yêu cầu các mẹo cải thiện hiệu suất.

4

Bạn có thể thử bổ trợ ESharper của mình để viết lệnh tự động hóa Excel trong C#. Nó dễ dàng hơn việc tạo một ứng dụng C# riêng biệt hoặc bổ trợ, và bạn sẽ có quyền truy cập vào cả mô hình đối tượng Excel và API Excel C với nhiều tùy chọn hơn cho tối ưu hóa hiệu suất.

Các vấn đề liên quan