DocX开源WORD操作组件的学习系列三
Posted 赵杰迪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
替换文本
private static void ReplaceText() { Console.WriteLine("ReplaceText()"); File.Copy(@"docs\\Lists.docx", @"docs\\ReplaceText.docx", true); using (var document = DocX.Load(@"docs\\ReplaceText.docx")) { //全局替换 document.ReplaceText("zhao", "zhang"); //段落定位后替换 var p1= document.Paragraphs.FirstOrDefault(r => r.Text == "赵杰迪"); if (p1 == null) { return; } p1.ReplaceText("zhaojiedi","zhaojiedi2"); //书签定位后替换 document.Bookmarks["书签1"].Paragraph.ReplaceText("zhaojiedi","zhaojiedi2"); //基于正则表达式的替换 用途:我们事先做一个模板文件, 然后基于正则表达式查找,然后替换。 List<Regex> regexList = new List<Regex>() { new Regex("[name](.*)[/name]"), new Regex("[age](.*)[/age]"), new Regex("[age](.*)[/age]") }; foreach (var item in regexList) { Match match = item.Match(document.Text); if (match.Success && match.Groups.Count >= 2) { document.ReplaceText(match.Groups[0].ToString(),match.Groups[1].ToString()); } } document.Save(); Console.WriteLine("\\tCreated: docs\\\\ReplaceText.docx"); } }
编号
private static void AddList() { Console.WriteLine("\\tAddList()"); using (var document = DocX.Create(@"docs\\Lists.docx")) { var numberedList = document.AddList("First List Item.", 0, ListItemType.Numbered); //Add a numbered list starting at 2 document.AddListItem(numberedList, "Second List Item."); document.AddListItem(numberedList, "Third list item."); document.AddListItem(numberedList, "First sub list item", 1); document.AddListItem(numberedList, "Nested item.", 2); document.AddListItem(numberedList, "Fourth nested item."); 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", 2); document.AddListItem(bulletedList, "Third bullet item"); document.InsertList(numberedList); document.InsertList(bulletedList); document.Save(); Console.WriteLine("\\tCreated: docs\\\\Lists.docx"); } }
3创建图形
3.1效果图
private class ChartData { public String Mounth { get; set; } public Double Money { get; set; } public static List<ChartData> CreateCompanyList1() { List<ChartData> company1 = new List<ChartData>(); company1.Add(new ChartData() { Mounth = "January", Money = 100 }); company1.Add(new ChartData() { Mounth = "February", Money = 120 }); company1.Add(new ChartData() { Mounth = "March", Money = 140 }); return company1; } public static List<ChartData> CreateCompanyList2() { List<ChartData> company2 = new List<ChartData>(); company2.Add(new ChartData() { Mounth = "January", Money = 80 }); company2.Add(new ChartData() { Mounth = "February", Money = 160 }); company2.Add(new ChartData() { Mounth = "March", Money = 130 }); return company2; } } private static void BarChart() { Console.WriteLine("\\tBarChart()"); // Create new document. using (DocX document = DocX.Create(@"docs\\BarChart.docx")) { // Create chart. BarChart c = new BarChart(); c.BarDirection = BarDirection.Column; c.BarGrouping = BarGrouping.Standard; c.GapWidth = 400; c.AddLegend(ChartLegendPosition.Bottom, false); // Create data. List<ChartData> company1 = ChartData.CreateCompanyList1(); List<ChartData> company2 = ChartData.CreateCompanyList2(); // Create and add series Series s1 = new Series("Microsoft"); s1.Color = WindowsColor.GreenYellow; s1.Bind(company1, "Mounth", "Money"); c.AddSeries(s1); Series s2 = new Series("Apple"); s2.Bind(company2, "Mounth", "Money"); c.AddSeries(s2); // Insert chart into document document.InsertParagraph("Diagram").FontSize(20); document.InsertChart(c); document.Save(); } Console.WriteLine("\\tCreated: docs\\\\BarChart.docx\\n"); } private static void PieChart() { Console.WriteLine("\\tPieChart()"); // Create new document. using (DocX document = DocX.Create(@"docs\\PieChart.docx")) { // Create chart. PieChart c = new PieChart(); c.AddLegend(ChartLegendPosition.Bottom, false); // Create data. List<ChartData> company2 = ChartData.CreateCompanyList2(); // Create and add series Series s = new Series("Apple"); s.Bind(company2, "Mounth", "Money"); c.AddSeries(s); // Insert chart into document document.InsertParagraph("Diagram").FontSize(20); document.InsertChart(c); document.Save(); } Console.WriteLine("\\tCreated: docs\\\\PieChart.docx\\n"); } private static void LineChart() { Console.WriteLine("\\tLineChart()"); // Create new document. using (DocX document = DocX.Create(@"docs\\LineChart.docx")) { // Create chart. LineChart c = new LineChart(); c.AddLegend(ChartLegendPosition.Bottom, false); // Create data. List<ChartData> company1 = ChartData.CreateCompanyList1(); List<ChartData> company2 = ChartData.CreateCompanyList2(); // Create and add series Series s1 = new Series("Microsoft"); s1.Color = WindowsColor.GreenYellow; s1.Bind(company1, "Mounth", "Money"); c.AddSeries(s1); Series s2 = new Series("Apple"); s2.Bind(company2, "Mounth", "Money"); c.AddSeries(s2); // Insert chart into document document.InsertParagraph("Diagram").FontSize(20); document.InsertChart(c); document.Save(); } Console.WriteLine("\\tCreated: docs\\\\LineChart.docx\\n"); } private static void Chart3D() { Console.WriteLine("\\tChart3D()"); // Create new document. using (DocX document = DocX.Create(@"docs\\3DChart.docx")) { // Create chart. BarChart c = new BarChart(); c.View3D = true; // Create data. List<ChartData> company1 = ChartData.CreateCompanyList1(); // Create and add series Series s = new Series("Microsoft"); s.Color = WindowsColor.GreenYellow; s.Bind(company1, "Mounth", "Money"); c.AddSeries(s); // Insert chart into document document.InsertParagraph("3D Diagram").FontSize(20); document.InsertChart(c); document.Save(); } Console.WriteLine("\\tCreated: docs\\\\3DChart.docx\\n"); }
5添加图片
static void HelloWorldAddPictureToWord() { Console.WriteLine("\\tHelloWorldAddPictureToWord()"); // Create a document. using (DocX document = DocX.Create(@"docs\\HelloWorldAddPictureToWord.docx")) { // Add an image into the document. RelativeDirectory rd = new RelativeDirectory(); // prepares the files for testing rd.Up(2); Image image = document.AddImage(rd.Path + @"\\images\\logo_template.png"); // Create a picture (A custom view of an Image). Picture picture = image.CreatePicture(); picture.Rotation = 10;//旋转10度 picture.SetPictureShape(BasicShapes.cube); // Insert a new Paragraph into the document. Paragraph title = document.InsertParagraph().Append("This is a test for a picture").FontSize(20).Font(new Font("Comic Sans MS")); title.Alignment = Alignment.center; // Insert a new Paragraph into the document. Paragraph p1 = document.InsertParagraph(); // Append content to the Paragraph p1.AppendLine("Just below there should be a picture ").Append("picture").Bold().Append(" inserted in a non-conventional way."); p1.AppendLine(); p1.AppendLine("Check out this picture ").AppendPicture(picture).Append(" its funky don\'t you think?"); p1.AppendLine(); // Insert a new Paragraph into the document. Paragraph p2 = document.InsertParagraph(); // Append content to the Paragraph. p2.AppendLine("Is it correct?"); p2.AppendLine(); // Lets add another picture (without the fancy stuff) Picture pictureNormal = image.CreatePicture(); Paragraph p3 = document.InsertParagraph(); p3.AppendLine("Lets add another picture (without the fancy rotation stuff)"); p3.AppendLine(); p3.AppendPicture(pictureNormal); // Save this document. document.Save(); Console.WriteLine("\\tCreated: docs\\\\HelloWorldAddPictureToWord.docx\\n"); } }
6.替换模板中的图片
public bool ReplaceImage(string oldImageName, string newImageNmae) { Paragraph paragraph = null; int width = 0; int height = 0; foreach (Paragraph item in Document.Paragraphs){ if (item.Pictures.Count > 0 && item.Pictures[0].FileName == oldImageName) { paragraph = item; break; } } if (paragraph == null) { return false; } width = paragraph.Pictures[0].Width; //height = paragraph.Pictures[0].Height; paragraph.Pictures[0].Remove(); using (System.Drawing.Image tmpImage = new Bitmap(newImageNmae)) { int tmpWidth = tmpImage.Width; int tmpHeight = tmpImage.Height; float radio = tmpHeight * 1.0f /tmpWidth; height = (int)(width*radio); } Novacode.Image newImage = this.Document.AddImage(newImageNmae); // Insert the extracted logo into the paragraph paragraph.InsertPicture(newImage.CreatePicture(height, width));//注意createpicture的构造函数 //paragraph.InsertPicture(newImage.CreatePicture());//注意createpicture的构造函数 return true; }
以上是关于DocX开源WORD操作组件的学习系列三的主要内容,如果未能解决你的问题,请参考以下文章
Python如何操作word文档,Python-docx类库的使用