2010-08-06 32 views
3

我有一些當前存儲在Excel工作簿中的數據。數據在Excel中是有意義的(因爲它易於管理,易於擴展,可以計算等),但是一些數據是自動化過程所需要的,所以從這個角度來看,它將是如果它在數據庫中更方便。如何從存儲在SharePoint文檔庫中的Excel工作簿中獲取值?

爲了給這些信息提供更多的可見性,工作流程等,我正在考慮將其移至SharePoint。實際上,將其轉換爲SharePoint表單將非常耗時,而且這種靈活性/便利性將會丟失;相反,我正在考慮將當前Excel文件存儲在SharePoint庫中。

然後我的問題是:自動化過程如何從現在生活在SharePoint庫中的Excel工作簿中提取所需的值? Excel Services可以用於什麼?或者還有其他更好的方法嗎?即使可以這樣做,這是一個明智的做法嗎?

回答

2

經歷了類似的事情,我可以告訴你,實際上並不是從文檔庫中的Excel文件中獲取值。我最終編寫了一個自定義工作流程操作(用於SharePoint Designer工作流程中),該操作從Excel文件中讀取值進行處理。我最終選擇了NPOI來處理所有的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... 
} 

你可以很容易地把這個在控制檯應用程序也是如此。

+0

謝謝。任何理由*不*使用Excel Services,因爲它是內置的(對MOSS)? – 2010-08-08 20:37:30

+0

我沒有任何Excel服務的經驗,所以我不能說這樣或那樣。我們需要在MOSS和WSS(我們都有)上使用它,它似乎更容易。 – 2010-08-09 15:32:27

+0

您可以共享您創建的自定義工作流程。我嘗試從SharePoint庫中的Excel工作簿提取數據,然後將數據傳輸到SQL表。任何指導表示讚賞謝謝 – Rob 2011-06-26 03:56:05

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; 
    } 
相關問題