И в чём сложность?...
| Код | object range = Worksheet.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, Worksheet, null); object rows = range.GetType().InvokeMember("Rows", BindingFlags.GetProperty, null, range, null); int rowsCount = (int)rows.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, rows, null);
|
Могу поделиться классом, который я использую для таких целей, с помощью него можно всё это сделать так:
| Код | RObject excelApp = RObject.CreateObject("Excel.Application"); RObject book = excelApp.Get("Workbooks").Invoke("Open", filePath); RObject sheet = book.Get("Worksheets")[1];
rowsCount = (int)sheet.Get("UsedRange").Get("Rows").Get("Count");
|
А вот и сам класс:
| Код | public sealed class RObject { private object instance;
public static RObject CreateObject(string progID) { Type appType = Type.GetTypeFromProgID(progID, true); return new RObject(Activator.CreateInstance(appType)); }
public static RObject GetActiveObject(string progID) { return new RObject(Marshal.GetActiveObject(progID)); }
private RObject(object instance) { this.instance = instance; }
public object Instance { get { return this.instance; } }
public RObject Get(string propName, params object[] args) { CheckArgs(args); return new RObject(InvokeMember(this.instance, propName, BindingFlags.GetProperty, args)); }
public void Set(string propName, object value) { CheckArg(ref value); InvokeMember(this.instance, propName, BindingFlags.SetProperty, value); }
public RObject this[params object[] args] { get { return Get("Item", args); } }
public RObject Invoke(string methodName, params object[] args) { CheckArgs(args); return new RObject(InvokeMember(this.instance, methodName, BindingFlags.InvokeMethod, args)); }
public void Release() { Marshal.ReleaseComObject(this.instance); this.instance = null; }
private object InvokeMember(object target, string name, BindingFlags flags, params object[] args) { return target.GetType().InvokeMember(name, flags, null, target, args); }
private void CheckArgs(object[] args) { for (int i = 0; i < args.Length; ++i) { CheckArg(ref args[i]); } }
private void CheckArg(ref object arg) { RObject obj = arg as RObject; if (obj != null) { arg = obj.instance; } }
public static explicit operator int(RObject obj) { return (int)obj.instance; }
public static explicit operator bool(RObject obj) { return (bool)obj.instance; }
public static explicit operator double(RObject obj) { return (double)obj.instance; }
public static explicit operator string(RObject obj) { return obj.instance.ToString(); } }
|
|