2016-03-08 54 views
0

我想将在内存中创建的工作簿连接到PPT图表。我已经创建了该工作簿(如果完全正确,我不确定),并且我需要以某种方式将其附加到图表和整个PP包。将内部工作簿添加到PP图表

  MemoryStream memoryStream = new MemoryStream(); 
     SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook); 
     WorkbookPart wbPart= spreadsheetDocument.AddWorkbookPart(); 
     // create the worksheet 
     WorksheetPart wsPart= wbPart.AddNewPart<WorksheetPart>(); 

     wsPart.Worksheet = new Worksheet(new SheetData()); 
     Worksheet ws=wsPart.Worksheet; 
     ChartSpace chartSpace=chartPart.ChartSpace; 
     List<StringReference> dataReferences = chartSpace.Descendants<StringReference>().ToList(); 
     if (dataReferences!=null) 
     { 
      Support.SupOpenXML.FillWorksheetWithChartData(wsPart.Worksheet, dataReferences); 
     } 

     ws.Save(); 
     memoryStream.Seek(0, SeekOrigin.Begin); 

     var sr = new StreamReader(memoryStream); 
     string myStr = sr.ReadToEnd(); 
     chartPart.AddEmbeddedPackagePart(myStr); 

上次操作给我一个错误,myStr中有一些奇怪的值。我应该在代码中更改哪些内容才能工作?我应该改变什么样的关系才能发挥作用?

流:"PK\0\0\0\b\0*~hH\0\0\0\0\0\0\0\0\0\0\0\0\0\0xl/workbook.xml ?\0(?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0PK\n\0\0\0\0\0*~hH\0\0\0\0\0\0\0\0\0\0\0\0\v\0\0_rels/.rels ?\0(?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0PK\0\0\0\b\0*~hH????\0\0\0\0a\0\0\0\0xl/worksheets/sheet.xml ?\0(?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0PK\0\0\0\b\0*~hH\0\0\0\0\0\0\0\0\0\0\0\0\0\0xl/_rels/workbook.xml.rels ?\0(?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0PK-\0\0\0\0\b\0*~hH\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0xl/workbook.xmlPK-\0\n\0\0\0\0\0*~hH\0\0\0\0\0\0\0\0\0\0\0\0\v\0\0\0\0\0\0\0\0\0\0\0\0\0I\0\0\0_rels/.relsPK-\0\0\0\0\b\0*~hH????\0\0\0\0a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0xl/worksheets/sheet.xmlPK-\0\0\0\0\b\0*~hH\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0xl/_rels/workbook.xml.relsPK\0\0\0\0\0\0\0\03\0\0\0\0"

+1

不应AddEmbeddedPackagePart第一是一个对象像在[这个教程](https://blogs.msdn.microsoft.com/brian_jones/2009/06/30/embedding-an-open-xml-file-in-另外,开放式XML的文件/),那么你可以用流调用了feeddata上呢? –

+0

我在路上,增加一条,作为它在本教程中,但嵌入的文件没有显示为Excel文件只是作为一个“package.bin”。我可以将它解压缩,它看起来再正常。 – buks

回答

0

我用下面的代码:

 List<ExternalRelationship> references = chartPart.ExternalRelationships.ToList(); 
     for (int i = chartPart.ExternalRelationships.Count() - 1; i >= 0; i--) 
     { 
      ReferenceRelationship refer = chartPart.ExternalRelationships.ElementAt(i); 
      chartPart.DeleteReferenceRelationship(refer); 
     } 
     chartPart.ChartSpace.RemoveAllChildren<ExternalData>(); 

     string relationID = "rId99999"; 
     EmbeddedPackagePart embeddedPackagePart1 = chartPart.AddNewPart<EmbeddedPackagePart>("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", relationID); 
     memoryStream.Seek(0, SeekOrigin.Begin); 

     embeddedPackagePart1.FeedData(memoryStream); 

     chartPart.CreateRelationshipToPart(embeddedPackagePart1, relationID); 
     ExternalData externalData1 = new ExternalData() { Id = relationID }; 
     AutoUpdate autoUpdate1 = new AutoUpdate() { Val = false }; 
     externalData1.Append(autoUpdate1); 
     chartPart.ChartSpace.Append(externalData1); 

和现在的工作。

相关问题