2009-04-14 32 views
1

我正在使用c#(visual studio 2008)来尝试访问excel电子表格中的业务逻辑。在另一个c#项目中访问excel资源

我有下面的类..(随意批评,如果我这样做不对 - 我是Java开发人员一般 - 这是我的第一个C#应用程序。)

public class SpreadSheetClass 
{ 
    // apologies for any typo's code written in place, not copied from an IDE... 
    // 
    public DataTable DoIt() 
    { 
     DataTable result; 
     String sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MySpreadsheet.xls;Extended Properties=Excel 8.0;"; 

     OleDbConnection connection = new OleDbConnection(sConnection); 
     try 
     { 
      connection.Open(); 
      OleDbCommand oleDbcCommand = new OleDbCommand("SELECT * FROM SELECTION", connection); 
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(); 
      dataAdapter.SelectCommand = oleDbcCommand;  
      result = new DataTable(); 
      dataAdapter.Fill(result); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
     return result; 
    } 
} 

我加入了电子表格的项目使用添加 - >现有项目 - >然后选择.xls文件。然后,我编辑了文件的属性,说它是一个嵌入式资源,并将其始终复制到输出目录。

我可以从项目中访问电子表格。

不过,我想运行从项目外的大一方法,例如从测试项目中,我得到以下异常:

“测试方法TestProject1.UnitTest1.TestMethod1抛出异常:System.Data。 OleDb.OleDbException:Microsoft Jet数据库引擎无法找到对象'SELECTION'。请确保该对象存在,并且正确拼写其名称和路径名称。“

我确信我的问题是调用一个从另一个项目访问资源的类。

帮助!

回答

1

在.NET中(特别是在C#),这是更好地“包装”实现在using声明IDisposable类:

using(OleDbConnection connection = new OleDbConnection(sConnection)) 
{ 
    // ... 
} 

什么你基本上做的是提取自组装的资源(见Assembly.GetManifestResourceStream() ),将其保存到磁盘上,然后适当修改连接字符串。

0

我使用添加 - >现有项目 - >然后选择.xls文件将电子表格添加到项目。然后,我编辑了文件的属性,说它是一个嵌入式资源,并将其始终复制到输出目录。

我可以从项目中访问电子表格。

您将另一程序作为程序集打开,然后从中加载资源。

喜欢的东西:

Assembly other = Assembly.Load(name); 
Stream xlsData = other.GetManifestResourceStream(resourceName); 
相关问题