2017-02-13 63 views
0

我已经链接了一个从API获取数据的应用程序,当我将一个新合同加载到程序时打开工作表。现在,我正在试图在收集新数据时在程序的后期将新数据写入Excel表。使用互操作查找并编辑打开的Excel工作表

我知道如何将数据写入Excel工作表以及如何打开我想要写入的工作表。问题是我不知道如何写入表单,一旦它已经打开,我所能做的就是打开表单的另一个实例。

我需要能够打开一个无效的工作表,然后更新现在打开的工作表在以后的空白。如何检查表单是否打开,以及是否再次访问它以向其写入更多数据?

这里是我已经打开的Excel,

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
Console.WriteLine("Opening Excel..."); 

if (xlApp == null) 
{ 
Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct."); 
return; 
} 


xlApp.Visible = true; 

Workbook wb = xlApp.Workbooks.Open(@"C:\Users\Craig Key\Desktop\AppExports\TestExport.xlsx"); 
Console.WriteLine("Opening Currently Linked Workbook..."); 

Worksheet ws = (Worksheet)wb.ActiveSheet; 
Console.WriteLine("Opening Active Worksheet..."); 

if (ws == null) 
{ 
Console.WriteLine("Worksheet could not be created. Check that your office installation and project references are correct."); 
} 

现在以后我需要稍后在程序中找到xlApp写一遍,而无需打开该文件的另一个实例。

+0

相关? http://stackoverflow.com/questions/6682678/accessing-an-open-excel-workbook-in-c-sharp – grek40

+0

为什么不把你的'xlApp'作为参数传递给这两种方法(我假设你的意思是无效的方法没有返回值) – pquest

回答

0

我找了一段时间后想到了这一点,我需要使用沼泽试图绑定开放实例,然后使用它。

Microsoft.Office.Interop.Excel.Application xlApp = null; 
//Microsoft.Office.Interop.Excel.Workbooks wbs = null; 
Microsoft.Office.Interop.Excel.Workbook wb = null; 
Microsoft.Office.Interop.Excel.Worksheet ws = null; 
bool wasFoundRunning = false; 
Microsoft.Office.Interop.Excel.Application tApp = null; 
//Checks to see if excel is opened 
Console.WriteLine("CDC is looking for Excel..."); 
    try 
    { 
    tApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 
    wasFoundRunning = true; 
    } 
    catch (Exception)//Excel not open 
    { 
    wasFoundRunning = false; 
    } 
    if (true == wasFoundRunning) 
    { 
    //Control Excel 
    }