Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用winapi将文本发送到excel工作表_C#_Excel_Winapi - Fatal编程技术网

C# 使用winapi将文本发送到excel工作表

C# 使用winapi将文本发送到excel工作表,c#,excel,winapi,C#,Excel,Winapi,我有以下问题。某些应用程序每隔几秒钟自动打开一个excel文件并在其中写入数据。excel文件以独占方式打开,我无法从其他应用程序访问。单元格的内容变化非常快,所以我需要在打开的文件中读/写一些单元格内容。当我说打开时,我的意思是excel应用程序是打开的,我正在查看它 是否可以从c#应用程序使用winapi向打开的excel发送消息,以填充某个单元格或读取某个单元格。我需要尝试这种方式,因为文件已锁定,所以我正在考虑使用这种方式访问它 获取excel窗口句柄,读取单元格,向单元格发送文本 提前

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

是否可以从c#应用程序使用winapi向打开的excel发送消息,以填充某个单元格或读取某个单元格。我需要尝试这种方式,因为文件已锁定,所以我正在考虑使用这种方式访问它

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

提前感谢

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


如果Excel实例与您的C#app在同一台计算机上运行,那么您可以使用以下方法获取该实例。我使用它来获取用户运行的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;
}

如果这还不能让你达到目的,我也有代码来检查所有打开的工作簿流程,并找到你要找的那个。这是相当长的,所以如果你认为它可能为你工作,然后让我知道,我会张贴它。基本上,它的工作原理是抓取窗口句柄并检查子窗口是否为工作簿。

查看此链接-我不确定这是否有效,因为它需要访问我所能看到的文件。而在我的例子中,文件已经由另一个进程以独占方式打开。当excel文档已经打开时,我需要在特定单元格中发送文本。这可能有效,但很难找到具体示例…将继续查找。嗨,Sid,我将立即尝试。唯一让我担心的是某个文件可能被锁定……但现在将对此进行测试。@iftemalin您正在获取的是Excel实例,而不是文件本身,因此文件锁定不应该是问题。这几乎就像是在模仿用户与自己打开的Excel实例交互。