【问题标题】:How to get a value out of an Excel workbook stored in a SharePoint document library?如何从存储在 SharePoint 文档库中的 Excel 工作簿中获取值?
【发布时间】:2011-06-28 17:46:52
【问题描述】:

我有一些数据当前存储在 Excel 工作簿中。将数据放在 Excel 中是有意义的(因为它易于管理、易于扩展、进行计算等),但其中的一些数据是自动化过程所必需的,因此从这个角度来看,它将是如果在数据库中会更方便。

为了让信息更具可见性、工作流程等。我正在考虑将其移至 SharePoint。实际上将其转换为 SharePoint 表单将是乏味且耗时的,并且会失去灵活性/便利性;相反,我正在考虑将当前的 Excel 文件简单地存储在 SharePoint 库中。

然后我的问题是:自动化流程如何从现在位于 SharePoint 库中的 Excel 工作簿中提取所需的值?这是可以使用 Excel Services 的吗?还是有另一种/更好的方法?而且就算能做到,这样做是明智之举吗?

【问题讨论】:

    标签: sharepoint excel


    【解决方案1】:

    经历过类似的事情后,我可以告诉您,从文档库中的 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...
    }
    

    您也可以轻松地将其放入控制台应用程序中。

    【讨论】:

    • 谢谢。但是,有什么理由使用 Excel Services,因为它是内置的(MOSS)?
    • 我没有任何使用 Excel 服务的经验,所以我不能说任何一种方式。我们需要在 MOSS 和 WSS(我们都有)上使用它,而且看起来更容易。
    • 有机会分享您创建的自定义工作流程。我正在尝试从 SharePoint 库中的 excel 工作簿中提取数据,然后将数据传输到 SQL 表。感谢任何指导谢谢
    • 您有什么特别的问题吗?我会开始在控制台应用程序中编写代码(更易于测试),然后在需要时将其移动到工作流中。
    【解决方案2】:

    是的,我正在尝试在工作簿的多张纸上提取一系列单元格。我能够在控制台应用程序中使用下面的一些代码并在命令窗口中查看数据。现在我需要将数据转储到 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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2017-06-18
      • 2016-08-11
      • 2015-03-01
      相关资源
      最近更新 更多