将内部工作簿添加到 PP 图表
adding internal workbook to PP chart
我想将在 memorystream 中创建的工作簿附加到 powerpoint 图表。我已经创建了那个工作簿(我现在不确定是否 100% 正确),我需要以某种方式将它附加到图表和整个 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[=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]xl/workbook.xml ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK\n[=11=][=11=][=11=][=11=][=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]\v[=11=][=11=]_rels/.rels ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK[=11=][=11=][=11=]\b[=11=]*~hH????[=11=][=11=][=11=][=11=]a[=11=][=11=][=11=][=11=]xl/worksheets/sheet.xml ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK[=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]xl/_rels/workbook.xml.rels ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK-[=11=][=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]xl/workbook.xmlPK-[=11=]\n[=11=][=11=][=11=][=11=][=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]\v[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]I[=11=][=11=][=11=]_rels/.relsPK-[=11=][=11=][=11=][=11=]\b[=11=]*~hH????[=11=][=11=][=11=][=11=]a[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]?[=11=][=11=][=11=]xl/worksheets/sheet.xmlPK-[=11=][=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]?[=11=][=11=][=11=]xl/_rels/workbook.xml.relsPK[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]"
我使用了以下代码:
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);
现在可以使用了。
我想将在 memorystream 中创建的工作簿附加到 powerpoint 图表。我已经创建了那个工作簿(我现在不确定是否 100% 正确),我需要以某种方式将它附加到图表和整个 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[=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]xl/workbook.xml ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK\n[=11=][=11=][=11=][=11=][=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]\v[=11=][=11=]_rels/.rels ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK[=11=][=11=][=11=]\b[=11=]*~hH????[=11=][=11=][=11=][=11=]a[=11=][=11=][=11=][=11=]xl/worksheets/sheet.xml ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK[=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]xl/_rels/workbook.xml.rels ?[=11=](?[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]PK-[=11=][=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]xl/workbook.xmlPK-[=11=]\n[=11=][=11=][=11=][=11=][=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]\v[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]I[=11=][=11=][=11=]_rels/.relsPK-[=11=][=11=][=11=][=11=]\b[=11=]*~hH????[=11=][=11=][=11=][=11=]a[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]?[=11=][=11=][=11=]xl/worksheets/sheet.xmlPK-[=11=][=11=][=11=][=11=]\b[=11=]*~hH[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]?[=11=][=11=][=11=]xl/_rels/workbook.xml.relsPK[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]"
我使用了以下代码:
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);
现在可以使用了。