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("\tLargeTable()");
var _directoryWithFiles = "docs\\";
using (var output = File.Open(_directoryWithFiles + "LargeTable.docx", FileMode.Create))
{
using (var doc = DocX.Create(output))
{
var tbl = doc.InsertTable(, ); 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[];
var cx = ;
foreach (var cell in r.Cells)
{
cell.Paragraphs.First().Append("Col " + cx);
//cell.Width = colWidth;
cell.MarginBottom = ;
cell.MarginLeft = ;
cell.MarginRight = ;
cell.MarginTop = ; 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("\tCreated: docs\\LargeTable.docx\n");
} static void TableWithSpecifiedWidths()
{
Console.WriteLine("\tTableSpecifiedWidths()");
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(, widths.Length);
tbl.SetWidths(widths);
var wholeWidth = doc.PageWidth - doc.MarginLeft - doc.MarginRight;
tbl.AutoFit = AutoFit.Contents;
var r = tbl.Rows[];
var cx = ;
foreach (var cell in r.Cells)
{
cell.Paragraphs.First().Append("Col " + cx);
//cell.Width = colWidth;
cell.MarginBottom = ;
cell.MarginLeft = ;
cell.MarginRight = ;
cell.MarginTop = ; cx++;
}
//add new rows
for (var x = ; x < ; x++)
{
r = tbl.InsertRow();
cx = ;
foreach (var cell in r.Cells)
{
cell.Paragraphs.First().Append("Col " + cx);
//cell.Width = colWidth;
cell.MarginBottom = ;
cell.MarginLeft = ;
cell.MarginRight = ;
cell.MarginTop = ; 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("\tCreated: docs\\TableSpecifiedWidths.docx\n"); }

插入表格2高效

     public class Data
{
public string Name { get; set; }
public string AliasName { get; set; } }
private static void InsertTabelTest()
{
Console.WriteLine("\table1()");
//我这里生成一部分样例数据
var list = new List<Data>();
for (int i = ; i < ; 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(@"docs\InsertTable.docx"))
{ var table1= document.InsertTable(list.Count,);
table1.Design=TableDesign.ColorfulGrid;
for (int i = ; i < list.Count; i++)
{
table1.Rows[i].Cells[].Paragraphs.First().InsertText(list[i].Name);
table1.Rows[i].Cells[].Paragraphs.First().InsertText(list[i].AliasName);
}
document.Save(); Console.WriteLine("\tCreated: docs\\InsertTable.docx\n");
}
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds+"毫秒");// 234277.7521毫秒
stopwatch.Restart();
//使用addtable后再inserttable
using (DocX document = DocX.Create(@"docs\AddTable.docx"))
{ var table1 = document.AddTable(list.Count, );
table1.Design = TableDesign.ColorfulGrid;
for (int i = ; i < list.Count; i++)
{
table1.Rows[i].Cells[].Paragraphs.First().InsertText(list[i].Name);
table1.Rows[i].Cells[].Paragraphs.First().InsertText(list[i].AliasName);
}
document.InsertTable(table1);
document.Save();
Console.WriteLine("\tCreated: docs\\AddTable.docx\n");
}
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds +"毫秒");//60773.5141毫秒
Console.ReadKey(); ////////////////////////////////////////////////// }

文档加密

   static void ProtectedDocument()
{
Console.WriteLine("\tHelloWorldPasswordProtected()"); // Create a new document.
using (DocX document = DocX.Create(@"docs\HelloWorldPasswordProtected.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()
.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("\tCreated: docs\\HelloWorldPasswordProtectedReadOnly.docx\n"); // Protected with password for Comments
EditRestrictions erComments = EditRestrictions.comments;
document.AddProtection(erComments, "oracle");
document.SaveAs(@"docs\\HelloWorldPasswordProtectedCommentsOnly.docx");
Console.WriteLine("\tCreated: docs\\HelloWorldPasswordProtectedCommentsOnly.docx\n"); // Protected with password for Forms
EditRestrictions erForms = EditRestrictions.forms;
document.AddProtection(erForms, "oracle");
document.SaveAs(@"docs\\HelloWorldPasswordProtectedFormsOnly.docx");
Console.WriteLine("\tCreated: docs\\HelloWorldPasswordProtectedFormsOnly.docx\n"); // Protected with password for Tracked Changes
EditRestrictions erTrackedChanges = EditRestrictions.trackedChanges;
document.AddProtection(erTrackedChanges, "oracle");
document.SaveAs(@"docs\\HelloWorldPasswordProtectedTrackedChangesOnly.docx");
Console.WriteLine("\tCreated: docs\\HelloWorldPasswordProtectedTrackedChangesOnly.docx\n"); // 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("\tCreated: docs\\HelloWorldWithoutPasswordReadOnly.docx\n"); // Protected with password for Comments
document.AddProtection(erComments);
document.SaveAs(@"docs\\HelloWorldWithoutPasswordCommentsOnly.docx");
Console.WriteLine("\tCreated: docs\\HelloWorldWithoutPasswordCommentsOnly.docx\n"); // Protected with password for Forms
document.AddProtection(erForms);
document.SaveAs(@"docs\\HelloWorldWithoutPasswordFormsOnly.docx");
Console.WriteLine("\tCreated: docs\\HelloWorldWithoutPasswordFormsOnly.docx\n"); // Protected with password for Tracked Changes
document.AddProtection(erTrackedChanges);
document.SaveAs(@"docs\\HelloWorldWithoutPasswordTrackedChangesOnly.docx");
Console.WriteLine("\tCreated: docs\\HelloWorldWithoutPasswordTrackedChangesOnly.docx\n");
}
}

缩进

  private static void Indentation()
{
Console.WriteLine("\tIndentation()"); // Create a new document.
using (DocX document = DocX.Create(@"docs\Indentation.docx"))
{
// Create a new Paragraph.
Paragraph p = document.InsertParagraph("Line 1\nLine 2\nLine 3");
// Indent only the first line of the Paragraph
p.IndentationFirstLine = 1.0f;
// Save all changes made to this document.
document.Save();
Console.WriteLine("\tCreated: docs\\Indentation.docx\n");
}
}

边距设置

        private static void DocumentMargins()
{
Console.WriteLine("\tDocumentMargins()"); // Create a document.
using (DocX document = DocX.Create(@"docs\DocumentMargins.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.", , ListItemType.Bulleted);
document.AddListItem(bulletedList, "Second bullet item");
document.AddListItem(bulletedList, "Sub bullet item", );
document.AddListItem(bulletedList, "Second sub bullet item", );
document.AddListItem(bulletedList, "Third bullet item"); document.InsertList(bulletedList); // Save this document.
document.Save(); Console.WriteLine("\tCreated: docs\\DocumentMargins.docx\n");
}
}

创建模板并设置自定义属性

      private static void CreateInvoice()
{
Console.WriteLine("\tCreateInvoice()");
DocX g_document; try
{
// Store a global reference to the loaded document.
g_document = DocX.Load(@"docs\InvoiceTemplate.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(@"docs\InvoiceTemplate.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(@"docs\Invoice_The_Happy_Builder.docx");
Console.WriteLine("\tCreated: docs\\Invoice_The_Happy_Builder.docx\n");
} // 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("\tCreated: 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[].Rows[].Cells[].Paragraphs[];
// Remove the template Picture that is in this Paragraph.
logo_paragraph.Pictures[].Remove(); // Add the Happy Builders logo to this document.
RelativeDirectory rd = new RelativeDirectory(); // prepares the files for testing
rd.Up();
Image logo = template.AddImage(rd.Path + @"\images\logo_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", "")); // 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", )); // 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[];
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(@"docs\InvoiceTemplate.docx"); // Create a table for layout purposes (This table will be invisible).
Table layout_table = document.InsertTable(, );
layout_table.Design = TableDesign.TableNormal;
layout_table.AutoFit = AutoFit.Window; // Dark formatting
Formatting dark_formatting = new Formatting();
dark_formatting.Bold = true;
dark_formatting.Size = ;
dark_formatting.FontColor = WindowsColor.FromArgb(, , ); // Light formatting
Formatting light_formatting = new Formatting();
light_formatting.Italic = true;
light_formatting.Size = ;
light_formatting.FontColor = WindowsColor.FromArgb(, , ); #region Company Name
// Get the upper left Paragraph in the layout_table.
Paragraph upper_left_paragraph = layout_table.Rows[].Cells[].Paragraphs[]; // 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[].Cells[].Paragraphs[].InsertDocProperty(company_name, f: dark_formatting); // Force the next text insert to be on a new line.
upper_left_paragraph.InsertText("\n", 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[].Cells[].Paragraphs[]; // Add a template logo image to this document.
RelativeDirectory rd = new RelativeDirectory(); // prepares the files for testing
rd.Up();
Image logo = document.AddImage(rd.Path + @"\images\logo_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[].Cells[].Paragraphs[];
lower_left_paragraph.InsertText("TO:\n", 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("\n", 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("\n", 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[].Cells[].Paragraphs[]; 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", );
lower_right_paragraph.InsertText("\nInvoice: ", 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(, );
invoice_table.Design = TableDesign.LightShadingAccent1;
invoice_table.Alignment = Alignment.center; // A nice thank you Paragraph.
Paragraph thankyou = document.InsertParagraph("\nThank 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("\n", 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;
}

DocX开源WORD操作组件的学习系列四的更多相关文章

  1. DocX开源WORD操作组件的学习系列三

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  2. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  3. DocX开源WORD操作组件的学习系列一

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  4. 开源word操作组件DocX的记录

    开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...

  5. 使用开源word操作组件DocX的记录

    1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...

  6. 开源Word读写组件DocX 的深入研究和问题总结

    一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...

  7. [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc

    开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...

  8. 开源RabbitMQ操作组件

    开源RabbitMQ操作组件 对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP ...

  9. scrapy爬虫学习系列四:portia的学习入门

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

随机推荐

  1. arp断网攻击

    arp断网攻击可以是同局域网内主机无法上网!(可恶搞室友哦,嘻嘻!) 实现原理 arp的中文释义是地址解析协议,全英文 address resolution protocol,是一个将局域网IP地址映 ...

  2. Python-list,字典,Tuple

    list:用[]包围,逗号隔开如:l = [1,2,3] 其他用法:li = ["a" ,"b" , "c", "d"] ...

  3. HTML 5将给开发者带来什么?

    在新的时代里,相信网页技术会伴随HTML 5的来临进入大洗牌的局面,HTML 5旨在解决Web中的交互,媒体,本地操作等问题,一些浏览器已经尝试支持HTML 5的一些功能,而开发者们有望最终从那些We ...

  4. 资源验证(Modified)

    Last-Modified : 上次修改时间 配合 If-Modified-Since 或者 If-Unmodified-Since  (请求头携带) 对比上次修改时间对资源进行验证 Etag验证 数 ...

  5. 在Github上为项目添加多个用户

    点击项目目录中的Settings 点击Collaborators 添加后,合作者会受到确认邮件,等待合作者确认后,合作者就可以提交了 添加组织 在Settings中找到Organizations 点击 ...

  6. VS之设置文件编码格式

    VS2012默认格式为 "GB2312-80",很多时候可能出现乱码情况,就是编码问题,如何在VS里修改呢? 文件->“高级保存选项 ”  选择gb2312

  7. vue-cli跳转到新页面的顶部

    我这里有两种方法都是可以用的 1,利用vue-router的默认模式hash,可以记录上一页的位置,如果需要点话,如果没有记录,在进入新页面的时候是返回到新页面的最顶部的 scrollBehavior ...

  8. linux 使用sh@d0ws0cks server

    [root@linux-node1 ~]# cat /etc/shadowsocks.json { "server":"x.x.x.x", , "lo ...

  9. ubuntu Pycharm 2017 3.3 Active

    1.打开激活窗口 2.选择 Activate new license with License server (用license server 激活) 3.在 License sever addres ...

  10. 使用Kubeadm(1.13+)快速搭建Kubernetes集群

    Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并 ...