2012-01-03 39 views
0

从Excel中读取计算值我们试图从其中包含加载公式的单元格中检索计算值。 示例加载项“myUtilityl.xla”在Excel中正常工作。它检索插件功能=ISOWEEKNUM(F9)的值。但是我们无法使用C#编程方式检索该值。& Microsoft Object Library。加载项“myUtilityl.xla”连接到Excel。环境是VS2010使用AddIn公式和Microsoft Object Library

我在这里提供示例代码。

 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(); 

我是微软对象库的新手。任何帮助或线索都会非常有帮助。

+0

你在消息框中得到什么? – 2012-01-03 16:26:57

+0

获取垃圾值--------------------------- ---------------- ----------- -2146826259 --------------------------- OK ----- ---------------------- – 2012-01-04 09:30:17

+0

是B1在myUtility.xla中调用UDF吗? – 2012-01-04 09:34:43

回答

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(); 

发布上面的代码的代码输入的两个值到Sheet 2中和VBA UDF计算值被检索的细胞。

0

您可以添加以下代码示例

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

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

当我尝试使用以下代码检查已安装的插件时,它显示addin .. foreach(AddIn addin in app.AddIns) { MessageBox.Show(addin.FullName) ; } – 2012-01-04 12:26:47

+0

安装属性如何?这是真的吗? – 2012-01-04 12:43:42

+0

安装的属性显示“真”。那么我的实际情况是这样的。我有一个计算几个UDF的Excel。我输入特定工作表中的一个单元格,并读取另一个工作表中调用UDF函数的单元格中的输出。在上述情况下,单元格B1调用函数(“= ISONUMWEEK(F9)”)。单元格B1在Excel中显示值,但不在代码中。 – 2012-01-04 12:59:52