2010-08-06 4 views
3

현재 Excel 통합 문서에 저장된 일부 데이터가 있습니다. 데이터가 Excel에 있어야한다는 것은 의미가 있습니다 (관리하기 쉽고, 확장하기 쉽고, 계산할 때 등). 그러나 일부 데이터는 자동화 된 프로세스에 필요하기 때문에 그 관점에서 보면 그것이 데이터베이스에 있다면 더 편리합니다.SharePoint 문서 라이브러리에 저장된 Excel 통합 문서에서 값을 가져 오는 방법은 무엇입니까?

정보를 더 많은 가시성, 워크 플로 등에 제공하려면 SharePoint로 옮길 생각입니다. 사실 SharePoint 형식으로 변환하는 것은 번거로울 것이며 & 시간이 많이 소요됩니다. 그러면 유연성/편의가 손실됩니다. 대신 현재 SharePoint 라이브러리에 현재 Excel 파일을 저장하는 방법을 생각하고 있습니다.

내 문제는 다음과 같습니다. 자동화 된 프로세스가 현재 SharePoint 라이브러리에있는 Excel 통합 문서에서 필요한 값을 추출하는 방법은 무엇입니까? Excel Services를 사용할 수 있습니까? 또는 다른/더 좋은 방법이 있습니까? 그리고 그것이 끝날지라도, 그것은 합리적인 일입니까?

답변

2

비슷한 것을 경험해 보니 문서 라이브러리의 Excel 파일에서 값을 가져 오는 것이 그리 좋지 않다고 말할 수 있습니다. Excel 파일에서 값을 읽어 처리하는 사용자 지정 워크 플로 동작 (SharePoint Designer 워크 플로 내에서 사용됨)이 작성되었습니다. 모든 Excel 작업을 처리하기 위해 NPOI을 선택했습니다. 당신은 쉽게뿐만 아니라 콘솔 응용 프로그램에 넣고 수

// get the document in the document library 
SPList myList = web.Lists[listGuid]; 
SPListItem myItem = myList.GetItemById(ListItem); 
SPFile file = myItem.File; 

using (Stream stream = file.OpenBinaryStream()) 
{ 
    HSSFWorkbook workbook = new HSSFWorkbook(stream); 
    HSSFSheet sheet = workbook.GetSheet("Sheet1"); 
    CellReference c = new CellReference("A1"); 
    HSSFRow row = sheet.GetRow(c.Row); 
    HSSFCell cell = row.GetCell(c.Col); 
    string cellValue = cell.StringCellValue; 

    // etc... 
} 

: NPOI를 사용

, 당신은 같은 것을 할 수 있습니다.

+0

감사합니다. Excel Services를 사용하지 않는 이유는 * MOSS에 내장되어 있기 때문입니다. –

+0

Excel 서비스에 대한 경험이 없으므로 실제로는 말할 수 없습니다. 우리는 MOSS와 WSS (우리 모두가)에서 그것을 사용할 필요가 있었고 그것은 더 쉬워 보였습니다. –

+0

작성한 사용자 정의 워크 플로우를 공유 할 수 있습니다. SharePoint 라이브러리에서 Excel 통합 문서의 데이터를 추출한 다음 SQL 테이블로 데이터를 전송하려고합니다. 어떤 지침을 부탁드립니다 감사합니다 – Rob

1

예, 통합 문서 내의 여러 시트에 셀 범위를 추출하려고합니다. 콘솔 응용 프로그램에서 아래 코드 중 일부를 사용하여 명령 창에서 데이터를 볼 수있었습니다. 이제 SQL 테이블에 데이터를 덤프해야하며이 작업을 수행하는 방법에 대한 몇 가지 예를 찾고 정확한 코딩 경로로 이동해야합니다.

다음은 현재 사용중인 코드의 스냅 샷입니다.

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 
{ 
     using (SPSite site = new SPSite(SPContext.Current.Site.Url)) 
     { 
      using (SPWeb web = site.RootWeb) 
      { 
       SPList docList = web.Lists[__ListId]; 
       SPListItem docItem = docList.GetItemById(__ListItem); 
       SPFile docFile = docItem.File; 

       using (Stream stream = docFile.OpenBinaryStream()) 
       { 
        HSSFWorkbook wb = new HSSFWorkbook(stream); 

        //loop through each sheet in file, ignoring the first sheet 
        for (int i = 1; i < 0; i++) 
        { 
         NPOI.SS.UserModel.Name name = wb.GetNameAt(i); 
         String sheet = wb.GetSheetName(i); 

         NPOI.SS.UserModel.Name nameRange = wb.CreateName(); 
         nameRange.NameName = ("DispatchCells"); 
         //start at a specific area on the sheet 
         nameRange.RefersToFormula = (sheet + "!$A$11:$AZ$100"); 

        } 

        wb.Write(stream); 

       } 

      } 
     } 
     return ActivityExecutionStatus.Closed; 
    } 
관련 문제