使用winapi将文本发送到Excel工作表

时间:2012-11-15 18:05:19

标签: c# excel winapi

我有以下问题。某些应用程序每隔几秒自动打开一个excel文件并在那里写入数据.excel文件是独占打开的,我无法从另一个应用程序访问。单元格的内容变化得非常快,所以我需要读取/写入打开文件中的一些单元格内容。当我说开放时,我的意思是excel应用程序是开放的,我正在看它。

是否可以使用来自c#应用程序的winapi,将消息发送到打开的excel,以填充某个单元格或读取某个单元格。我需要尝试这种方式,因为文件被锁定,所以我想用这种方式访问​​它。

获取excel窗口句柄,读取单元格,将文本发送到单元格。

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以尝试使用DDE(动态数据交换)API与Excel进行交互。例如,DDESend()函数用于与excel进行DDE对话。有关更多信息,请访问

http://office.microsoft.com/en-us/access-help/ddesend-function-HA001228822.aspx

答案 1 :(得分:0)

如果Excel的实例与您的C#应用​​程序在同一台计算机上运行,​​那么您可以使用以下内容来获取该实例。我使用它来获取用户运行的Excel实例,以便从打开的电子表格中读取数据。

private Excel.Application GetCurrentVersionOfExcel()
{
    Excel.Application xlApp;

    // Try to get the currently-running Excel application

    try
    {
        xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
    }
    catch
    {
        // In case there isn't a version running or the current version hasn't registered itself with the Running Object Table

        xlApp = null;
    }

    return xlApp;
}

如果这不能让你到那里我还有代码来完成所有打开的工作簿流程并找到你正在寻找的那个。这很长,所以如果你认为它可能对你有用,那就告诉我,我会发布它。基本上它通过抓住窗口句柄并检查子窗口来查看它们是否是工作簿。