private OpenXmlElement CreateChildElement() { Debug.Assert(_elementStack.Count > 0); Debug.Assert(_xmlReader != null); OpenXmlElement element = _elementStack.Peek(); // AlternateContent / Choice / Fallback needs special treatment // The ElementFactory( ) of the Choice / Fallback depends on the parent of AlternateContentChoice // TODO: find a better solution if (element is AlternateContentChoice || element is AlternateContentFallback) { if (_elementStack.Count > 2) { OpenXmlElement topElement = _elementStack.Pop(); OpenXmlElement acElement = _elementStack.Pop(); OpenXmlElement parentsParent = _elementStack.Peek().CloneNode(false); _elementStack.Push(acElement); _elementStack.Push(topElement); element = topElement.CloneNode(false); acElement = new AlternateContent(); acElement.AppendChild(element); parentsParent.AppendChild(acElement); } } return(element.ElementFactory(_xmlReader)); }
private static void AddContent(OpenXmlElement element, object content) { switch (content) { case null: { return; } case OpenXmlElement child: { if (child.Parent is not null) { child = child.CloneNode(true); } element.AppendChild(child); break; } case OpenXmlAttribute attribute: { element.SetAttribute(attribute); break; } case object[] array: { foreach (object o in array) { AddContent(element, o); } break; } case IEnumerable enumerable: { foreach (object o in enumerable) { AddContent(element, o); } break; } } }
public static MemoryStream GetTemplate2(int id, string path, out string code, string _userID) { var memoryStream = new MemoryStream(); AuditDetailInfo item = AuditService.GetInstance().getAuditInfo(id, _userID); using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read)) fileStream.CopyTo(memoryStream); code = item.AuditCode; using (var document = WordprocessingDocument.Open(memoryStream, true)) { document.ChangeDocumentType(WordprocessingDocumentType.Document); // change from template to document DateTime date = DateTime.Now; string currentDate = "Ngày " + date.ToString("dd/MM/yyyy"); var body = document.MainDocumentPart.Document.Body; var paras = body.Elements <Paragraph>(); Table tableData = CreateTable2(item); var startTimeText = "Vào lúc " + item.StartTime.Hour + " giờ " + item.StartTime.Minute + " phút ngày " + item.StartTime.Day + " tháng " + item.StartTime.Month + " năm " + item.StartTime.Year; var endTimeText = "Vào lúc " + item.EndTime.Hour + " giờ " + item.EndTime.Minute + " phút ngày " + item.EndTime.Day + " tháng " + item.EndTime.Month + " năm " + item.EndTime.Year; var intime = "ngày " + item.InTime.Day + " tháng " + item.InTime.Month + " năm " + item.InTime.Year; foreach (var text in body.Descendants <Text>()) { string auditCode = WordUtils.checkNull(item.AuditCode); text.Text = text.Text.Replace("#", ""); text.Text = text.Text.Replace("code", auditCode.Contains("/BB-BKG") ? auditCode : "Số: ......./BB-BKG"); text.Text = text.Text.Replace("starttime", startTimeText); text.Text = text.Text.Replace("endtime", endTimeText); text.Text = text.Text.Replace("location", WordUtils.checkNull(HardData.location[Int32.Parse(item.Location) - 1])); text.Text = text.Text.Replace("preside", WordUtils.checkNull(item.PresideTitle + " " + item.PresideName + " - " + item.PresideRoleName)); text.Text = text.Text.Replace("secretary", WordUtils.checkNull(item.SecretaryTitle + " " + item.SecretaryName + " - " + item.SecretaryRoleName)); /* text.Text = text.Text.Replace("curDepart", item.CurDepartmentName); * text.Text = text.Text.Replace("depart", item.DepartmentName);*/ text.Text = text.Text.Replace("preName", item.PresideName); text.Text = text.Text.Replace("secName", item.SecretaryName); text.Text = text.Text.Replace("datein", intime); if (text.Text == "lstItem") { DocumentFormat.OpenXml.OpenXmlElement textP1 = text.Parent; DocumentFormat.OpenXml.OpenXmlElement textP2 = textP1.Parent; body.InsertAfter(tableData, textP2); textP1.Remove(); } if (text.Text == "firstelist") { text.Text = text.Text.Replace("firstelist", ""); DocumentFormat.OpenXml.OpenXmlElement textP1 = text.Parent; foreach (AuditEmployeeInfo employ in item.Employees) { textP1.AppendChild(new Tabs()); textP1.AppendChild(new Tabs()); textP1.AppendChild(new Tabs()); textP1.AppendChild(new Tabs()); textP1.AppendChild(new Text("- " + employ.Title + " " + employ.Name + " - " + employ.RoleName)); textP1.AppendChild(new Break()); } } if (text.Text == "endelist") { text.Text = text.Text.Replace("endelist", ""); DocumentFormat.OpenXml.OpenXmlElement textP1 = text.Parent; foreach (AuditEmployeeInfo employ in item.Employees) { int tempLen = 50 - employ.Name.Length; string dot = " :"; for (var i = 0; i < tempLen; i++) { dot += "."; } textP1.AppendChild(new Text(" * " + employ.Name + dot)); textP1.AppendChild(new Break()); textP1.AppendChild(new Break()); textP1.AppendChild(new Break()); } } } document.Save(); document.Close(); } return(memoryStream); }