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;
            }
            }
        }
Exemple #3
0
        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);
        }