zoukankan      html  css  js  c++  java
  • Docx组件读写Word文档介绍

    Docx介绍

         官方原文:DocX is a .NET library that allows developers to manipulate Word 2007/2010/2013 files, in an easy and intuitive manner. DocX is fast, lightweight and best of all it does not require Microsoft Word or Office to be installed.(DocX是允许开发者以非常简单的方式操作Word 2007/2010/2013文件的轻量级.NET组件。它的速度非常快,而且不需要安装微软的Office软件。)

    Docx特征

    DocX组件目前版本的主要特点有:

    1)支持在文件中插入、删除和替代文本,支持所有的文本格式,如字体,颜色,大小,斜体字,下划线,删除线,高亮等。

    2)支持段落的对齐方式,最新版本支持插入各级标题。

    3)支持插入图片、超链接、表格、页眉页脚以及自定义属性等。

    Docx实例

        官方已经列举了Docx组件几乎所有的功能和实例,这里就不全部说明了。想要了解更多的实例,可以参考官方网站:http://docx.codeplex.com/SourceControl/latest#Examples/Program.cs

        使用之前,可以到官网下载最新版本的Docx组件。点击这里下载

    实例1:输出支持的所有标题级别

    using (DocX document = DocX.Create(@"C:\DocumentHeading.docx"))
    {
        foreach (HeadingType heading in (HeadingType[])Enum.GetValues(typeof(HeadingType)))
        {
            string text = string.Format("{0} - The quick brown fox jumps over the lazy dog", heading.EnumDescription());
    
            Paragraph p = document.InsertParagraph();
            p.AppendLine(text).Heading(heading);
        }
        document.Save();
    }
    

    实例2:文档中插入表格

    Table table1 = document1.AddTable(1, 3); //一行三列
    table1.Design = TableDesign.TableGrid;    //表格样式
    table1.Alignment = Alignment.center;      //设置表格居中
    table1.Rows[0].Cells[0].Paragraphs[0].Append("列1").Bold();
    table1.Rows[0].Cells[1].Paragraphs[0].Append("列2").Bold();
    table1.Rows[0].Cells[2].Paragraphs[0].Append("列3").Bold();
    
    table1.Rows[0].Cells[0].Width = 100;   //设置单元格宽度
    table1.Rows[0].Cells[1].Width = 100;
    table1.Rows[0].Cells[2].Width = 100;
    
    
    Paragraph p = document1.InsertParagraph();
    p.Alignment = Alignment.center;
    p.Append("表格名称").Bold();
    p.InsertTableAfterSelf(table1);

    实例3:文档中插入图片

    Paragraph pPicture = document1.InsertParagraph();
    pPicture.Alignment = Alignment.center;
    
    Novacode.Image image = document1.AddImage(@"C:\images\1.png);
    
    Picture picture = image.CreatePicture();
    picture.Width = 240; //设置图片大小
    picture.Height = 180;
    pPicture.AppendPicture(picture).AppendLine("图片名称").Bold();

    实例4:文档中插入文档

    DocX document1 = DocX.Create(@"C:\1.docx");
    Paragraph p1 = document1.InsertParagraph();
    p1.Append("文档document1");
    document1.Save();
    
    DocX document2 = DocX.Create(@"C:\2.docx");
    Paragraph p2 = document2 .InsertParagraph();
    p2.Append("文档document2");
    document2.Save();
    
    //文档2插入到文档1
    document1.InsertDocument(document2, true);

    实例5:根据模板生成文档

        1、设置文档模板,模板形式如下图:

        2、通过DocX的Load(string path)方法加载模板

        3、通过ReplaceText(string seachValue, string newValue)替换模板中标识

    //加载模板
    DocX document = DocX.Load(@"C:\templateDocx.docx");
    
    //替换文档中标识
    document.ReplaceText("$value$", "根据模板生成文档");
    
    //根据表格模板填充表数据
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("Column1");
    dataTable.Columns.Add("Column2");
    dataTable.Rows[0]["Column1"] = "列1内容";
    dataTable.Rows[0]["Column2"] = "列2内容";
    DataTable resultNew = new DataTable();
    resultNew = dataTable.DefaultView.ToTable(false, new string[] { "Column1", "Column2" });
    int templateRowId = 1;   //从第2列填充数据
    Table table = document.Tables[0];    //模板文档中表格索引,从0开始
    MakeTableByTemplate(table, resultNew, templateRowId);
    
    private void MakeTableByTemplate(Table table, DataTable result, int templateRowId)
    {
        Row templateRow = table.Rows[templateRowId];
        int rowId = 0;
        foreach (DataRow row in result.Rows)
        {
            table.InsertRow(templateRow);
            int colId = 0;
            foreach (Cell cell in table.Rows[templateRowId + 1 + rowId].Cells)
            {
                cell.ReplaceText("$d$", row[colId].ToString());
    
                colId++;
            }
            rowId++;
        }
        table.RemoveRow(templateRowId);
    }
    
    //生成文档到指定目录
    document.SaveAs(@"C:\sourceFileName.docx");

    实例6:文档中生成柱状图

    using (DocX document = DocX.Create(@"C:\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 = Color.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();
    }
    

      ChartData类

    public 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;
        }
    }
    

      生成结果

    同时还可以生成饼图、线形图。

    业精于勤,荒于嬉;行成于思,毁于随。

    如果你觉得这篇文章不错或者对你有所帮助,可以通过右侧【打赏】功能,给予博主一点点鼓励和支持

  • 相关阅读:
    软件版本具体代表什么意思
    面向接口的编程
    MySQL mysqldump用法
    常见问答解答
    Perl 语言笔记
    JAVA 基础知识
    面向接口编程的基本原则
    判断文件存在与否【Linux】
    Gtk Label设置字体颜色
    解压缩路径设置【Linux】
  • 原文地址:https://www.cnblogs.com/liruihuan/p/6626515.html
Copyright © 2011-2022 走看看