I have modified RTD server code available posted by some person Code Project to send DataTable, but I am not able to display it into Excel using RTD Client...Code Snippet as below.. Can someone guide how can I display DataTable in Excel?
using ExcelDna.Integration;
using RTD.Server;
using System.ServiceModel;
using ExcelDna.Integration.RxExcel;
using System.Reactive.Linq;
using System;
using System.Reactive.Disposables;
using System.Reflection;
namespace RTD.Excel {
public class RTDAddIn : IExcelAddIn, IRTDClient {
static IRTDServer _server;
public void AutoOpen() {
ExcelAsyncUtil.Initialize();
ExcelIntegration.RegisterUnhandledExceptionHandler(ex => "!!! EXCEPTION: " + ex.ToString());
var a = new EndpointAddress("net.tcp://localhost:8080/hello");
var b = new NetTcpBinding();
var f = new DuplexChannelFactory<irtdserver>(this, b, a);
_server = f.CreateChannel();
_server.Register();
object app;
object rtd;
app = ExcelDnaUtil.Application;
rtd = app.GetType().InvokeMember("RTD", BindingFlags.GetProperty, null, app, null);
rtd.GetType().InvokeMember("ThrottleInterval", BindingFlags.SetProperty, null, rtd, new object[] { 100 });
}
public void AutoClose() {
_server.UnRegister();
ExcelAsyncUtil.Uninitialize();
}
public delegate void ValueSentHandler(ValueSentEventArgs args);
public static event ValueSentHandler OnValueSent;
public class ValueSentEventArgs : EventArgs {
public double Value { get; private set; }
public ValueSentEventArgs(double Value) {
this.Value = Value;
}
}
public void SendValue(double x) {
if (OnValueSent != null)
OnValueSent(new ValueSentEventArgs(x));
}
static Func<iobserver><double>, IDisposable> Event2Observable = observer => {
OnValueSent += d => observer.OnNext(d.Value);
return Disposable.Empty;
};
[ExcelFunction("Gets realtime values from server")]
public static object GetValues() {
Func<iobservable><double>> f2 = () => Observable.Create<double>(Event2Observable);
return RxExcel.Observe("GetValues", null, f2);
}
}
}
using System;
namespace ExcelDna.Integration.RxExcel {
public static class RxExcel {
public static IExcelObservable ToExcelObservable<T>(this IObservable<T> observable) {
return new ExcelObservable<T>(observable);
}
public static object Observe<T>(string functionName, object parameters, Func<IObservable<T>> observableSource) {
return ExcelAsyncUtil.Observe(functionName, parameters, () => observableSource().ToExcelObservable());
}
}
public class ExcelObservable<T> : IExcelObservable {
readonly IObservable<T> _observable;
public ExcelObservable(IObservable<T> observable) {
_observable = observable;
}
public IDisposable Subscribe(IExcelObserver observer) {
return _observable.Subscribe(value => observer.OnNext(value), observer.OnError, observer.OnCompleted);
}
}
}