2017-02-13 4 views
0

Я связал приложение, которое получает данные из API, я открываю лист, когда новый контракт загружается в программу. Теперь я пытаюсь записать новые данные на листе excel позже в программе, когда я собираю новые данные.Найти и отредактировать открыть лист Excel с помощью interop

Я знаю, как писать данные на листе 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' в качестве аргумента в оба метода (я предполагаю, что по void вы имеете в виду метод без возвращаемого значения) – 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 
    } 
Смежные вопросы