Считайте рассчитанные значения из Excel, используя формулы AddIn и библиотеку объектов Microsoft. - PullRequest
0 голосов
/ 03 января 2012

мы пытаемся получить вычисленное значение из ячейки, в которой есть формулы надстройки.Пример надстройки "myUtilityl.xla" работает правильно в Excel.Получает значение для надстройки функции =ISOWEEKNUM(F9).Но мы не можем получить значение программно, используя C # и Microsoft Object Library.Надстройка "myUtilityl.xla" прикреплена к Excel.Среда VS2010

Я предоставляю пример кода здесь.

        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.Любая помощь или подсказка будут очень полезны.

Ответы [ 2 ]

1 голос
/ 06 января 2012

Хорошо, Брижеш работает сейчас. Единственное, чего не хватало, было то, что мы должны открыть 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();

Выше кода вводит два значения в ячейки листа 2, и получается вычисленное значение VBA UDF.

0 голосов
/ 04 января 2012

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

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

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