2010-06-01 116 views
0

我有一个应用程序,我想链接到excel。只要我可以复制数据或控件,并将链接粘贴到excel中,我就没有偏好使用哪种控件。当我的应用程序中的数据发生变化时,我希望单元格在Excel中更改。如何从C#控件复制并粘贴链接到excel

我有一个客户声称这是可能的,他已经看到它,但没有证据,可能会感到困惑。

我已经搜索了互联网,并提出了一些半解决方案,并希望与我想要的相反的人。有谁知道完整的解决方案?

回答

1

我想你正在寻找IDataObject COM接口。

如果您将数据公开为OLE对象,则可以使用IDataObject::DAdvise在应用程序中的数据发生更改时通知Excel。

这需要付出一些努力,因为您必须实现IDataObject接口(以及其他一些接口)才能使Excel正确显示和托管正在公开的信息。

如果这是你以后,这里有一些链接可能对您有用:

http://winapi.freetechsecrets.com/ole/OLEIDataObjectDAdvise.htm

http://www.catch22.net/tuts/dragdrop/1(大多是将交易/删除)

http://www.catch22.net/tuts/dragdrop/2(大多是将交易/删除)

http://www.catch22.net/tuts/dragdrop/3(大多是将交易/删除)

http://us.generation-nt.com/answer/support-iadvisesink-word-excel-powerpoint-help-26654252.html

http://www.tenouk.com/visualcplusmfc/mfcsupp/ioleobject.html

0

另一种办法是制定一个Excel插件,使用VSTO。这个体系结构的难点在于你必须在源应用程序和插件之间实现你自己的IPC。但是,我会根据以前使用DDE的经验,选择这种方式通过IDataObject(DDE仿真)。

IDataObject方法的优点是,一个典型的老派Excel电力用户会对此感到满意;并且它不需要任何插件来运行。如果拖动控件拖放到Excel中的行为是该场景的重要组成部分,那么可能值得实施COM服务器。但是,如果您的客户不熟悉DDE并且只是想让Excel动态更新,那么这可能不值得。