C# 使用winapi将文本发送到excel工作表
我有以下问题。某些应用程序每隔几秒钟自动打开一个excel文件并在其中写入数据。excel文件以独占方式打开,我无法从其他应用程序访问。单元格的内容变化非常快,所以我需要在打开的文件中读/写一些单元格内容。当我说打开时,我的意思是excel应用程序是打开的,我正在查看它 是否可以从c#应用程序使用winapi向打开的excel发送消息,以填充某个单元格或读取某个单元格。我需要尝试这种方式,因为文件已锁定,所以我正在考虑使用这种方式访问它 获取excel窗口句柄,读取单元格,向单元格发送文本 提前感谢您可以尝试使用DDE(动态数据交换)API与Excel交互。例如,DDESend()函数用于与excel进行DDE对话。有关更多信息,请访问C# 使用winapi将文本发送到excel工作表,c#,excel,winapi,C#,Excel,Winapi,我有以下问题。某些应用程序每隔几秒钟自动打开一个excel文件并在其中写入数据。excel文件以独占方式打开,我无法从其他应用程序访问。单元格的内容变化非常快,所以我需要在打开的文件中读/写一些单元格内容。当我说打开时,我的意思是excel应用程序是打开的,我正在查看它 是否可以从c#应用程序使用winapi向打开的excel发送消息,以填充某个单元格或读取某个单元格。我需要尝试这种方式,因为文件已锁定,所以我正在考虑使用这种方式访问它 获取excel窗口句柄,读取单元格,向单元格发送文本 提前
如果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实例交互。