Ich habe diesen Code. Ich bin in der Lage, einen PPTX-Bericht mit Textdaten perfekt zu erstellen. Ich habe auch 4 Tabellen in diesem Bericht, die dynamische Daten enthalten. Ich kann eine Tabelle in PPT erstellen, aber nicht mehrere. Anforderung: Auf der rechten Seite habe ich 4 Tabellen:
Erwartung< /strong>: Ich kann die erste Tabelle erhalten:
in der AddNewSlide-Methode in der Annahme, dass dadurch ein weiterer Rahmen für die Tabelle erstellt wird, den ich mit Daten füllen und auf PPT platzieren kann. Aber es funktioniert nicht. Bitte helfen Sie.
using (PresentationDocument presentationDocument = PresentationDocument.Open(slideName, true))
{
// Get the first slide from presentation
SlidePart intitalSlide = presentationDocument.PresentationPart.SlideParts.First();
AddNewSlide(presentationDocument, intitalSlide, projectID, reportType);
}
#region Powerpoint Reports
private System.Data.DataTable GetValueForPPTReport(int projectID)
{
System.Data.DataTable dt = new System.Data.DataTable();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select convert(varchar(10),proj_id) + ' : ' + proj_name as projName,proj_type, proj_problem_state, proj_goal_obj, proj_in_scope, proj_out_scope , proj_who_customer, proj_what_defect,proj_critical_to_qlty from tbl_proj_details where proj_id = @proj_id";
cmd.Parameters.Add("@proj_id", SqlDbType.Int).Value = projectID;
dt = (new Business()).Execute(cmd);
return dt;
}
private System.Data.DataTable GetValueForPPTReportBenefit(int projectID)
{
System.Data.DataTable dt = new System.Data.DataTable();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select [proj_ben_type] as [Benefit Type], [proj_ben_year] as Year ,[proj_ben_fcst] as Forecast,[proj_ben_act] as Actual from [tbl_proj_benefits_detail] where proj_id = @proj_id";
cmd.Parameters.Add("@proj_id", SqlDbType.Int).Value = projectID;
dt = (new Business()).Execute(cmd);
return dt;
}
private void AddNewSlide(PresentationDocument presentationDocument, SlidePart _slideTemplate, int projectID, string reportType)
{
PresentationPart parent = presentationDocument.PresentationPart;
var newSlidePart = parent.AddNewPart("newSlide1");
if (reportType == "Charter")
{
System.Data.DataTable dt = GetValueForPPTReport(projectID);
// copy the contents of the template slide to the new slide and attach the appropriate layout
newSlidePart.FeedData(_slideTemplate.GetStream(FileMode.Open));
newSlidePart.AddPart(_slideTemplate.SlideLayoutPart, _slideTemplate.GetIdOfPart(_slideTemplate.SlideLayoutPart));
// Alter the placeholder text in new slide
SetPlaceholder(newSlidePart, "txtProjectIDName", dt.Rows[0]["projName"].ToString());
SetPlaceholder(newSlidePart, "txtProjType", dt.Rows[0]["proj_type"].ToString());
SetPlaceholder(newSlidePart, "txtProbSt", dt.Rows[0]["proj_problem_state"].ToString());
SetPlaceholder(newSlidePart, "txtGoal", dt.Rows[0]["proj_goal_obj"].ToString());
SetPlaceholder(newSlidePart, "txtDate", System.DateTime.Now.ToString("MM/dd/yyyy HH:mm"));
}
// Add dynamic Tables here
//// List elements = new List();
//// elements.Add(new P.NonVisualGraphicFrameProperties
//// (new P.NonVisualDrawingProperties() { Id = 1, Name = "xyz" }, new P.NonVisualGraphicFrameDrawingProperties(), new ApplicationNonVisualDrawingProperties()));
// Declare and instantiate the graphic Frame of the new slide
P.GraphicFrame graphicFrame = newSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame());
P.GraphicFrame graphicFrame2 = newSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame());
// Specify the required Frame properties of the graphicFrame
ApplicationNonVisualDrawingPropertiesExtension applicationNonVisualDrawingPropertiesExtension = new ApplicationNonVisualDrawingPropertiesExtension() { Uri = "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}" };
P14.ModificationId modificationId1 = new P14.ModificationId() { Val = 3229994563U };
modificationId1.AddNamespaceDeclaration("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main");
applicationNonVisualDrawingPropertiesExtension.Append(modificationId1);
ApplicationNonVisualDrawingPropertiesExtension applicationNonVisualDrawingPropertiesExtension2 = new ApplicationNonVisualDrawingPropertiesExtension() { Uri = "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}" };
P14.ModificationId modificationId2 = new P14.ModificationId() { Val = 3229994564U };
modificationId2.AddNamespaceDeclaration("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main");
applicationNonVisualDrawingPropertiesExtension.Append(modificationId2);
graphicFrame.NonVisualGraphicFrameProperties = new P.NonVisualGraphicFrameProperties
(new D.NonVisualDrawingProperties() { Id = 1, Name = "table1" },
new D.NonVisualGraphicFrameDrawingProperties(new D.GraphicFrameLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new ApplicationNonVisualDrawingPropertiesExtensionList(applicationNonVisualDrawingPropertiesExtension)));
graphicFrame2.NonVisualGraphicFrameProperties = new P.NonVisualGraphicFrameProperties
(new D.NonVisualDrawingProperties() { Id = 2, Name = "table2" },
new D.NonVisualGraphicFrameDrawingProperties(new D.GraphicFrameLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new ApplicationNonVisualDrawingPropertiesExtensionList(applicationNonVisualDrawingPropertiesExtension2)));
if (true)
{
graphicFrame.Transform = new Transform(new D.Offset() { X = 5050609L, Y = 883400L }, new D.Extents() { Cx = 0, Cy = 0 });
// Specify the Graphic of the graphic Frame
graphicFrame.Graphic = new D.Graphic(new D.GraphicData(GenerateTable(projectID, reportType)) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/table" });
graphicFrame2.Transform = new Transform(new D.Offset() { X = 5050609L, Y = 983400L }, new D.Extents() { Cx = 0, Cy = 0 });
// Specify the Graphic of the graphic Frame
graphicFrame2.Graphic = new D.Graphic(new D.GraphicData(GenerateTable(projectID, reportType)) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/table" });
}
// save the changes to the slide
newSlidePart.Slide.Save();
// need to assign an id to the new slide and add it to the slideIdList
// first figure out the largest existing id
DocumentFormat.OpenXml.Presentation.SlideIdList slideIdList = parent.Presentation.SlideIdList;
uint maxSlideId = 1;
foreach (DocumentFormat.OpenXml.Presentation.SlideId slideId in slideIdList.ChildElements)
{
if (slideId.Id > maxSlideId)
maxSlideId = slideId.Id;
}
// assign an id and add the new slide at the end of the list
DocumentFormat.OpenXml.Presentation.SlideId newSlideId = new DocumentFormat.OpenXml.Presentation.SlideId { Id = ++maxSlideId, RelationshipId = parent.GetIdOfPart(newSlidePart) };
slideIdList.Append(newSlideId);
// Delete first template slide
SlideId tempSlideId = slideIdList.ChildElements[0] as SlideId;
slideIdList.RemoveChild(tempSlideId);
}
private void SetPlaceholder(SlidePart slidePart, string placeholder, string value)
{
List textListExif1 = slidePart.Slide.Descendants().Where(t => t.Text.Equals(placeholder)).ToList();
foreach (D.Text text in textListExif1)
{
text.Text = value;
}
}
#region tables
///
/// Generate Table as below order:
/// a:tbl(Table) ->a:tr(TableRow)->a:tc(TableCell)
/// We can return TableCell object with CreateTextCell method
/// and Append the TableCell object to TableRow
///
/// Table Object
private D.Table GenerateTable(int projectID, string reportType)
{
// Declare and instantiate table
D.Table table = new D.Table();
// Specify the required table properties for the table
D.TableProperties tableProperties = new D.TableProperties() { FirstRow = true, BandRow = false };
D.TableStyleId tableStyleId = new D.TableStyleId();
tableStyleId.Text = "{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}";
tableProperties.Append(tableStyleId);
D.TableGrid tableGrid1 = new D.TableGrid();
System.Data.DataTable dtData = new System.Data.DataTable();
if (reportType == "Charter")
{
//tblXBenefit
dtData = GetValueForPPTReportBenefit(projectID);
// Declare and instantiate tablegrid and colums
//D.TableGrid tableGrid1 = new D.TableGrid();
D.GridColumn gridColumn1 = new D.GridColumn() { Width = 1848000L };
D.GridColumn gridColumn2 = new D.GridColumn() { Width = 648000L };
D.GridColumn gridColumn3 = new D.GridColumn() { Width = 648000L };
D.GridColumn gridColumn4 = new D.GridColumn() { Width = 648000L };
tableGrid1.Append(gridColumn1);
tableGrid1.Append(gridColumn2);
tableGrid1.Append(gridColumn3);
tableGrid1.Append(gridColumn4);
}
table.Append(tableProperties);
table.Append(tableGrid1);
// Instantiate the table header row
D.TableRow tableHRow = new D.TableRow() { Height = 0L };
for (int column = 0; column < dtData.Columns.Count; column++)
{
tableHRow.Append(CreateTextCell(dtData.Columns[column].ToString()));
}
table.Append(tableHRow);
// Instantiate the table data row
for (int row = 0; row < dtData.Rows.Count; row++)
{
// Instantiate the table row
D.TableRow tableRow = new D.TableRow() { Height = 0L };
for (int column = 0; column < dtData.Columns.Count; column++)
{
tableRow.Append(CreateTextCell(dtData.Rows[row][column].ToString()));
}
table.Append(tableRow);
}
return table;
}
///
/// Create table cell with the below order:
/// a:tc(TableCell)->a:txbody(TextBody)->a:p(Paragraph)->a:r(Run)->a:t(Text)
///
/// Inserted Text in Cell
/// Return TableCell object
private D.TableCell CreateTextCell(string text)
{
if (string.IsNullOrEmpty(text))
{
text = string.Empty;
}
// Declare and instantiate the table cell
// Create table cell with the below order:
// a:tc(TableCell)->a:txbody(TextBody)->a:p(Paragraph)->a:r(Run)->a:t(Text)
D.TableCell tableCell = new D.TableCell();
// Declare and instantiate the text body
D.TextBody textBody = new D.TextBody();
D.BodyProperties bodyProperties = new D.BodyProperties();
D.ListStyle listStyle = new D.ListStyle();
D.Paragraph paragraph = new D.Paragraph();
D.Run run = new D.Run();
D.RunProperties runProperties = new D.RunProperties() { Language = "en-US", Dirty = false, FontSize = 800 };
D.Text text2 = new D.Text();
text2.Text = text;
run.Append(runProperties);
run.Append(text2);
D.EndParagraphRunProperties endParagraphRunProperties = new D.EndParagraphRunProperties() { Language = "en-US", Dirty = false, FontSize = 700 };
paragraph.Append(run);
paragraph.Append(endParagraphRunProperties);
textBody.Append(bodyProperties);
textBody.Append(listStyle);
textBody.Append(paragraph);
D.TableCellProperties tableCellProperties = new D.TableCellProperties();
tableCell.Append(textBody);
tableCell.Append(tableCellProperties);
return tableCell;
}
#endregion
#endregion
Ich habe diesen Code. Ich bin in der Lage, einen PPTX-Bericht mit Textdaten perfekt zu erstellen. Ich habe auch 4 Tabellen in diesem Bericht, die dynamische Daten enthalten. Ich kann eine Tabelle in PPT erstellen, aber nicht mehrere. [b]Anforderung[/b]: Auf der rechten Seite habe ich 4 Tabellen: [img]https://i.sstatic.net/inIuZ.png[/img]
Erwartung< /strong>: Ich kann die erste Tabelle erhalten: [img]https://i.sstatic.net/97OJN.png[/img]
Im folgenden Code habe ich hinzugefügt [code]P.GraphicFrame graphicFrame2[/code] in der AddNewSlide-Methode in der Annahme, dass dadurch ein weiterer Rahmen für die Tabelle erstellt wird, den ich mit Daten füllen und auf PPT platzieren kann. Aber es funktioniert nicht. Bitte helfen Sie. [code]using (PresentationDocument presentationDocument = PresentationDocument.Open(slideName, true)) { // Get the first slide from presentation SlidePart intitalSlide = presentationDocument.PresentationPart.SlideParts.First(); AddNewSlide(presentationDocument, intitalSlide, projectID, reportType); }
#region Powerpoint Reports
private System.Data.DataTable GetValueForPPTReport(int projectID) { System.Data.DataTable dt = new System.Data.DataTable();
SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text;
cmd.CommandText = "select convert(varchar(10),proj_id) + ' : ' + proj_name as projName,proj_type, proj_problem_state, proj_goal_obj, proj_in_scope, proj_out_scope , proj_who_customer, proj_what_defect,proj_critical_to_qlty from tbl_proj_details where proj_id = @proj_id";
private System.Data.DataTable GetValueForPPTReportBenefit(int projectID) { System.Data.DataTable dt = new System.Data.DataTable();
SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text;
cmd.CommandText = "select [proj_ben_type] as [Benefit Type], [proj_ben_year] as Year ,[proj_ben_fcst] as Forecast,[proj_ben_act] as Actual from [tbl_proj_benefits_detail] where proj_id = @proj_id";
private void AddNewSlide(PresentationDocument presentationDocument, SlidePart _slideTemplate, int projectID, string reportType) { PresentationPart parent = presentationDocument.PresentationPart; var newSlidePart = parent.AddNewPart("newSlide1");
if (reportType == "Charter") { System.Data.DataTable dt = GetValueForPPTReport(projectID);
// copy the contents of the template slide to the new slide and attach the appropriate layout newSlidePart.FeedData(_slideTemplate.GetStream(FileMode.Open)); newSlidePart.AddPart(_slideTemplate.SlideLayoutPart, _slideTemplate.GetIdOfPart(_slideTemplate.SlideLayoutPart));
// Alter the placeholder text in new slide SetPlaceholder(newSlidePart, "txtProjectIDName", dt.Rows[0]["projName"].ToString()); SetPlaceholder(newSlidePart, "txtProjType", dt.Rows[0]["proj_type"].ToString()); SetPlaceholder(newSlidePart, "txtProbSt", dt.Rows[0]["proj_problem_state"].ToString()); SetPlaceholder(newSlidePart, "txtGoal", dt.Rows[0]["proj_goal_obj"].ToString()); SetPlaceholder(newSlidePart, "txtDate", System.DateTime.Now.ToString("MM/dd/yyyy HH:mm")); }
// Add dynamic Tables here //// List elements = new List(); //// elements.Add(new P.NonVisualGraphicFrameProperties //// (new P.NonVisualDrawingProperties() { Id = 1, Name = "xyz" }, new P.NonVisualGraphicFrameDrawingProperties(), new ApplicationNonVisualDrawingProperties()));
// Declare and instantiate the graphic Frame of the new slide P.GraphicFrame graphicFrame = newSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame()); P.GraphicFrame graphicFrame2 = newSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame());
// Specify the required Frame properties of the graphicFrame ApplicationNonVisualDrawingPropertiesExtension applicationNonVisualDrawingPropertiesExtension = new ApplicationNonVisualDrawingPropertiesExtension() { Uri = "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}" };
P14.ModificationId modificationId1 = new P14.ModificationId() { Val = 3229994563U }; modificationId1.AddNamespaceDeclaration("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main"); applicationNonVisualDrawingPropertiesExtension.Append(modificationId1);
ApplicationNonVisualDrawingPropertiesExtension applicationNonVisualDrawingPropertiesExtension2 = new ApplicationNonVisualDrawingPropertiesExtension() { Uri = "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}" }; P14.ModificationId modificationId2 = new P14.ModificationId() { Val = 3229994564U }; modificationId2.AddNamespaceDeclaration("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main"); applicationNonVisualDrawingPropertiesExtension.Append(modificationId2);
graphicFrame.NonVisualGraphicFrameProperties = new P.NonVisualGraphicFrameProperties (new D.NonVisualDrawingProperties() { Id = 1, Name = "table1" }, new D.NonVisualGraphicFrameDrawingProperties(new D.GraphicFrameLocks() { NoGrouping = true }), new ApplicationNonVisualDrawingProperties(new ApplicationNonVisualDrawingPropertiesExtensionList(applicationNonVisualDrawingPropertiesExtension)));
graphicFrame2.NonVisualGraphicFrameProperties = new P.NonVisualGraphicFrameProperties (new D.NonVisualDrawingProperties() { Id = 2, Name = "table2" }, new D.NonVisualGraphicFrameDrawingProperties(new D.GraphicFrameLocks() { NoGrouping = true }), new ApplicationNonVisualDrawingProperties(new ApplicationNonVisualDrawingPropertiesExtensionList(applicationNonVisualDrawingPropertiesExtension2)));
if (true) { graphicFrame.Transform = new Transform(new D.Offset() { X = 5050609L, Y = 883400L }, new D.Extents() { Cx = 0, Cy = 0 }); // Specify the Graphic of the graphic Frame graphicFrame.Graphic = new D.Graphic(new D.GraphicData(GenerateTable(projectID, reportType)) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/table" });
graphicFrame2.Transform = new Transform(new D.Offset() { X = 5050609L, Y = 983400L }, new D.Extents() { Cx = 0, Cy = 0 });
// Specify the Graphic of the graphic Frame graphicFrame2.Graphic = new D.Graphic(new D.GraphicData(GenerateTable(projectID, reportType)) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/table" }); }
// save the changes to the slide newSlidePart.Slide.Save();
// need to assign an id to the new slide and add it to the slideIdList // first figure out the largest existing id DocumentFormat.OpenXml.Presentation.SlideIdList slideIdList = parent.Presentation.SlideIdList; uint maxSlideId = 1;
foreach (DocumentFormat.OpenXml.Presentation.SlideId slideId in slideIdList.ChildElements) { if (slideId.Id > maxSlideId) maxSlideId = slideId.Id; }
// assign an id and add the new slide at the end of the list DocumentFormat.OpenXml.Presentation.SlideId newSlideId = new DocumentFormat.OpenXml.Presentation.SlideId { Id = ++maxSlideId, RelationshipId = parent.GetIdOfPart(newSlidePart) }; slideIdList.Append(newSlideId);
// Delete first template slide SlideId tempSlideId = slideIdList.ChildElements[0] as SlideId; slideIdList.RemoveChild(tempSlideId); }
// Instantiate the table header row D.TableRow tableHRow = new D.TableRow() { Height = 0L }; for (int column = 0; column < dtData.Columns.Count; column++) { tableHRow.Append(CreateTextCell(dtData.Columns[column].ToString())); } table.Append(tableHRow);
// Instantiate the table data row for (int row = 0; row < dtData.Rows.Count; row++) { // Instantiate the table row D.TableRow tableRow = new D.TableRow() { Height = 0L }; for (int column = 0; column < dtData.Columns.Count; column++) { tableRow.Append(CreateTextCell(dtData.Rows[row][column].ToString())); } table.Append(tableRow); } return table; }
/// /// Create table cell with the below order: /// a:tc(TableCell)->a:txbody(TextBody)->a:p(Paragraph)->a:r(Run)->a:t(Text) /// /// Inserted Text in Cell /// Return TableCell object private D.TableCell CreateTextCell(string text) { if (string.IsNullOrEmpty(text)) { text = string.Empty; }
// Declare and instantiate the table cell // Create table cell with the below order: // a:tc(TableCell)->a:txbody(TextBody)->a:p(Paragraph)->a:r(Run)->a:t(Text) D.TableCell tableCell = new D.TableCell();
// Declare and instantiate the text body D.TextBody textBody = new D.TextBody(); D.BodyProperties bodyProperties = new D.BodyProperties(); D.ListStyle listStyle = new D.ListStyle();
D.Paragraph paragraph = new D.Paragraph(); D.Run run = new D.Run(); D.RunProperties runProperties = new D.RunProperties() { Language = "en-US", Dirty = false, FontSize = 800 }; D.Text text2 = new D.Text(); text2.Text = text;
run.Append(runProperties); run.Append(text2); D.EndParagraphRunProperties endParagraphRunProperties = new D.EndParagraphRunProperties() { Language = "en-US", Dirty = false, FontSize = 700 };
Ich habe eine interaktive Grid -Seite. Ich möchte die Schaltfläche Speichern im Aktionsmenü ausblenden, um zu verhindern, dass der Benutzer den Bericht als Standard- oder Primärbericht
speichert....
Bildbeschreibung hier eingeben
Bildbeschreibung eingeben. > Aber wenn Sie das resultierende Bild mit POI überprüfen, können Sie sehen, dass der Rand doppelt ausgekleidet ist. for (XSLFSlide slide :...
Word verfügt über eine lästige Funktion, bei der nach jeder Tabelle ein Absatz eingefügt wird, der Formatierungsinformationen für diese Tabelle enthält.
Wenn Ihre Tabelle am Ende einer Seite steht,...
Ich möchte zwei Sellerie-Warteschlangen erstellen (für verschiedene Arten von Aufgaben)
Meine Sellerie-Konfiguration. Ich erwarte, dass diese Konfiguration zwei Warteschlangen „celery“ und „celery:1“...