2009-04-14 31 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); 
相關問題