zoukankan      html  css  js  c++  java
  • DocX开源WORD操作组件的学习系列四

     

    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;
            }
  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_csharp_006_docx4.html
Copyright © 2011-2022 走看看