DocX学习系列
DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.html
DocX开源WORD操作组件的学习系列二 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_csharp_005_docx2.html
DocX开源WORD操作组件的学习系列三: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_csharp_006_docx3.html
DocX开源WORD操作组件的学习系列四: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_csharp_006_docx4.html
插入表格1低效
static void LargeTable() { Console.WriteLine(" LargeTable()"); var _directoryWithFiles = "docs\"; using (var output = File.Open(_directoryWithFiles + "LargeTable.docx", FileMode.Create)) { using (var doc = DocX.Create(output)) { var tbl = doc.InsertTable(1, 18); var wholeWidth = doc.PageWidth - doc.MarginLeft - doc.MarginRight; var colWidth = wholeWidth / tbl.ColumnCount; var colWidths = new int[tbl.ColumnCount]; tbl.AutoFit = AutoFit.Contents; var r = tbl.Rows[0]; var cx = 0; foreach (var cell in r.Cells) { cell.Paragraphs.First().Append("Col " + cx); //cell.Width = colWidth; cell.MarginBottom = 0; cell.MarginLeft = 0; cell.MarginRight = 0; cell.MarginTop = 0; cx++; } tbl.SetBorder(TableBorderType.Bottom, BlankBorder); tbl.SetBorder(TableBorderType.Left, BlankBorder); tbl.SetBorder(TableBorderType.Right, BlankBorder); tbl.SetBorder(TableBorderType.Top, BlankBorder); tbl.SetBorder(TableBorderType.InsideV, BlankBorder); tbl.SetBorder(TableBorderType.InsideH, BlankBorder); doc.Save(); } } Console.WriteLine(" Created: docs\LargeTable.docx "); } static void TableWithSpecifiedWidths() { Console.WriteLine(" TableSpecifiedWidths()"); var _directoryWithFiles = "docs\"; using (var output = File.Open(_directoryWithFiles + "TableSpecifiedWidths.docx", FileMode.Create)) { using (var doc = DocX.Create(output)) { var widths = new float[] { 200f, 100f, 300f }; var tbl = doc.InsertTable(1, widths.Length); tbl.SetWidths(widths); var wholeWidth = doc.PageWidth - doc.MarginLeft - doc.MarginRight; tbl.AutoFit = AutoFit.Contents; var r = tbl.Rows[0]; var cx = 0; foreach (var cell in r.Cells) { cell.Paragraphs.First().Append("Col " + cx); //cell.Width = colWidth; cell.MarginBottom = 0; cell.MarginLeft = 0; cell.MarginRight = 0; cell.MarginTop = 0; cx++; } //add new rows for (var x = 0; x < 5; x++) { r = tbl.InsertRow(); cx = 0; foreach (var cell in r.Cells) { cell.Paragraphs.First().Append("Col " + cx); //cell.Width = colWidth; cell.MarginBottom = 0; cell.MarginLeft = 0; cell.MarginRight = 0; cell.MarginTop = 0; cx++; } } tbl.SetBorder(TableBorderType.Bottom, BlankBorder); tbl.SetBorder(TableBorderType.Left, BlankBorder); tbl.SetBorder(TableBorderType.Right, BlankBorder); tbl.SetBorder(TableBorderType.Top, BlankBorder); tbl.SetBorder(TableBorderType.InsideV, BlankBorder); tbl.SetBorder(TableBorderType.InsideH, BlankBorder); doc.Save(); } } Console.WriteLine(" Created: docs\TableSpecifiedWidths.docx "); }
插入表格2高效
public class Data { public string Name { get; set; } public string AliasName { get; set; } } private static void InsertTabelTest() { Console.WriteLine(" able1()"); //我这里生成一部分样例数据 var list = new List<Data>(); for (int i = 0; i < 10000; i++) { list.Add(new Data() {Name = i.ToString(),AliasName = i+".."+i.ToString()}); } Stopwatch stopwatch = new Stopwatch(); stopwatch.Restart(); //直接使用inserttable插入table using (DocX document = DocX.Create(@"docsInsertTable.docx")) { var table1= document.InsertTable(list.Count,2); table1.Design=TableDesign.ColorfulGrid; for (int i = 0; i < list.Count; i++) { table1.Rows[i].Cells[0].Paragraphs.First().InsertText(list[i].Name); table1.Rows[i].Cells[1].Paragraphs.First().InsertText(list[i].AliasName); } document.Save(); Console.WriteLine(" Created: docs\InsertTable.docx "); } stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds+"毫秒");// 234277.7521毫秒 stopwatch.Restart(); //使用addtable后再inserttable using (DocX document = DocX.Create(@"docsAddTable.docx")) { var table1 = document.AddTable(list.Count, 2); table1.Design = TableDesign.ColorfulGrid; for (int i = 0; i < list.Count; i++) { table1.Rows[i].Cells[0].Paragraphs.First().InsertText(list[i].Name); table1.Rows[i].Cells[1].Paragraphs.First().InsertText(list[i].AliasName); } document.InsertTable(table1); document.Save(); Console.WriteLine(" Created: docs\AddTable.docx "); } stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds +"毫秒");//60773.5141毫秒 Console.ReadKey(); ////////////////////////////////////////////////// }
文档加密
static void ProtectedDocument() { Console.WriteLine(" HelloWorldPasswordProtected()"); // Create a new document. using (DocX document = DocX.Create(@"docsHelloWorldPasswordProtected.docx")) { // Insert a Paragraph into this document. Paragraph p = document.InsertParagraph(); // Append some text and add formatting. p.Append("Hello World!^011Hello World!") .Font(new Font("Times New Roman")) .FontSize(32) .Color(WindowsColor.Blue) .Bold(); // Save this document to disk with different options // Protected with password for Read Only EditRestrictions erReadOnly = EditRestrictions.readOnly; document.AddProtection(erReadOnly, "oracle"); document.SaveAs(@"docs\HelloWorldPasswordProtectedReadOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldPasswordProtectedReadOnly.docx "); // Protected with password for Comments EditRestrictions erComments = EditRestrictions.comments; document.AddProtection(erComments, "oracle"); document.SaveAs(@"docs\HelloWorldPasswordProtectedCommentsOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldPasswordProtectedCommentsOnly.docx "); // Protected with password for Forms EditRestrictions erForms = EditRestrictions.forms; document.AddProtection(erForms, "oracle"); document.SaveAs(@"docs\HelloWorldPasswordProtectedFormsOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldPasswordProtectedFormsOnly.docx "); // Protected with password for Tracked Changes EditRestrictions erTrackedChanges = EditRestrictions.trackedChanges; document.AddProtection(erTrackedChanges, "oracle"); document.SaveAs(@"docs\HelloWorldPasswordProtectedTrackedChangesOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldPasswordProtectedTrackedChangesOnly.docx "); // But it's also possible to add restrictions without protecting it with password. // Protected with password for Read Only document.AddProtection(erReadOnly); document.SaveAs(@"docs\HelloWorldWithoutPasswordReadOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldWithoutPasswordReadOnly.docx "); // Protected with password for Comments document.AddProtection(erComments); document.SaveAs(@"docs\HelloWorldWithoutPasswordCommentsOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldWithoutPasswordCommentsOnly.docx "); // Protected with password for Forms document.AddProtection(erForms); document.SaveAs(@"docs\HelloWorldWithoutPasswordFormsOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldWithoutPasswordFormsOnly.docx "); // Protected with password for Tracked Changes document.AddProtection(erTrackedChanges); document.SaveAs(@"docs\HelloWorldWithoutPasswordTrackedChangesOnly.docx"); Console.WriteLine(" Created: docs\HelloWorldWithoutPasswordTrackedChangesOnly.docx "); } }
缩进
private static void Indentation() { Console.WriteLine(" Indentation()"); // Create a new document. using (DocX document = DocX.Create(@"docsIndentation.docx")) { // Create a new Paragraph. Paragraph p = document.InsertParagraph("Line 1 Line 2 Line 3"); // Indent only the first line of the Paragraph p.IndentationFirstLine = 1.0f; // Save all changes made to this document. document.Save(); Console.WriteLine(" Created: docs\Indentation.docx "); } }
边距设置
private static void DocumentMargins() { Console.WriteLine(" DocumentMargins()"); // Create a document. using (DocX document = DocX.Create(@"docsDocumentMargins.docx")) { // Create a float var that contains doc Margins properties. float leftMargin = document.MarginLeft; float rightMargin = document.MarginRight; float topMargin = document.MarginTop; float bottomMargin = document.MarginBottom; // Modify using your own vars. leftMargin = 95F; rightMargin = 45F; topMargin = 50F; bottomMargin = 180F; // Or simply work the margins by setting the property directly. document.MarginLeft = leftMargin; document.MarginRight = rightMargin; document.MarginTop = topMargin; document.MarginBottom = bottomMargin; // created bulleted lists var bulletedList = document.AddList("First Bulleted Item.", 0, ListItemType.Bulleted); document.AddListItem(bulletedList, "Second bullet item"); document.AddListItem(bulletedList, "Sub bullet item", 1); document.AddListItem(bulletedList, "Second sub bullet item", 1); document.AddListItem(bulletedList, "Third bullet item"); document.InsertList(bulletedList); // Save this document. document.Save(); Console.WriteLine(" Created: docs\DocumentMargins.docx "); } }
创建模板并设置自定义属性
private static void CreateInvoice() { Console.WriteLine(" CreateInvoice()"); DocX g_document; try { // Store a global reference to the loaded document. g_document = DocX.Load(@"docsInvoiceTemplate.docx"); /* * The template 'InvoiceTemplate.docx' does exist, * so lets use it to create an invoice for a factitious company * called "The Happy Builder" and store a global reference it. */ g_document = CreateInvoiceFromTemplate(DocX.Load(@"docsInvoiceTemplate.docx")); // Save all changes made to this template as Invoice_The_Happy_Builder.docx (We don't want to replace InvoiceTemplate.docx). g_document.SaveAs(@"docsInvoice_The_Happy_Builder.docx"); Console.WriteLine(" Created: docs\Invoice_The_Happy_Builder.docx "); } // The template 'InvoiceTemplate.docx' does not exist, so create it. catch (FileNotFoundException) { // Create and store a global reference to the template 'InvoiceTemplate.docx'. g_document = CreateInvoiceTemplate(); // Save the template 'InvoiceTemplate.docx'. g_document.Save(); Console.WriteLine(" Created: docs\InvoiceTemplate.docx"); // The template exists now so re-call CreateInvoice(). CreateInvoice(); } } // Create an invoice for a factitious company called "The Happy Builder". private static DocX CreateInvoiceFromTemplate(DocX template) { #region Logo // A quick glance at the template shows us that the logo Paragraph is in row zero cell 1. Paragraph logo_paragraph = template.Tables[0].Rows[0].Cells[1].Paragraphs[0]; // Remove the template Picture that is in this Paragraph. logo_paragraph.Pictures[0].Remove(); // Add the Happy Builders logo to this document. RelativeDirectory rd = new RelativeDirectory(); // prepares the files for testing rd.Up(2); Image logo = template.AddImage(rd.Path + @"imageslogo_the_happy_builder.png"); // Insert the Happy Builders logo into this Paragraph. logo_paragraph.InsertPicture(logo.CreatePicture()); #endregion #region Set CustomProperty values // Set the value of the custom property 'company_name'. template.AddCustomProperty(new CustomProperty("company_name", "The Happy Builder")); // Set the value of the custom property 'company_slogan'. template.AddCustomProperty(new CustomProperty("company_slogan", "No job too small")); // Set the value of the custom properties 'hired_company_address_line_one', 'hired_company_address_line_two' and 'hired_company_address_line_three'. template.AddCustomProperty(new CustomProperty("hired_company_address_line_one", "The Crooked House,")); template.AddCustomProperty(new CustomProperty("hired_company_address_line_two", "Dublin,")); template.AddCustomProperty(new CustomProperty("hired_company_address_line_three", "12345")); // Set the value of the custom property 'invoice_date'. template.AddCustomProperty(new CustomProperty("invoice_date", DateTime.Today.Date.ToString("d"))); // Set the value of the custom property 'invoice_number'. template.AddCustomProperty(new CustomProperty("invoice_number", 1)); // Set the value of the custom property 'hired_company_details_line_one' and 'hired_company_details_line_two'. template.AddCustomProperty(new CustomProperty("hired_company_details_line_one", "Business Street, Dublin, 12345")); template.AddCustomProperty(new CustomProperty("hired_company_details_line_two", "Phone: 012-345-6789, Fax: 012-345-6789, e-mail: support@thehappybuilder.com")); #endregion /* * InvoiceTemplate.docx contains a blank Table, * we want to replace this with a new Table that * contains all of our invoice data. */ Table t = template.Tables[1]; Table invoice_table = CreateAndInsertInvoiceTableAfter(t, ref template); t.Remove(); // Return the template now that it has been modified to hold all of our custom data. return template; } // Create an invoice template. private static DocX CreateInvoiceTemplate() { // Create a new document. DocX document = DocX.Create(@"docsInvoiceTemplate.docx"); // Create a table for layout purposes (This table will be invisible). Table layout_table = document.InsertTable(2, 2); layout_table.Design = TableDesign.TableNormal; layout_table.AutoFit = AutoFit.Window; // Dark formatting Formatting dark_formatting = new Formatting(); dark_formatting.Bold = true; dark_formatting.Size = 12; dark_formatting.FontColor = WindowsColor.FromArgb(31, 73, 125); // Light formatting Formatting light_formatting = new Formatting(); light_formatting.Italic = true; light_formatting.Size = 11; light_formatting.FontColor = WindowsColor.FromArgb(79, 129, 189); #region Company Name // Get the upper left Paragraph in the layout_table. Paragraph upper_left_paragraph = layout_table.Rows[0].Cells[0].Paragraphs[0]; // Create a custom property called company_name CustomProperty company_name = new CustomProperty("company_name", "Company Name"); // Insert a field of type doc property (This will display the custom property 'company_name') layout_table.Rows[0].Cells[0].Paragraphs[0].InsertDocProperty(company_name, f: dark_formatting); // Force the next text insert to be on a new line. upper_left_paragraph.InsertText(" ", false); #endregion #region Company Slogan // Create a custom property called company_slogan CustomProperty company_slogan = new CustomProperty("company_slogan", "Company slogan goes here."); // Insert a field of type doc property (This will display the custom property 'company_slogan') upper_left_paragraph.InsertDocProperty(company_slogan, f: light_formatting); #endregion #region Company Logo // Get the upper right Paragraph in the layout_table. Paragraph upper_right_paragraph = layout_table.Rows[0].Cells[1].Paragraphs[0]; // Add a template logo image to this document. RelativeDirectory rd = new RelativeDirectory(); // prepares the files for testing rd.Up(2); Image logo = document.AddImage(rd.Path + @"imageslogo_template.png"); // Insert this template logo into the upper right Paragraph. upper_right_paragraph.InsertPicture(logo.CreatePicture()); upper_right_paragraph.Alignment = Alignment.right; #endregion // Custom properties cannot contain newlines, so the company address must be split into 3 custom properties. #region Hired Company Address // Create a custom property called company_address_line_one CustomProperty hired_company_address_line_one = new CustomProperty("hired_company_address_line_one", "Street Address,"); // Get the lower left Paragraph in the layout_table. Paragraph lower_left_paragraph = layout_table.Rows[1].Cells[0].Paragraphs[0]; lower_left_paragraph.InsertText("TO: ", false, dark_formatting); // Insert a field of type doc property (This will display the custom property 'hired_company_address_line_one') lower_left_paragraph.InsertDocProperty(hired_company_address_line_one, f: light_formatting); // Force the next text insert to be on a new line. lower_left_paragraph.InsertText(" ", false); // Create a custom property called company_address_line_two CustomProperty hired_company_address_line_two = new CustomProperty("hired_company_address_line_two", "City,"); // Insert a field of type doc property (This will display the custom property 'hired_company_address_line_two') lower_left_paragraph.InsertDocProperty(hired_company_address_line_two, f: light_formatting); // Force the next text insert to be on a new line. lower_left_paragraph.InsertText(" ", false); // Create a custom property called company_address_line_two CustomProperty hired_company_address_line_three = new CustomProperty("hired_company_address_line_three", "Zip Code"); // Insert a field of type doc property (This will display the custom property 'hired_company_address_line_three') lower_left_paragraph.InsertDocProperty(hired_company_address_line_three, f: light_formatting); #endregion #region Date & Invoice number // Get the lower right Paragraph from the layout table. Paragraph lower_right_paragraph = layout_table.Rows[1].Cells[1].Paragraphs[0]; CustomProperty invoice_date = new CustomProperty("invoice_date", DateTime.Today.Date.ToString("d")); lower_right_paragraph.InsertText("Date: ", false, dark_formatting); lower_right_paragraph.InsertDocProperty(invoice_date, f: light_formatting); CustomProperty invoice_number = new CustomProperty("invoice_number", 1); lower_right_paragraph.InsertText(" Invoice: ", false, dark_formatting); lower_right_paragraph.InsertText("#", false, light_formatting); lower_right_paragraph.InsertDocProperty(invoice_number, f: light_formatting); lower_right_paragraph.Alignment = Alignment.right; #endregion // Insert an empty Paragraph between two Tables, so that they do not touch. document.InsertParagraph(string.Empty, false); // This table will hold all of the invoice data. Table invoice_table = document.InsertTable(4, 4); invoice_table.Design = TableDesign.LightShadingAccent1; invoice_table.Alignment = Alignment.center; // A nice thank you Paragraph. Paragraph thankyou = document.InsertParagraph(" Thank you for your business, we hope to work with you again soon.", false, dark_formatting); thankyou.Alignment = Alignment.center; #region Hired company details CustomProperty hired_company_details_line_one = new CustomProperty("hired_company_details_line_one", "Street Address, City, ZIP Code"); CustomProperty hired_company_details_line_two = new CustomProperty("hired_company_details_line_two", "Phone: 000-000-0000, Fax: 000-000-0000, e-mail: support@companyname.com"); Paragraph companyDetails = document.InsertParagraph(string.Empty, false); companyDetails.InsertDocProperty(hired_company_details_line_one, f: light_formatting); companyDetails.InsertText(" ", false); companyDetails.InsertDocProperty(hired_company_details_line_two, f: light_formatting); companyDetails.Alignment = Alignment.center; #endregion // Return the document now that it has been created. return document; }