2017-02-13 50 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 
    } 
相關問題