与sharepoint 2010中的自定义计时器作业相关

时间:2011-09-05 03:32:28

标签: sharepoint-2010

如何创建自定义作业以在sharepoint 2010中只有2列(标题,描述)的列表中导出Excel文件?我想要这个问题的编码部分吗?

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

提前致谢... 纳雷什

3 个答案:

答案 0 :(得分: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!


                    }
                }
            }
         }
     }
  }
}

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

答案 1 :(得分:0)

您是否查看了.NET REader for .NET

http://exceldatareader.codeplex.com/

答案 2 :(得分:0)

打开Excel文件
请查看SharePoint 2010的Excel Services。有一个walkthrough解释了打开Excel文件所需的步骤。

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