【问题标题】:Related on Custom Timer Job in sharepoint 2010与 sharepoint 2010 中的自定义计时器作业相关
【发布时间】:2011-09-05 03:32:28
【问题描述】:

如何创建自定义作业以在共享点 2010 中仅包含 2 列(标题、描述)的列表中导出 Excel 文件?我想要这个问题的编码部分?

从 Excel 读取数据并写入共享点列表,这必须通过自定义作业编码来完成

在此先感谢... 纳雷什

【问题讨论】:

标签: sharepoint-2010


【解决方案1】:

使用 OpenXMLSDK - 免费下载,需要安装在服务器上。

    [...]
    using DocumentFormat.OpenXml;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Spreadsheet;

    public class OffBookAssetLibraryEventReceiver : SPItemEventReceiver
    {
        public override void ItemUpdated(SPItemEventProperties properties)
       {
        // This if statement is to work around the sharepoint issue of this event firing twice.
        if (properties.AfterProperties["vti_sourcecontrolcheckedoutby"] == null && properties.BeforeProperties["vti_sourcecontrolcheckedoutby"] != null)
        {

    byte[] workSheetByteArray = properties.ListItem.File.OpenBinary();

    Stream stream = new MemoryStream(workSheetByteArray);

    Package spreadsheetPackage = Package.Open(stream, FileMode.Open, FileAccess.ReadWrite);

    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(spreadsheetPackage);

    SharedStringTablePart shareStringTablePart = spreadsheetDocument.WorkbookPart.SharedStringTablePart;

    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets;

     try
        {
            foreach (Sheet sheet in sheets)
            {
                var worksheetPart = (WorksheetPart)spreadsheetDocument.WorkbookPart.GetPartById(sheet.Id.Value);

                IEnumerable<Row> rows = worksheetPart.Worksheet.GetFirstChild<SheetData>().Elements<Row>();

                if (rows.Count() > 0)
                {
                    int rowNumber = 0;

                    foreach (Row row in rows)
                    {
                        IEnumerable<Cell> cells = row.Elements<Cell>();
                        Cell title = null;
                        Cell description = null;

                        title = cells.ToArray()[0];
                        description = cells.ToArray()[1];

                        // This is the code used to extract cells from excel that are NOT inline (Inline cells are decimal and dates - although dates are stored as int)
                        int index = int.Parse(title.CellValue.Text);
                        string titleString = spreadsheetDocument.WorkbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(index).InnerText;

                        index = int.Parse(description.CellValue.Text);
                        string descriptionString = spreadsheetDocument.WorkbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(index).InnerText;

                        //Insert into your sharepoint list here!


                    }
                }
            }
         }
     }
  }
}

我建议将此代码放入文档库的事件接收器中(如上所示)。

【讨论】:

    【解决方案2】:

    你看过 Excel Reader for .NET

    http://exceldatareader.codeplex.com/

    【讨论】:

    【解决方案3】:

    打开 Excel 文件
    查看 SharePoint 2010 的 Excel Serviceswalkthrough 解释了打开 excel 文件所需的步骤。

    SharePoint 自定义计时器作业
    要创建自定义 SharePoint 计时器作业,您必须创建一个继承自 SPJobDefinition 的类。完整的教程可以在这篇博文中找到:Creating Custom Timer Job in SharePoint 2010

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多