truyền dữ liệu từ object trong vba hiển thị lên màn hình console của c#

Liên hệ QC

toanthoang09

Thành viên mới
Tham gia
2/1/18
Bài viết
2
Được thích
0
Giới tính
Nam
kính chào các anh/chị/bạn
tớ muốn làm như sau:
- tớ đã có hàm trong vba để đọc dữ liệu từ sheet và add vào 1 object.
- khi đọc xong thì tớ muốn sẽ run chương trình console c# và truyền giá trị object vào class c #
- vậy làm sao để truyền dữ liệu từ vba sang c #
=>xin cao nhân giúp đỡ !
 
Lần chỉnh sửa cuối:
Tất cả những gì VBA làm được thì C# cũng làm được, chỉ là chậm hơn VBA tí.
Vì vậy nếu bạn làm trên C# thì không cần phải dùng VBA nữa. Cứ việc đọc dữ liệu của file Excel bằng code C#.
Có thể xem vài hướng dẫn cơ bản ở đây

https://docs.microsoft.com/en-us/do.../interop/how-to-access-office-onterop-objects
Cám ơn bạn đã trả lời !
câu trả lời của bạn rất giúp ích cho tớ !
nhưng tớ muốn biết là việc truyền object giữa vba cho app console của c# thì có thực sự xảy ra không ?
 
Cám ơn bạn đã trả lời !
câu trả lời của bạn rất giúp ích cho tớ !
nhưng tớ muốn biết là việc truyền object giữa vba cho app console của c# thì có thực sự xảy ra không ?

Theo như tôi biết thì không. C# hay VBA dùng thư viện của MS để tương tác với file excel, chứ không tương tác trực tiếp với nhau. VBA gắn chung với ứng dụng Excel.exe, nhưng tài nguyên mà nó tạo ra (object, variables) không thuộc về file excel (hiểu theo nghĩa không nằm trong danh sách những tài nguyên mà MS có hỗ trợ truy cập trực tiếp từ ứng dụng khác, vd: Workbook, Worksheet, ...), nên không thể truy cập được bởi ứng dụng khác (C#).
Cho nên tôi đã nói: bạn muốn thao tác gì với excel, cứ việc làm bằng C# 100%
 
Nếu bạn có thể viết một cái wrapper class trong C# với khả năng sao lại (emulate) các phương thức và thuộc tính của cái class VBA kia thì làm được.

Nhưng nếu khong có phương thức phức tạp thì ngừoi ta dùng XML boxing quách cho nó khoẻ.
 
Xin lỗi, tôi đã bỏ sót 1 khả năng. Ứng dụng C# có khả năng lấy dữ liệu từ Object của VBA thông qua hàm Application.Run.
Chúng ta sẽ thử với hàm trả về 1 mảng đơn giản của VBA

Mã:
Public Function getArr()
Dim arr
ReDim arr(0 To 3, 0 To 2)
arr(0, 1) = 5
arr(1, 2) = 7
getArr = arr
End Function

Sau đó ta sẽ gọi mảng này từ C#

Mã:
using comEx = Microsoft.Office.Interop.Excel;

comEx.Application app = new comEx.Application();
app.Visible = true;
app.Workbooks.Open(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "a.xlsb"), false);

object[,] arr = app.Run("Module1.getArr");
Console.WriteLine(arr[0, 1]);
Console.WriteLine(arr[1, 2]);
Console.ReadKey();

Đó là 1 cách để lấy được giá trị mảng từ VBA vào C#. File đính kèm bên dưới
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom