public void WriteProject() { string[] txtID = new string[] { "tgProjectName", "tgProjectType", "tgCoustomerName", "tgParkName", "tgIndustrialParkName", "tgSector", "tgOwnerName", "tgOwnerDeptName", "tgIsDiversion", "tgMarketingActivityName", "tgDescription", "tgIsKeyProject", "tgProjectEndStatus", "tgCreatorName", "tgCreateTime", "tgCreatorDeptName", "tgPhaseName", "tgPhaseStatus", "tgPhaseCreatorName", "tgPhaseCreateTime" }; DataTable dt = new DataTable(); for (int i = 0; i < txtID.Length; i++) { dt.Columns.Add(txtID[i]); } DataRow dr = dt.NewRow(); for (int i = 0; i < dt.Columns.Count; i++) { dr[dt.Columns[i].ColumnName] = dt.Columns[i].ColumnName; } dt.Rows.Add(dr); SimplePropertyCollection spcollection = new SimplePropertyCollection(); for (int i = 0; i < dt.Columns.Count; i++) { spcollection.Add(new DCTSimpleProperty() { TagID = dt.Columns[i].ColumnName, IsReadOnly = true }); } string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); DirectoryInfo rootDirectory = new DirectoryInfo(path); byte[] templateBinary = File.ReadAllBytes(Path.Combine(rootDirectory.Parent.Parent.FullName, "项目信息.docx")); byte[] fillBinary = WordEntry.CopyPageFillData(templateBinary, dt.DefaultView, spcollection); File.WriteAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "项目信息.docx"), fillBinary); }
private static void ClonePageAndFill(DataRowView drv, OpenXmlElement item, ref OpenXmlElement addItem, SimplePropertyCollection templateSimples) { foreach (SdtElement sdtElement in item.Descendants<SdtElement>()) { foreach (SdtAlias ite11 in sdtElement.Descendants<SdtAlias>()) { DCTSimpleProperty temSimple = templateSimples[ite11.Val]; if (temSimple != null) { var items = sdtElement.Descendants<Run>(); if (items.Count() > 0) { Run runElement = items.First(); runElement.RemoveAllChildren<Text>(); runElement.AppendChild<Text>(new Text(GeneralFormatter.ToString(drv[temSimple.TagID], temSimple.FormatString))); if (temSimple.IsReadOnly) { Lock lockControl = new Lock(); lockControl.Val = LockingValues.SdtContentLocked; sdtElement.SdtProperties.Append(lockControl); } } } } } }
private static void CopyPageFillTemplate(DataRowView drv, Body wordBody, SimplePropertyCollection templateSimples) { foreach (SdtElement fillItem in wordBody.Descendants<SdtElement>()) { foreach (SdtAlias sdtAlias in fillItem.Descendants<SdtAlias>()) { DCTSimpleProperty dcts = templateSimples[sdtAlias.Val]; if (dcts != null) { var items = fillItem.Descendants<Run>(); if (items.Count() > 0) { Run runElement = items.First(); runElement.RemoveAllChildren<Text>(); runElement.AppendChild<Text>(new Text(GeneralFormatter.ToString(drv[dcts.TagID], dcts.FormatString))); if (dcts.IsReadOnly) { Lock lockControl = new Lock(); lockControl.Val = LockingValues.SdtContentLocked; fillItem.SdtProperties.Append(lockControl); } } } } } }
public static byte[] CopyPageFillData(byte[] templateBuffer, DataView dv, SimplePropertyCollection templateSimples) { using (MemoryStream ms = new MemoryStream()) { ms.Write(templateBuffer, 0, templateBuffer.Length); using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(ms, true)) { Body wordBody = wordDoc.MainDocumentPart.Document.Body; List<OpenXmlElement> ChildElements = wordBody.ChildElements.ToList<OpenXmlElement>(); SectionProperties bodySectionp = wordBody.Descendants<SectionProperties>().LastOrDefault(); bool tagFirst = true; int i = 1; foreach (DataRowView drv in dv) { if (i == 1) { CopyPageFillTemplate(drv, wordBody, templateSimples); i++; continue; } foreach (OpenXmlElement item in ChildElements) { if (item is SectionProperties) { break; } OpenXmlElement addItem = (OpenXmlElement)item.CloneNode(true); if (tagFirst) { AddPageEnd(wordBody, i, bodySectionp); tagFirst = false; } ClonePageAndFill(drv, item, ref addItem, templateSimples); wordBody.InsertBefore<OpenXmlElement>(addItem, bodySectionp); } tagFirst = true; i++; } } return ms.ToArray(); } }
public void FillCopyPageTest() { DataTable dt = new DataTable(); dt.Columns.Add("tag1", typeof(string)); dt.Columns.Add("y1", typeof(int)); dt.Columns.Add("m1", typeof(int)); dt.Columns.Add("d1", typeof(int)); dt.Columns.Add("y2", typeof(int)); dt.Columns.Add("m2", typeof(int)); dt.Columns.Add("d2", typeof(int)); for (int i = 1; i <= 120; i++) { DataRow dr = dt.NewRow(); dr["tag1"] = "这是一份合同"; dr["y1"] = System.DateTime.Now.Year; dr["m1"] = System.DateTime.Now.Month; dr["d1"] = System.DateTime.Now.Month; dr["y2"] = System.DateTime.Now.Year + 2; dr["m2"] = System.DateTime.Now.Month + 2; dr["d2"] = System.DateTime.Now.Month + 2; dt.Rows.Add(dr); } SimplePropertyCollection spcollection = new SimplePropertyCollection(); spcollection.Add(new DCTSimpleProperty() { TagID = "tag1", IsReadOnly = true }); spcollection.Add(new DCTSimpleProperty() { TagID = "y1", IsReadOnly = true }); spcollection.Add(new DCTSimpleProperty() { TagID = "m1", IsReadOnly = true }); spcollection.Add(new DCTSimpleProperty() { TagID = "d1", IsReadOnly = true }); spcollection.Add(new DCTSimpleProperty() { TagID = "y2", IsReadOnly = true }); spcollection.Add(new DCTSimpleProperty() { TagID = "m2", IsReadOnly = true }); spcollection.Add(new DCTSimpleProperty() { TagID = "d2", IsReadOnly = true }); string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); DirectoryInfo rootDirectory = new DirectoryInfo(path); byte[] templateBinary = File.ReadAllBytes(Path.Combine(rootDirectory.Parent.Parent.FullName, "劳动合同续签书.docx")); byte[] fillBinary = WordEntry.CopyPageFillData(templateBinary, dt.DefaultView, spcollection); File.WriteAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "劳动合同续签书.docx"), fillBinary); }