2009-04-14 3 views
1

엑셀 스프레드 시트에서 비즈니스 로직에 액세스하려고 C# (Visual Studio 2008)을 사용하고 있습니다. 다른 C# 프로젝트에서 엑셀 리소스에 액세스하기

내가 다음 클래스는 ..을 (I이 잘못을하고있는 중이 야 경우 비판 주시기 바랍니다 - 나는 일반적으로 자바 개발자입니다 - 이것은 내 첫 번째 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#의)은 "포장" IDisposable using 문에서 구현하는 클래스 낫다에서

:

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

당신이 기본적으로해야 할 것은 어셈블리에서 리소스를 추출하는 것입니다 (Assembly.GetManifestResourceStream() 참조), 디스크에 저장 한 다음 연결 문자열을 적절하게 변경하십시오.

0

추가 -> 기존 항목 -> 다음으로 .xls 파일을 선택하여 스프레드 시트를 프로젝트에 추가했습니다. 그런 다음 파일의 속성을 편집하여 포함 된 리소스라고 말하고 항상 출력 디렉터리에 복사했습니다.

프로젝트 내에서 스프레드 시트에 액세스 할 수 있습니다.

다른 프로그램을 어셈블리로 열고 리소스를로드합니다.

뭔가 같은 :

Assembly other = Assembly.Load(name); 
Stream xlsData = other.GetManifestResourceStream(resourceName); 
관련 문제