精华内容
下载资源
问答
  • DocX操作word生成报表

    2017-08-15 10:16:00
     DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的。DocX使得操作word非常轻便,有利于减轻开发负担,提升程序效率。DocX在Codeplex和...

    1.DocX简介

    1.1 简介

      DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的。DocX使得操作word非常轻便,有利于减轻开发负担,提升程序效率。DocX在Codeplex和Github上都有开源。

    1.2 获取与安装

    可以在http://docx.codeplex.com/releases下载获取,也可以直接利用NuGet获取。

    Install-Package DocX

     

    1.3 开发环境

    用DocX需要.NET framework4.0和VS2010或更高版本。

    2.DocX相关常用操作(持续更新中...)

    2.1 创建word文档

    DocX document = DocX.Create(@"docs\HelloWorld.docx")

     

    2.2 加载word文档

    DocX document = DocX.Load(@"docs\HelloWorld.docx")

     

    2.3 书签相关操作

    2.3.1 插入书签

    var paragraph = document.InsertBookmark("firstBookmark");

    2.3.2 根据书签名获取书签

    如果知道一个书签的书签名,可以直接得到。

    var b = document.Bookmarks["书签1"];

    2.3.3 在书签中插入文字

    document.Bookmarks["书签1"].SetText("Hello World!");

    2.3.4 在书签中插入图片、表格

    document.Bookmarks["书签2"].Paragraph.InsertPicture(@"pic.jpg");
    document.Bookmarks["书签3"].Paragraph.InsertTableAfterSelf(t);//t是Table类型

     

    2.4 分节符和分页符

    2.4.1 分节符

    document.InsertSectionPageBreak();//分节符

    2.4.2 分页符

      Paragraph p = document.InsertParagraph();
      p.InsertPageBreakAfterSelf();//分页符

     

    2.5 添加目录

    复制代码
     1  static void AddToc()
     2         {
     3             Console.WriteLine("\tAddToc()");
     4 
     5             using (var document = DocX.Create(@"docs\Toc.docx"))
     6             {
     7                 document.InsertTableOfContents("目录", TableOfContentsSwitches.O | TableOfContentsSwitches.U | TableOfContentsSwitches.Z | TableOfContentsSwitches.H, "Heading2");
     8                 var h1 = document.InsertParagraph("Heading 1");
     9                 h1.StyleName = "Heading1";
    10                 document.InsertParagraph("Some very interesting content here");
    11                 var h2 = document.InsertParagraph("Heading 2");
    12                 document.InsertSectionPageBreak();
    13                 h2.StyleName = "Heading1";
    14                 document.InsertParagraph("Some very interesting content here as well");
    15                 var h3 = document.InsertParagraph("Heading 2.1");
    16                 h3.StyleName = "Heading2";
    17                 document.InsertParagraph("Not so very interesting....");
    18 
    19                 document.Save();
    20             }
    21         }
    复制代码

     2.6 插入图片

    Image img = document.AddImage(@"pic.jpg");
    Picture pic = img.CreatePicture();
    Paragraph p1 = document.InsertParagraph();
    p1.InsertPicture(pic);

     

    2.7 操作表格

    2.7.1 创建和插入表格

    Table t = document.AddTable(3, 4);//三行四列

     

    2.7.2 单元格合并

    Table t = document.AddTable(3,4);
    t.MergeCellsInColumn(0, 0, 1);//public void MergeCellsInColumn(int columnIndex, int startRow, int endRow);竖向合并
    t.Rows[0].MergeCells(1, 2);//public void MergeCells(int startIndex, int endIndex);横向合并

    注:合并单元格的时候注意,最好先竖向合并,再横向合并,以免报错,因为横向合并会改变列数。

    3. 资源

    开源网址:http://docx.codeplex.com/ (里面的示例代码很适合初学者学习)

    高质量博客推荐:http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html#_label3

    利用DocX操作word的开源小项目:https://github.com/hahahuahai/create-word-by-DocX

     

    参考:http://www.cnblogs.com/huahai/p/DocX.html

    posted on 2017-08-15 10:16 marblemm 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/marblemm/p/7363654.html

    展开全文
  • C# DocX操作Word文档(.docx

    千次阅读 2018-01-16 15:53:15
    DocX方式 DocX是一个简单的操作以.docx结尾的Word文档的工具 优点:只有200多KB,容易掌握,可以轻易的操作文本替换 文本框、表格、图片等 缺点:存在一些功能没有实现
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using Novacode;
    
    namespace SYS_TEST.BaseClass
    {
        //DocX方式
        //DocX是一个简单的操作以.docx结尾的Word文档的工具
        //优点:只有200多KB,容易掌握,可以轻易的操作文本替换 文本框、表格、图片等
        //缺点:存在一些功能没有实现
        public class DocXClass
        {
            /// <summary>
            /// DocX操作Word文档(.docx)
            /// </summary>
            /// <param name="fileName"></param>
            public static void OperteWordFile(string fileName)
            {
                using (DocX document = DocX.Load(fileName))
                {
                    //文本替换
                    document.ReplaceText("AAA", "BBB");
                    //表格操作
                    var table = document.Tables[0];
                    for (int i = 1; i <= 3; i++)
                    {
                        table.InsertRow(i);
                        table.Rows[i].Cells[0].Paragraphs[0].Append("123");
                        table.Rows[i].Cells[1].Paragraphs[0].Append("456");
                        table.Rows[i].Cells[0].Width = 200;
                        table.Rows[i].Cells[1].Width = 80;
                    }
                    document.SaveAs(fileName);
                }
            }
        }
    }
    

    展开全文
  • python_docx制作word文档

    千次阅读 2018-11-21 16:37:00
    Python可以利用python-docx模块处理word文档,处理方式面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。 二、相关概念 如果...

    python_docx制作word文档

    一、docx模块

    Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。

    二、相关概念

    如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。

    1. Document对象,表示一个word文档。
    2. Paragraph对象,表示word文档中的一个段落
    3. Paragraph对象的text属性,表示段落中的文本内容。

     

    三、模块的安装和导入

    安装模块

    pip3 install python-docx

     

    注意在导入模块时,用的是import docx。

    也真是奇了怪了,怎么安装和导入模块时,很多都不用一个名字。

     

    四、读取word文本

    在了解了上面的信息之后,就很简单了,下面先创建一个D:\temp\word.docx文件,并在其中输入如下内容。

     

     写一段python代码读取

    #!/usr/bin/env python
    # coding: utf-8
    
    import docx
    #获取文档对象
    file=docx.Document("test1.docx")
    print("段落数:"+str(len(file.paragraphs)))#段落数为6,每个回车隔离一段
    
    #输出每一段的内容
    for para in file.paragraphs:
     print(para.text)
    
    #输出段落编号及段落内容
    for i in range(len(file.paragraphs)):
     print(""+str(i)+"段的内容是:"+file.paragraphs[i].text)

     

    执行输出:

    段落数:6
    清平调·其一
    【朝代】唐
    
    云想衣裳花想容,春风拂槛露华浓。
    若非群玉山头见,会向瑶台月下逢。
    
    第0段的内容是:清平调·其一
    第1段的内容是:【朝代】唐
    第2段的内容是:
    第3段的内容是:云想衣裳花想容,春风拂槛露华浓。
    第4段的内容是:若非群玉山头见,会向瑶台月下逢。
    第5段的内容是:
    View Code

     

    本文参考链接:

    https://www.jb51.net/article/133405.htm

     

    五、制作word文档

    1. 创建文档

    from docx import Document
    document = Document()
    document.save('ceshi.docx')  #保存文档

     

    执行之后,它会创建一个ceshi.docx,打开之后,内容是空的。

     

    2. 添加标题

    document.add_heading('琅琊榜', 0)

     

    完整代码如下:

    from docx import Document
    document = Document()
    
    document.add_heading('琅琊榜', 0)  # 添加标题
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下

     

    但是,这个有个问题是标题下面有一条横线,对于重度强迫症的我是无法容忍的。所以我直接添加段落文字表示标题

     

    3. 添加段落文字

    document.add_paragraph('剧情简介')

     

    完整代码如下:

    from docx import Document
    document = Document()
    
    document.add_paragraph('剧情简介')  # 添加段落
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下

     

     但是,这只实现了默认格式的段落文字添加,且这里的文字只能是英文。如果要设置中文字体,且对文字设置对齐,颜色,大小等设置,则:

    需要使用add_run()方法添加文字。

     

    4. 设置文字大小

    字体是不是太小了,可以设置文字大小。

    关于word中的字体大小对应表,请参考链接:

    https://blog.csdn.net/zhushouchen/article/details/50236817

     

    现在需要设置字体大小为一号,那么对应的数字为26

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下

     

    可以发现,它的大小就是一号!

     

    5. 设置对齐

    我需要将这些文件居中对齐,怎么办?需要导入一个类WD_ALIGN_PARAGRAPH

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    注意:这段代码,导入类方法WD_ALIGN_PARAGRAPH时,Pycharm会飘红,但是不要紧,执行不会报错!

    执行程序,打开文档,效果如下:

     

    左对齐,WD_ALIGN_PARAGRAPH.LEFT

    右对齐,WD_ALIGN_PARAGRAPH.RIGHT

    其他更多方式,请参考链接:

    https://python-docx.readthedocs.org/en/latest/api/enum/WdAlignParagraph.html#wdparagraphalignment

     

    6. 设置字体加粗

    设置run.bold = True 就可以实现加粗

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

    7. 设置字体

    我需要将文字设置为 "宋体",使用

    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')

    网上很多文章说,只需要上面一行就可以了。其实根本就没有效果,要2行代码一起设置才会有效果!

     

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

    可以发现,它已经是宋体了!之前的字体是MS Mincho

     

    8. 设置文字颜色

    我需要将标题设置为红色,需要使用RGB颜色,关于RGB颜色对照表,请参考链接:

    http://tool.oschina.net/commons?type=3

     

    那么红色对应的RGB就是255.0.0,代码就是

    run.font.color.rgb = RGBColor(255,0,0)

     

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

     

    9. 添加图片

    先从网络上下载一张图片lyb.jpb,请确保图片和python程序在同一目录

    图像大小

    默认情况下,添加图像出现在本地的大小。这通常比你想要的更大。本机大小的计算方法。因此,具有300dpi分辨率的300×300像素图像出现在一平方英寸。问题是大多数图像不包含dpi属性,它默认为72 dpi。这将使同一图像在一边,在一半左右的某处出现4.167英寸。pixels dpi

    要获得所需的图像大小,您可以以方便的单位指定其宽度或高度,如英寸或厘米:

    from docx.shared import Inches
    document.add_picture('image-filename.png', width=Inches(1.0))

    你可以自由地指定宽度和高度,但通常你不想要。如果仅指定一个,python-docx用它来计算出其他的适当换算值。这样的高宽比是保留的,你的图像看起来不拉伸。

    InchesCm提供课程,让你指定派上用场单位进行测量。在内部,python-docx使用英语公制单位,914400为英寸。所以,如果你忘记了,只是把喜欢的东西width=2,你会得到一个非常小的图像:)。你需要从导入docx.shared 子包。你可以在算术中使用它们,就像它们是一个整数,事实上它们是。因此,像一个表达式的作品就好了。width Inches(3) /thing_count

     

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

    图片居中

    默认情况下,图片在文档中是左对齐的,如果要对图片进行居中显示,在网上找了很多方法都不可行,最后找到一种方法是直接加入以下代码:

    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置

     

    完整代码如下:

    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

    10. 文字缩进

    我需要实现以下效果,就需要用到缩进了

     

    关于缩进,有3中方式

    from docx.shared import Inches
    from docx.shared import Pt
    
    #设置段落从左开始缩进,使用Inches来衡量
    paragraph_format.left_indent = Inches(0.5)
    
    #设置段落从右开始缩进,使用Pt来衡量
    paragraph_format.right_indent = Pt(20)
    
    #设置段落第一行缩进,可以与上两个缩进叠加
    paragraph_format.first_line_indent = Inches(0.5)

     

    仔细观察,上面的段落只需要用到首行缩进!

    完整代码如下:

    #!/usr/bin/env python
    # coding: utf-8
    
    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置
    
    p = document.add_paragraph()
    run = p.add_run('剧情简介')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    p = document.add_paragraph()
    run = p.add_run('梅长苏(胡歌饰)本远在江湖,却名动帝辇。江湖传言:“江左梅郎,麒麟之才,得之可得天下。”作为天下第一大帮“江左盟”的首领,梅长苏“梅郎”之名响誉江湖。然而,有着江湖至尊地位的梅长苏,却是一个病弱青年、弱不禁风,背负着十多年前巨大的冤案与血海深仇,就连身世背后也隐藏着巨大的秘密。')
    p_format = p.paragraph_format
    p_format.first_line_indent = Inches(0.2)  # 首行缩进
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

    11. 表格

    我需要实现下面的表格

     

    换行

    在剧情简介和音乐原声之间,需要有一个换行,否则就太紧凑了,使用

    document.add_paragraph(text='\r', style=None)  # 换行

     

    表格

    表格坐标体系

    一张图,就可以看明白了

     

    完整代码如下:

    #!/usr/bin/env python
    # coding: utf-8
    
    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置
    
    p = document.add_paragraph()
    run = p.add_run('剧情简介')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    p = document.add_paragraph()
    run = p.add_run('梅长苏(胡歌饰)本远在江湖,却名动帝辇。江湖传言:“江左梅郎,麒麟之才,得之可得天下。”作为天下第一大帮“江左盟”的首领,梅长苏“梅郎”之名响誉江湖。然而,有着江湖至尊地位的梅长苏,却是一个病弱青年、弱不禁风,背负着十多年前巨大的冤案与血海深仇,就连身世背后也隐藏着巨大的秘密。')
    p_format = p.paragraph_format
    p_format.first_line_indent = Inches(0.2)  # 首行缩进
    
    document.add_paragraph(text='\r', style=None)  # 换行
    
    p = document.add_paragraph()
    run = p.add_run('音乐原声')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    table = document.add_table(rows=4, cols=5)  # 4行5列的表格
    table.cell(0,0).text = "歌曲"
    table.cell(0,1).text = "演唱者"
    table.cell(0,2).text = "作曲"
    table.cell(0,3).text = "作词"
    table.cell(0,4).text = "类型"
    
    table.cell(1,0).text = "《风起时》"
    table.cell(1,1).text = "胡歌"
    table.cell(1,2).text = "孟可"
    table.cell(1,3).text = "海宴"
    table.cell(1,4).text = "主题曲、片尾曲"
    
    table.cell(2,0).text = "《红颜旧》"
    table.cell(2,1).text = "刘涛"
    table.cell(2,2).text = "赵佳霖"
    table.cell(2,3).text = "袁亮"
    table.cell(2,4).text = "插曲"
    
    table.cell(3,0).text = "《赤血长殷》"
    table.cell(3,1).text = "王凯"
    table.cell(3,2).text = "于海航"
    table.cell(3,3).text = "清彦、冰封"
    table.cell(3,4).text = "插曲"
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

    可以发现,默认的表格是没有线条的。需要设置表格样式

    表格样式

    关于表格样式,可以参考链接:

    https://blog.csdn.net/ibiao/article/details/78595295

     

    上面的链接,列举了所有的样式。注意:这些样式,都是隔行换色的!

     

    喜欢哪个,将样式名复制一下,使用以下代码实现!

    下面的代码,表示使用Table Grid样式

    table.style = document.styles['Table Grid']  # 表格样式

     

    完整代码如下:

    #!/usr/bin/env python
    # coding: utf-8
    
    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置
    
    p = document.add_paragraph()
    run = p.add_run('剧情简介')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    p = document.add_paragraph()
    run = p.add_run('梅长苏(胡歌饰)本远在江湖,却名动帝辇。江湖传言:“江左梅郎,麒麟之才,得之可得天下。”作为天下第一大帮“江左盟”的首领,梅长苏“梅郎”之名响誉江湖。然而,有着江湖至尊地位的梅长苏,却是一个病弱青年、弱不禁风,背负着十多年前巨大的冤案与血海深仇,就连身世背后也隐藏着巨大的秘密。')
    p_format = p.paragraph_format
    p_format.first_line_indent = Inches(0.2)  # 首行缩进
    
    document.add_paragraph(text='\r', style=None)  # 换行
    
    p = document.add_paragraph()
    run = p.add_run('音乐原声')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    table = document.add_table(rows=4, cols=5)  # 4行5列的表格
    table.cell(0,0).text = "歌曲"
    table.cell(0,1).text = "演唱者"
    table.cell(0,2).text = "作曲"
    table.cell(0,3).text = "作词"
    table.cell(0,4).text = "类型"
    
    table.cell(1,0).text = "《风起时》"
    table.cell(1,1).text = "胡歌"
    table.cell(1,2).text = "孟可"
    table.cell(1,3).text = "海宴"
    table.cell(1,4).text = "主题曲、片尾曲"
    
    table.cell(2,0).text = "《红颜旧》"
    table.cell(2,1).text = "刘涛"
    table.cell(2,2).text = "赵佳霖"
    table.cell(2,3).text = "袁亮"
    table.cell(2,4).text = "插曲"
    
    table.cell(3,0).text = "《赤血长殷》"
    table.cell(3,1).text = "王凯"
    table.cell(3,2).text = "于海航"
    table.cell(3,3).text = "清彦、冰封"
    table.cell(3,4).text = "插曲"
    
    table.style = document.styles['Table Grid']  # 表格样式
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

    表格字体加粗

    上面的效果还有一点不足,哪里呢?第一行没有加粗,关于表格文字加粗,这个问题找了很久,终于找到一篇文章,链接如下:

    https://www.jb51.net/article/139691.htm

     

    在它的基础上,我做了一些改进。封装了一个函数th

    完整代码如下:

    #!/usr/bin/env python
    # coding: utf-8
    
    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置
    
    p = document.add_paragraph()
    run = p.add_run('剧情简介')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    p = document.add_paragraph()
    run = p.add_run('梅长苏(胡歌饰)本远在江湖,却名动帝辇。江湖传言:“江左梅郎,麒麟之才,得之可得天下。”作为天下第一大帮“江左盟”的首领,梅长苏“梅郎”之名响誉江湖。然而,有着江湖至尊地位的梅长苏,却是一个病弱青年、弱不禁风,背负着十多年前巨大的冤案与血海深仇,就连身世背后也隐藏着巨大的秘密。')
    p_format = p.paragraph_format
    p_format.first_line_indent = Inches(0.2)  # 首行缩进
    
    document.add_paragraph(text='\r', style=None)  # 换行
    
    p = document.add_paragraph()
    run = p.add_run('音乐原声')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    table = document.add_table(rows=4, cols=5)  # 4行5列的表格
    # table.cell(0,0).text = "歌曲"
    # table.cell(0,1).text = "演唱者"
    # table.cell(0,2).text = "作曲"
    # table.cell(0,3).text = "作词"
    # table.cell(0,4).text = "类型"
    
    def th(x,y,content):
        """
        th样式
        :param x: x坐标
        :param y: y坐标
        :param content: 内容
        :return: None
        """
        # print(grid,content)
        run = table.cell(x,y).paragraphs[0].add_run(content)
        run.bold = True  # 加粗
    
    th(0,0,"歌曲")
    th(0,1,"演唱者")
    th(0,2,"作曲")
    th(0,3,"作词")
    th(0,4,"类型")
    
    table.cell(1,0).text = "《风起时》"
    table.cell(1,1).text = "胡歌"
    table.cell(1,2).text = "孟可"
    table.cell(1,3).text = "海宴"
    table.cell(1,4).text = "主题曲、片尾曲"
    
    table.cell(2,0).text = "《红颜旧》"
    table.cell(2,1).text = "刘涛"
    table.cell(2,2).text = "赵佳霖"
    table.cell(2,3).text = "袁亮"
    table.cell(2,4).text = "插曲"
    
    table.cell(3,0).text = "《赤血长殷》"
    table.cell(3,1).text = "王凯"
    table.cell(3,2).text = "于海航"
    table.cell(3,3).text = "清彦、冰封"
    table.cell(3,4).text = "插曲"
    
    table.style = document.styles['Table Grid']  # 表格样式
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

    那么第一行,能不能加一个背景颜色呢?不好意思,目前没有找到有效的方法。

    上面有很多隔行换色的样式,可以选择。如果不想要,那么就只能这样了!

     

    表格字体颜色

    我需要将表格中的 "胡歌" 变成红色,怎么办呢?

    加一个方法即可

    def td_red(table,x, y,content):
        """
        td红色字体
        :param table: 表格对象
        :param x: x坐标
        :param y: y坐标
        :param content: 内容
        :return: None
        """
        run = table.cell(x, y).paragraphs[0].add_run(content)
        run.font.size = Pt(11)
        run.font.color.rgb = RGBColor(255, 0, 0)

     

    完整代码如下:

    #!/usr/bin/env python
    # coding: utf-8
    
    from docx import Document
    from docx.shared import Pt
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import RGBColor
    from docx.shared import Inches
    
    document = Document()
    p = document.add_paragraph()
    run = p.add_run('琅琊榜')  # 使用add_run添加文字
    run.font.size = Pt(26) #字体大小设置,和word里面的字号相对应,小一
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
    run.bold = True  # 字体加粗
    document.styles['Normal'].font.name = '宋体'  # 设置字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    run.font.color.rgb = RGBColor(255,0,0) #颜色设置,这里是用RGB颜色
    
    pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加图片
    last_paragraph = document.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置
    
    p = document.add_paragraph()
    run = p.add_run('剧情简介')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    p = document.add_paragraph()
    run = p.add_run('梅长苏(胡歌饰)本远在江湖,却名动帝辇。江湖传言:“江左梅郎,麒麟之才,得之可得天下。”作为天下第一大帮“江左盟”的首领,梅长苏“梅郎”之名响誉江湖。然而,有着江湖至尊地位的梅长苏,却是一个病弱青年、弱不禁风,背负着十多年前巨大的冤案与血海深仇,就连身世背后也隐藏着巨大的秘密。')
    p_format = p.paragraph_format
    p_format.first_line_indent = Inches(0.2)  # 首行缩进
    
    document.add_paragraph(text='\r', style=None)  # 换行
    
    p = document.add_paragraph()
    run = p.add_run('音乐原声')
    run.font.size = Pt(22)  # 二号
    run.bold = True
    
    table = document.add_table(rows=4, cols=5)  # 4行5列的表格
    # table.cell(0,0).text = "歌曲"
    # table.cell(0,1).text = "演唱者"
    # table.cell(0,2).text = "作曲"
    # table.cell(0,3).text = "作词"
    # table.cell(0,4).text = "类型"
    
    def th(x,y,content):
        """
        th样式
        :param x: x坐标
        :param y: y坐标
        :param content: 内容
        :return: None
        """
        # print(grid,content)
        run = table.cell(x,y).paragraphs[0].add_run(content)
        run.bold = True  # 加粗
    
    def td_red(table,x, y,content):
        """
        td红色字体
        :param table: 表格对象
        :param x: x坐标
        :param y: y坐标
        :param content: 内容
        :return: None
        """
        run = table.cell(x, y).paragraphs[0].add_run(content)
        run.font.size = Pt(11)
        run.font.color.rgb = RGBColor(255, 0, 0)
    
    th(0,0,"歌曲")
    th(0,1,"演唱者")
    th(0,2,"作曲")
    th(0,3,"作词")
    th(0,4,"类型")
    
    table.cell(1,0).text = "《风起时》"
    # table.cell(1,1).text = "胡歌"
    td_red(table,1,1,"胡歌")
    table.cell(1,2).text = "孟可"
    table.cell(1,3).text = "海宴"
    table.cell(1,4).text = "主题曲、片尾曲"
    
    table.cell(2,0).text = "《红颜旧》"
    table.cell(2,1).text = "刘涛"
    table.cell(2,2).text = "赵佳霖"
    table.cell(2,3).text = "袁亮"
    table.cell(2,4).text = "插曲"
    
    table.cell(3,0).text = "《赤血长殷》"
    table.cell(3,1).text = "王凯"
    table.cell(3,2).text = "于海航"
    table.cell(3,3).text = "清彦、冰封"
    table.cell(3,4).text = "插曲"
    
    table.style = document.styles['Table Grid']  # 表格样式
    
    document.save('ceshi.docx')  #保存文档
    View Code

     

    执行程序,打开文档,效果如下:

     

     

    本文参考链接:

    https://blog.csdn.net/sinat_30711195/article/details/80725435

     

    https://www.cnblogs.com/ontheway703/p/5266041.html

     

    posted @ 2018-11-21 16:37 肖祥 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • Python python-docx 读写 word

    千次阅读 2018-04-07 22:49:47
    python-docx模块处理word文档,处理方式面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对象进行处理就是对word文档的内容处理。 如果需要读取word文档中的文字...

    ____tz_zs

    https://python-docx.readthedocs.io/en/latest/

    python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对象进行处理就是对word文档的内容处理。

    如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。

     

    • Document对象,表示一个word文档。
    • Paragraph对象,表示word文档中的一个段落
    • Paragraph对象的text属性,表示段落中的文本内容。

    ·

    安装python-docx库

    pip install python-docx

    ·

    使用

    ·

    # -*- coding: utf-8 -*-
    """
    @author: tz_zs
    """
    
    import docx
    
    # 读取文件
    document = docx.Document('./kk011.docx')
    # 总共有多少段落
    print('总共有 {} 个段落'.format(len(document.paragraphs)))
    for paragraph in document.paragraphs:  # 遍历paragraph对象的列表
        # paragraph 为每个段落的对象 docx.text.paragraph.Paragraph object
    
        text = paragraph.text  # 每一段的文字内容
        print(text)
    

    ·

    官方文档Demo——创建word文件

    # -*- coding: utf-8 -*-
    """
    @author: tz_zs
    """
    from docx import Document
    from docx.shared import Inches
    
    document = Document()
    
    document.add_heading('Document Title', 0)
    
    p = document.add_paragraph('A plain paragraph having some ')
    p.add_run('bold').bold = True
    p.add_run(' and some ')
    p.add_run('italic.').italic = True
    
    document.add_heading('Heading, level 1', level=1)
    document.add_paragraph('Intense quote', style='IntenseQuote')
    
    document.add_paragraph(
        'first item in unordered list', style='ListBullet'
    )
    document.add_paragraph(
        'first item in ordered list', style='ListNumber'
    )
    
    document.add_picture('monty-truth.png', width=Inches(1.25))
    
    table = document.add_table(rows=1, cols=3)
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = 'Qty'
    hdr_cells[1].text = 'Id'
    hdr_cells[2].text = 'Desc'
    # for item in recordset:
    #     row_cells = table.add_row().cells
    #     row_cells[0].text = str(item.qty)
    #     row_cells[1].text = str(item.id)
    #     row_cells[2].text = item.desc
    
    document.add_page_break()
    
    document.save('demo.docx')
    

    ·

     

    展开全文
  • 最近在工作中一直接触到统计月报这块的文档,之前一直把结果打印在Jupyter lab上,然后通过复制粘贴的方式放入Word文档里,但是最近统计月报的数量越来越多,作者连复制粘贴也懒得想做了 ,遂学习了python-docx的...
  • docx编辑word文档需要解决的问题安装python-docx 包功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居...
  • 备注:doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比doc文件所占用空间更小。docx格式的文件本质上是一个ZIP文件,所以其实也可以把.docx文件...
  • 使用开源DocX 生成Word

    2014-12-25 14:23:00
    工作中遇到这样一个需求,要求把选中的订单导出到一张Word中(要求不...下面代码实现 先引用 DocX 1 string tempName = Guid.NewGuid().ToString() + ".doc"; //word临时文件名 2 string serverPath = Path.C...
  • Python用python-docx读写word文档

    千次阅读 2019-08-25 12:52:03
    python-docx库可用于创建和编辑Microsoft Word(.docx)文件。...doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比 doc文件所占用空间更...
  • 首先安装python-docx:(centos环境) pip install python-docx 基本方法使用: from docx import Document from docx.shared import Pt from docx.oxml.ns import qn from docx.shared import ...
  • 本文告诉大家如何将 docxWord 文档在 WPF 中显示内容 本文源代码请看 ArtMalykhin/wpf-embedded-docx 在 Office 文档解析 文档格式和协议 咱可以了解到 Word 文档只是一个压缩文件里面的文件使用 xml 表示 ...
  • 而对于word的导入和导出操作,就比较少了。今天,我们以简历的导入为例子,简要说明下获取word内容进行导入的方法,简历的模板如下。 根据模板,我们可以看到此文档内容分为几个明显的块。“基本信息”之上的内容...
  • 头一次写微博,分享一下自己曾经的笔记 ...最常用的模块其实win32com.client 打开与创建word word = win32com.client.Dispatch(‘Word.Application’) #打开word word = win32com.client.DispatchEx(‘Word.
  • python_docx制作word文档详细使用说明

    万次阅读 多人点赞 2018-06-18 17:56:58
    在实习工作中,遇到用python制作word模板的任务,其实说白了就是python-docx的使用。目前网上对这一个库的介绍得很少,很零散,所以很多功能我尽量参考其官网,但是官网上面很多功能目前只有说明文档,而代码并还...
  • 直接用java代码进行 word 转pdf ,测试没有问题 docx4j 依赖的库: &lt;dependency&gt; &lt;groupId&gt;args4j&lt;/groupId&gt; &lt;artifactId&gt;args4j&lt;/artifactId&...
  • 利用python-docx更新word中的表格内容

    万次阅读 2017-03-21 22:03:02
    利用python-docx更新word中的表格内容 December 06, 2016 收到实验组小妹妹一个需求, 希望把一个巨大word文档中所有表格里的所有一位小数随机添加一位数变成两位小数, 从学术角度我开始拒绝的, 但是, 妹子...
  • Java docx(Word)转PFD

    2019-11-29 11:34:03
    最近遇到了一点小的技术问题,就是需要将Word文档给转变成PDF格式,然后在前台显示出来,然后我在百度上查找了很多的资料,大部分都使用POI这个工具包来做的,因为我比较懒,不想用那些比较长的代码,所以最好找到...
  • 本来想根据已有的word做模板,添加些新生成的数据进去,没想明白根据什么找想替换或者插入的地方的,二来要插入的图表文字也不少,所以干脆所有的都现生成吧,由于没怎么考虑效率,做下来这样也可行的。...
  • #使用python通过docx读写word文档出现package not found错误 Package not found at ‘文件名.docx’ 可能两种情况 文档空的 这个在很多的博客都能找到这个问题的反馈,问题不大,加俩空格啥的就好了 文件名过...
  • 本文通过docxword中的表格中的某些已填好的内容提取出来,存入excel表格。 首先安装docx的python模块: pip install python-docx 由于处理的为中文和符号,改成utf-8编码格式 import sys reload(sys) sys....
  • 本文通过docxword中的表格中的某些已填好的内容提取出来,存入excel表格。 首先安装docx的python模块: pip install python-docx 由于处理的为中文和符号,改成utf-8编码格式 import sys reload(sys) sys....
  • 对于PDF转换成word文档,我想很多人都了解过,那就是需要付费,而且很贵,但是如果你会Python,只要你会Python这么问题都不再问题。 pdf文件转换为word文件 Word文件转换为pdf文件 doc转docx docx...
  • python-docxWord文档对象结构访问

    千次阅读 2018-11-15 01:23:11
    docx创建(或打开)后的文档的主要结构单位『段落』(Paragraph)。标题也好,目录也好,正文也好,都段落。通过赋予段落不同的样式,形成不同功能的文档结构。创建结构文档,就是创建具有不同样式的段落。 比...
  • 完美解决doc、docx格式word转换为Html

    热门讨论 2015-09-27 16:57:53
    由于项目需要,需要在线预览文档,所以就想转换为... 此项目为maven项目,引入的包可能需要一些时间; maven项目转换为eclipse项目命令:mvn eclipse:eclipse,然后导入到eclipse; jar引入完成后,绝对100%能运行;
  • 刚要做目录的时候,我就想DocX应该提供了这个方面的函数。于是我就在讨论区搜索,看看别人怎么用的。 我搜索了catalog; catalogue; list; contents;,但是都没有和目录有关的东西,搞得我以为没提供,于是就又...
  • 我的ubuntu系统 按照网上的其他说法下载了python__docx-0.8.7-py2.py3-none-any.whl 可是在终端上执行命令:pip3 install python_docx-0.8.10-py2.py3-none-any-i ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,535
精华内容 1,014
关键字:

docx是word