如何使用“导入”导入TFS工作项;“多对多”;Excel中的直接链接

如何使用“导入”导入TFS工作项;“多对多”;Excel中的直接链接,excel,tfs,many-to-many,hyperlink,import-from-excel,Excel,Tfs,Many To Many,Hyperlink,Import From Excel,我有一个从ReqPro创建的需求Excel电子表格,需要导入TFS。每个需求都有一个链接自和链接至的字段,这两个字段都可以包含多个条目。由于链接关系是多对多的,因此需要使用直接链接类型(而不是父子链接)。我原以为我可以使用Excel 2010导入此内容,但当在Excel中使用直接链接打开查询时,结果是平面的,并且不包含链接信息。我有超过10000个这样的需求需要导入数千个链接,所以我需要将其自动化。有没有一种简单的方法可以将多对多直接链接导入TFS?很抱歉,这是出于设计,请参阅microsoft

我有一个从ReqPro创建的需求Excel电子表格,需要导入TFS。每个需求都有一个链接自和链接至的字段,这两个字段都可以包含多个条目。由于链接关系是多对多的,因此需要使用直接链接类型(而不是父子链接)。我原以为我可以使用Excel 2010导入此内容,但当在Excel中使用直接链接打开查询时,结果是平面的,并且不包含链接信息。我有超过10000个这样的需求需要导入数千个链接,所以我需要将其自动化。有没有一种简单的方法可以将多对多直接链接导入TFS?

很抱歉,这是出于设计,请参阅microsoft connect上出现的此错误

然而,似乎有几个解决办法

  • 如果只需要查看查询结果,则可以通过电子邮件或以报表形式查看Sharepoint门户中的结果。(由于这显然是“设计”,有人能说设计不一致吗?)

  • 如果需要编辑结果,或许可以将查询设置为“工作项树”类型的查询

  • 使用TFS SDK正确生成Excel文档。我对此做了一些调查,它是可以做到的,但因为我们只需要观看,1就足够了。使生成的文档可编辑可能需要一些时间

  • PS-我可以确认我已经尝试将一个工作项树导出到excel,并且它保持了链接结构。另外,请参阅这篇MSDN文章,了解如何做到这一点

    但是如果你想使用TFS API,我会在下面添加一些psudo代码, 1.使用OpenXMLSDK2.0 for MicrosoftOffice连接到大型excel并通读它 2.使用TFSAPI以编程方式创建工作项 3.在工作项之间创建链接

    private void从ExcelandCreateLinkWorkItems()读取信息
    {
    使用(SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Open(@“FilePath\fileName”,false))
    {
    WorkbookPart WorkbookPart=电子表格文档.WorkbookPart;
    WorksheetPart WorksheetPart=workbookPart.WorksheetParts.First();
    SheetData SheetData=worksheetPart.Worksheet.Elements().First();
    字符串文本;
    int WorkItemId=0;
    foreach(sheetData.Elements()中的r行)
    {
    foreach(r.Elements()中的单元格c)
    {
    //循环遍历每一行,直到完成工作项链接的一个逻辑块。
    var tfs=tfstreamprojectcollectionfactory.GetTeamProjectCollection(新Uri(“TfsUrl”));
    var wiStore=tfs.GetService();
    WorkItem wi=new WorkItem(new WorkItemType//创建excel中类型的新工作项)
    //将所有列单元格值关联到工作项
    wi.Save();
    //这应该给你一个身份证了
    WorkItemId=wi.Id;
    }
    }
    }
    }
    
    嗯 干杯,塔伦

    private void ReadInformationFromExcelAndCreateLinkWorkItems()
        {
            using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(@"FilePath\fileName", false))
            {
                WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
                WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
                SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
                string text;
                int WorkItemId = 0;
                foreach (Row r in sheetData.Elements<Row>())
                {
                    foreach (Cell c in r.Elements<Cell>())
                    {
                        // Loop through each row till you complete one logical block of work item Links.
                        var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("TfsUrl"));
                        var wiStore = tfs.GetService<WorkItemStore>();
    
                        WorkItem wi = new WorkItem(new WorkItemType // Create a new work item of the type as in your excel)
                        // associate all column cell values to the work item
                        wi.Save(); 
                        // This should give you an ID now
                        WorkItemId = wi.Id;
    
                    }
                }
            }
        }