2012-01-03 1 views
0

, мы пытаемся получить вычисленное значение из ячейки, в которой есть формулы надстройки. Образец надстройки «myUtilityl.xla» работает правильно в excel. Он извлекает значение для функции addin =ISOWEEKNUM(F9). Но мы не можем получить значение программно, используя C# & Microsoft Object Library. Надстройка «myUtilityl.xla» прикреплена к Excel. Окружающая среда - VS2010Прочитайте вычисленные значения из Excel с помощью формул AddIn и библиотеки объектов Microsoft

Здесь я предоставляю образец кода.

 string path = @"C:\Test.xls"; 
     Workbook theWorkbook; 
     Worksheet theWorksheet; 
     Range readRange; 
     Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();    
     theWorkbook = app.Workbooks.Open(path); 
     Sheets theSheets = (Sheets)theWorkbook.Worksheets; 
     theWorksheet = (Worksheet)theWorkbook.Worksheets.get_Item("Sheet1");    
     readRange = theWorksheet.get_Range("B1");    
     MessageBox.Show(Convert.ToString(readRange.Value)); 
     //theWorkbook.Save(); 
     app.Workbooks.Close(); 

Я новичок в библиотеке объектов Microsoft. Любая помощь или подсказка будут очень полезны.

+0

Что вы получаете в окне сообщения? –

+0

Получить значение нежелательной информации --------------------------- ---------------- ---------------- ----------- -2146826259 --------------------------- ОК ----- ---------------------- –

+0

- это B1, вызывающий UDF в myUtility.xla? –

ответ

1

Ну Brijesh его работает. Единственное, чего не хватало, было то, что мы должны открыть xla. app.Workbooks.Open (xlaFilePath); Затем он начал работать. Большое спасибо. Я отправляю код здесь в любом случае

 string path = @"C:\Test2.xls"; 
     string xlaPath = @"C:\Test2.xla"; 
     Workbook theWorkbook; 
     Worksheet theWorksheet, theWorksheet2; 
     Range readRange; 
     Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); 
     app.Workbooks.Open(xlaPath); 
     theWorkbook = app.Workbooks.Open(path); 
     theWorksheet2 = (Worksheet)theWorkbook.Worksheets.get_Item("Sheet2"); 
     theWorksheet2.get_Range("A3").Value = 7; 
     theWorksheet2.get_Range("A4").Value = 7; 
     theWorkbook.RefreshAll(); 

     theWorksheet = (Worksheet)theWorkbook.Worksheets.get_Item("Sheet1");   
     readRange = theWorksheet.get_Range("A1"); 
     Console.WriteLine(Convert.ToString(readRange.Value)); 
     Console.ReadLine();   //theWorkbook.Save();    
     theWorkbook.Close(); 
     app.Workbooks.Close(); 

Над входами кода два значения в ячейки sheet2 и расчетное значение VBA UDF извлекается.

0

вы можете добавить следующее в вашем примере кода

 var addins = Application.AddIns.Add(xlaFilePath); 

     if (!addins.Installed) 
     { 
      addins.Installed = true;     
     } 
+0

Когда я попытался проверить установленные аддины, используя следующий код, он показывает addin .. foreach (AddIn addin в app.AddIns) { MessageBox.Show (addin.FullName) ; } –

+0

как насчет установленного имущества? это правда? –

+0

Установленная недвижимость показывает «Правда». Ну, мой реальный сценарий таков. У меня есть Excel, который вычисляет несколько UDF. Я вхожу в одну ячейку на конкретном листе и считывает вывод из ячейки на другом листе, который вызывает функцию UDF. В приведенном выше случае Cell B1 вызывает функцию ("= ISONUMWEEK (F9)"). Ячейка B1 отображает значение в excel, но не в коде. –