精华内容
下载资源
问答
  • java操作word自动填写word表格

    千次阅读 2018-09-26 06:51:25
    于是想做一个工具,输入word文件所对应的xml格式文件,自动填写表格word其实可以转化成xml来处理,这一步可以手工用word把.doc格式文件另存为.xml格式。word的表格中,每一行对应一个<w:tr>标签;...

    工作中常要填写各种word表格,其中内容有很多是重复的。于是想做一个工具,输入word文件所对应的xml格式文件,自动填写表格。

    word其实可以转化成xml来处理,这一步可以手工用word把.doc格式文件另存为.xml格式。word的表格中,每一行对应一个<w:tr>标签;每一个格子对应一个<w:tc>标签;格子中每行的内容,对应一个<w:t>标签。

    对于xml的处理,可以用dom4j来处理。主要思路为:

    1.将所要自动填写的内容,按key  -- value的格式,写进一个properties文件中。并通过程序将文件内容取出,放入到entityList当中。

    2.从xml根节点开始,遍历所有节点。若当前为w:tc节点,则获取该节点下所有w:t的内容,与所有entityList中所有key值对比。若有匹配,则在下一个w:tc格子中,新加一个w:t把该key值对应的value填入该表格中。

    3.生成新的xml格式文件

     

    所有代码如下:

    1.xml处理相关函数:

    package com.XML.test;
    
    import java.io.File;  
    import java.io.FileOutputStream;  
    import java.io.FileWriter;  
    import java.io.OutputStreamWriter;  
    import java.nio.charset.Charset;  
    import java.nio.charset.CharsetEncoder;  
    import java.util.ArrayList;
    import java.util.Iterator;  
    import java.util.List;  
    
    import javax.xml.soap.Node;
      
    import org.dom4j.Attribute;  
    import org.dom4j.Document;  
    import org.dom4j.Element;  
    import org.dom4j.io.OutputFormat;  
    import org.dom4j.io.SAXReader;  
    import org.dom4j.io.XMLWriter;  
    import org.junit.Test;  
      
    public class Demo01 {  
      
        @Test  
        public void test() throws Exception {  
      
            // 创建saxReader对象  
            SAXReader reader = new SAXReader();  
            // 通过read方法读取一个文件 转换成Document对象  
            Document document = reader.read(new File("./src/倪锐个人简历表格.xml"));  
            //获取根节点元素对象  
            Element node = document.getRootElement();  
            //遍历所有的元素节点
            
            List<Entity> entityList= GetPro.GetEntityList();
            int i=0;
            for(Entity a:entityList){
            	System.out.println("Entity" +i +a.getKey()+" "+a.getValue()); 
            	i++;
            }
            listNodes(node,entityList);  
      
            
            // 写入到一个新的文件中  
            writer(document);  
      
        }  
      
        /** 
         * 把document对象写入新的文件 
         *  
         * @param document 
         * @throws Exception 
         */  
        public void writer(Document document) throws Exception {  
            // 紧凑的格式  
            // OutputFormat format = OutputFormat.createCompactFormat();  
            // 排版缩进的格式  
            OutputFormat format = OutputFormat.createPrettyPrint();  
            // 设置编码  
            format.setEncoding("UTF-8");  
            // 创建XMLWriter对象,指定了写出文件及编码格式  
            // XMLWriter writer = new XMLWriter(new FileWriter(new  
            // File("src//a.xml")),format);  
            XMLWriter writer = new XMLWriter(new OutputStreamWriter(  
                    new FileOutputStream(new File("src//a.xml")), "UTF-8"), format);  
            // 写入  
            writer.write(document);  
            // 立即写入  
            writer.flush();  
            // 关闭操作  
            writer.close();  
        }  
      
        /** 
         * 遍历当前节点元素下面的所有(元素的)子节点 
         *  
         * @param node 
         */  
        public void listNodes(Element node,List<Entity>  fillList) {  
            System.out.println("当前节点的名称::" + node.getName());  
            // 获取当前节点的所有属性节点  
            List<Attribute> list = node.attributes();  
            // 遍历属性节点  
            for (Attribute attr : list) {  
                System.out.println(attr.getText() + "-----" + attr.getName()  
                        + "---" + attr.getValue());  
            }  
             
           if (!(node.getTextTrim().equals(""))) {  
        	   System.out.println("文本内容::::" + node.getText()); 
           }
            if (node.getName().equals("tc")){
            	System.out.println("----------------enter tc------------------");
            	for(Entity ent:fillList){
            		rightFil(node,ent.getKey(),ent.getValue());
            	}        	
            }
            // 当前节点下面子节点迭代器  
            Iterator<Element> it = node.elementIterator();  
            // 遍历  
            while (it.hasNext()) {  
                // 获取某个子节点对象  
                Element e = it.next();  
                // 对子节点进行遍历  
                listNodes(e,fillList);  
            }  
        }  
    
        //node is where you find key value
        public String merge(Element node,String tag,String ini){
        	StringBuffer strMerg=new StringBuffer(ini);
        	Iterator<Element> it = node.elementIterator();  
        	if(node.getName().equals(tag)){
                strMerg.append(node.getText());
    //            System.out.println("for strMerg-----" + strMerg);
    //            System.out.println("for node.getText()=" + node.getText());
        	}
            while (it.hasNext()) {  
                // 获取某个子节点对象  
                Element e = it.next();  
                // 对子节点进行遍历  
                strMerg=new StringBuffer(merge(e,tag,strMerg.toString())); 
                
            }
    //        System.err.println("strMerg=" + strMerg);
    
        	return strMerg.toString().replace(" ", "");
        }
        public String mergebackup(Element node,String tag){
        	try{
        		List<Element> sibList=node.elements("p");
                System.err.println("size=-----" + sibList.size());
    
        		
            	StringBuffer strMerg=new StringBuffer("");
            	int i=0;
                for (Element elm : sibList) {  
                    System.out.println("sibList-----" + elm.element("r").element("t").getText());
                    strMerg.append(elm.element("r").element("t").getText());
                    System.out.println("for strMerg =" + strMerg);
                    i++;
                    System.err.println("i======" + i);
                }
    //            System.out.println("strMerg-----" + strMerg);
                
                System.out.println("strMerg del blanks-----" + strMerg.toString().replace(" ", ""));
                return strMerg.toString().replace(" ", "");
        	}catch(NullPointerException e){
        		System.out.println("merge: no t in this tc -----" );
        		return "";
        	}
    
    
        }
        public void rightFil(Element node,String key,String value){//node 为tc级别,合并所有t标签
        	String strMerg=merge(node,"t","");
        	if(strMerg.equals(key)&&strMerg.length()>0){
            	System.out.println("***********************"+key+"found");
            	System.out.println(node.getName());
    
            	//int j=node.indexOf(node.getParent());
            	Element father=node;//self tc tag
            	System.out.println(father.getName());
           	
            	Element sib=(Element) father.selectSingleNode("following-sibling::w:tc[1]");//next tc tag
            	if(sib!= null){
            		insertT(sib,value);
            	}
            	else{
            		
            	}
            }
        }
        
        public void rightFilBackup(Element node,String key,String value){//node 为t级别,不能合并所有t标签
        	if(node.getText().replace(" ", "").equals(key)){
            	System.out.println("***********************"+key+"found");
            	System.out.println(node.getName());
    
            	//int j=node.indexOf(node.getParent());
            	Element father=(Element) node.getParent().getParent().getParent();//self tc tag
            	System.out.println(father.getName());
           	
            	Element sib=(Element) father.selectSingleNode("following-sibling::w:tc[1]");//next tc tag
            	insertT(sib,value);
            	
            }
        }   
        public void insertT(Element tc,String value){
            
            List<Attribute> list = tc.attributes();  
            // 遍历属性节点  
            for (Attribute attr : list) {  
                System.out.println(attr.getText() + "-----" + attr.getName()  
                        + "---" + attr.getValue());  
            } 
     
            System.out.println("tc.attribute(\"id\")========");
            System.out.println(tc.attribute("id"));  
     
    
        	Element adE=tc.element("p");
        	System.out.println("adEtest++++++++++++====="+adE.getName());               
        	System.out.println("adEtest++++++++++++=====END"+adE.getName());  
        	Element r=adE.addElement("w:r");            	
        	Element rPr=r.addElement("w:rPr");
        	rPr.addElement("w:rFonts hint=\"eastAsia\"");
        	rPr.addElement("w:sz val=\"24\"");
        	Element t=r.addElement("w:t");
        	t.setText(value);
        }
        
        /** 
         * 介绍Element中的element方法和elements方法的使用 
         *  
         * @param node 
         */  
        public void elementMethod(Element node) {  
            // 获取node节点中,子节点的元素名称为西游记的元素节点。  
            Element e = node.element("西游记");  
            // 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点)  
            Element author = e.element("作者");  
      
            System.out.println(e.getName() + "----" + author.getText());  
      
            // 获取西游记这个元素节点 中,所有子节点名称为作者元素的节点 。  
      
            List<Element> authors = e.elements("作者");  
            for (Element aut : authors) {  
                System.out.println(aut.getText());  
            }  
      
            // 获取西游记这个元素节点 所有元素的子节点。  
            List<Element> elements = e.elements();  
      
            for (Element el : elements) {  
                System.out.println(el.getText());  
            }  
      
        }  
      
    }  
    

    2.自动填写格式设定:(key姓名--value张三) 

    package com.XML.test;
    
    public class Entity {
    	String key;
    	String value;
    
    	public String getKey() {
    		return key;
    	}
    
    	public void setKey(String key) {
    		this.key = key;
    	}
    
    	public String getValue() {
    		return value;
    	}
    
    	public void setValue(String value) {
    		this.value = value;
    	}
    
    }

    3.从properties文件读出到entityList程序 

    package com.XML.test;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.Properties;
    
    import org.dom4j.DocumentException;
    
    //关于Properties类常用的操作
    public class GetPro {
    
      
      //读取Properties的全部信息
      public static List GetEntityList() throws IOException {
    	  List<Entity> entityList= new ArrayList();
          Properties pps = new Properties();
          InputStream in = new BufferedInputStream(new FileInputStream("./src/com/XML/test/properties"));
          pps.load(new InputStreamReader( in, "utf-8"));
          Enumeration en = pps.propertyNames(); //得到配置文件的名字
          
          while(en.hasMoreElements()) {
              String strKey = (String) en.nextElement();
              String strValue = pps.getProperty(strKey);
              Entity entity =new Entity();
              entity.setKey(strKey);
              entity.setValue(strValue);
              entityList.add(entity);
              System.out.println(strKey + "=" + strValue);
              
              
          }
    	return entityList;
          
      }
      public static void main(String[] args) throws DocumentException,
      IOException {
       Entity entity_1 =new Entity();
        List<Entity> entityList_1=GetEntityList();
        for(int i=0;i<entityList_1.size();i++){
         entity_1=entityList_1.get(i);
         System.out.println(entity_1.getKey() + "=" + entity_1.getValue());
        } 
       
      }
    
      }
    

    4.propeties文件 

    #Update long name
    #Sat Sep 22 00:57:39 CST 2018
    姓名=牛逼
    性别=女
    出身年月=1987年7月
    身份证号码=518209387428982347
    民族=汗
    政治面貌=中共党员
    婚姻状况=已婚
    健康状况=良好
    身高=175
    现户口所在地=北京
    所学专业=英语
    学历=本科
    最后毕业学校=清华大学
    毕业时间=2017年8月
    技术职称=高级工程师
    现工作单位=百度
    参加工作时间=2017年10月
    现从事专业=搬砖
    

     

    展开全文
  • vb6.0源码 word自动填写

    2015-09-29 14:11:18
    word自动根据模板填写 结尾部分是导入的一个txt文件里面有普通文本和逗号分隔符文本混合的内容 普通内容有的要居中有的要加粗 逗号分隔美容需要导入到word识别为表格形式添加. 这只是一个例子仅供参考 需要代写的...
  • 今天在做一个自动化生成SDD...以下是一部分代码,关于表格自动追加表格内容 [code="java"] import java.util.ArrayList; import com.heavenlake.wordapi.Document; public class test { pub...
    今天在做一个自动化生成SDD文档的小工具,通过Word的模板,前台通过Flex填入数据,最后将Word文档填写好。
    
    以下是一部分代码,关于表格自动追加表格内容

    import java.util.ArrayList;

    import com.heavenlake.wordapi.Document;

    public class test
    {
    public test()
    {
    Document doc = null;
    try {
    doc = new Document();
    doc.newDoc("e:/test4.doc");
    doc.insertln("测试文档");
    doc.insertln("天池软件产品列表");
    //doc.saveAs("e:/test2.doc");
    ArrayList tableData = new ArrayList(3);
    String[] title = {
    "序号", "代码", "名称","网址"};
    tableData.add(title);
    String[] field1 = {
    "1", "751002", "天池软件自动化生产平台","www.heavenlake.com"};
    tableData.add(field1);
    String[] field2 = {
    "2", "751004", "产品数据管理系统","pdm.heavenlake.com"};
    tableData.add(field2);

    doc.insert(tableData,"流行型");

    doc.insertln();


    ArrayList tableData1 = new ArrayList(3);

    String[] field3 = {
    "1", "751002", "天池软件自动化生产平台","www.heavenlake.com"};
    tableData1.add(field3);
    String[] field4 = {
    "2", "751004", "产品数据管理系统","pdm.heavenlake.com"};
    tableData1.add(field4);
    doc.replaceTable(1, 4, tableData1);

    } catch (Exception e)
    {
    e.printStackTrace();
    } finally
    {
    try
    {
    if (doc != null)
    doc.close(true);
    } catch (Exception e)
    {
    e.printStackTrace();
    }

    }

    }

    public static void main(String[] args)
    {
    test test1 = new test();
    }

    }

    展开全文
  • python办公自动化之3python-docx,openpyxl——根据excel(word表格)填写word表格(excel) 原文链接:https://blog.csdn.net/FIREseeker/article/details/115519053
  • 系列文章 第一章 python办公自动化之批量修改docx——以修改含有表格word文件为例 第二章 python办公自动化之批量生成...第三章 python办公自动化之python-docx,openpyxl——根据excel(word表格)填写word表格(excel)


    系列文章

    第一章 python办公自动化之批量修改docx——以修改含有表格的word文件为例
    第二章 python办公自动化之批量生成docx——根据excel (word)生成word (excel)
    第三章 python办公自动化之python-docx,openpyxl——根据excel(word表格)填写word表格(excel)

    一、使用openpyxl读写excel是否是必需的?

    1. 使用openpyxl读写excel当然不是必需的,pandas就可以良好的完成读取和写入,类似的包pypi上存在上十页的项目索引,当然openpyxl在这些同类包中出类拔萃。
    2. pandas适用于(大量)数据的分析和处理;若要对单元格(cell)级别进行个性化的操作,如合并某几处单元格,如在excel中生成图表,则适用openpyxl,penpyxl调用了excel的hook,可以说openpyxl是python版本的excel VBA

    二、快速熟悉openpyxl

    openpyxl官网列明了详细的用法,这里就不再赘述了,已经有不少自称原创的文章翻译了官网。在笔者看来,语言问题属于chrome浏览器或者360浏览器的翻译插件就可以完美解决的问题。官网+help()+dir()指令无往不利。
    在这里插入图片描述

    使用网页翻译
    
    输出:
    

    在这里插入图片描述

    2.1 openpyxl读取excel

    openpyxl读取现有excel

    from openpyxl import load_workbook
    import pandas as pdw
    b = load_workbook(filename = '样例.xlsx')
    print("sheeet names:",wb.sheetnames)
    ws1 = wb['合同'] 
    print("content of sheet {}:".format(ws1.title))
    for row in ws1.iter_rows(min_row=1, max_col=3, max_row=11, values_only=True):
        print(row)
    # openpyxl支持numpy和pandas
    # pd.DataFrame(ws1.values) #适用于没有表头和索引的情况
    from itertools import islice
    data = ws1.values
    cols = next(data)[1:]   #next(data)
    data = list(data)
    idx = [r[0] for r in data]
    data = (islice(r,1,None) for r in data)
    df = pd.DataFrame(data, index=idx, columns=cols)
    print("content of DataFrame:\n",df)
    

    输出:

    sheeet names: ['工资', '合同', 'Sheet3']
    content of sheet 合同:
    ('乙方', '合同金额', '工期')
    ('刘一', 10000, 10)
    ('陈二', 20000, 20)
    ('张三', 30000, 30)
    ('李四', 40000, 40)
    ('王五', 50000, 50)
    ('赵六', 60000, 60)
    ('钱七', 70000, 70)
    ('周八', 80000, 80)
    ('吴九', 90000, 90)
    ('郑十', 100000, 100)
    content of DataFrame:
           合同金额   工期
    刘一   10000   10
    陈二   20000   20
    张三   30000   30
    李四   40000   40
    王五   50000   50
    赵六   60000   60
    钱七   70000   70
    周八   80000   80
    吴九   90000   90
    郑十  100000  100
    

    2.2 python-docx写入word表格

    2.2.1 定义功能函数:在word文档中确定需要更改单元格的索引

    from docx import Document
    import re
    
    def find_index_table(pattern,document):
        #pattern为要查找的字符串
        idx_=[]
        idy_=[]
        z=0
        for table in document.tables:
            i=0
            for row in table.rows:
                id_=[]
                j=0
                for cell in row.cells:
                    id_.append([(z,i,j),cell.text])
                    if re.findall(pattern,cell.text):
                        idy_.append([(z,i,j),cell.text])
                    j+=1
                idx_.append(id_)
                i+=1
            z+=1
        return idx_,idy_
    #idx_,返回word中所有的cell索引以及cell中内容,(0,0,0)表示第1个表格,第1行,第1列,以此类推
    #idy_,返回查找到pattern的cell索引以及cell中的内容
    
    
    def change_table_value(table_cell_number,change,document):
        #table_cell_number,为需要修改内容的索引,(0,0,0)表示第1个表格,第1行,第1列,以此类推
        #change为要替换为的字符串
        for i in table_cell_number:
            document.tables[i[0]].cell(i[1],i[2]).text=change
    

    2.2.2 确定需要更改单元格的索引

    from docx import Document
    import re
    document = Document("建设工程勘察合同.docx")
    find_table=find_index_table("刘一",document)
    find_table[0] #输出word文档中所有的表格和单元格
    find_table[1] #输出找到“刘一”字符串的单元格
    

    本文需要修改的索引如下:

    Location=[(2, 1, 1), (2, 1, 2)]
    

    2.2.3 确定位置后(批量)修改

    change_table_value([Location[0]],str(df.loc["刘一","合同金额"]),document)
    change_table_value([Location[1]],str(df.loc["刘一","工期"]),document)
    document.save("刘一.docx")
    

    如果需要批量操作,参见第二章 python办公自动化之批量生成docx——根据excel (word)生成word (excel)

    2.3 python-docx读取word表格

    document = Document("刘一.docx")
    values_=[]
    Location=[(2, 1, 1), (2, 1, 2)] #索引已知
    for i in Location:
    	values_.append(document.tables[i[0]].cell(i[1],i[2]).text)
    print(values_)
    

    输出:

    ['10000', '10']
    

    2.4 openpyxl新建excel,新建sheet并赋值

    #更多基本操作,详见官网

    from openpyxl import Workbook
    from openpyxl.utils import get_column_letter
    wb = Workbook()
    dest_filename = 'empty_book.xlsx' 
    ws1 = wb.active  #新建工作薄默认新建一个sheet为当前活动sheet
    ws1.title = "range names"
    for row in range(10):
        ws1.append(range(10))
    ws2 = wb.create_sheet(title="Pi") #新建sheet,命名为Pi
    ws2['F5'] = 3.14
    ws3 = wb.create_sheet(title="Data")
    for row in range(2, 12): #赋值
        for col in range(5, 15):
            _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
    print(ws3['F5'].value)
    wb.save(filename = dest_filename)
    

    后记

    • 感觉上来讲,使用包算不上编程,但是使用包确实带来效率的提升。当然这里要看编程的定义是什么,如果编程的定义是用代码解决特定问题,那使用包毫无疑问是编程。
    • 无论是python-docx还是openpyxl都适用于处理重复性强、具有标准化的任务(比如批量生成成绩通知单等),不适用于处理创造性的工作,比如使用word写散文写论文,使用excel创建表格做行业研究。
    • 相比于python-docx对word功能的复现,openpyxl对excel功能复现的完成度更高。

    本文相关资源已上传至CSDN, 请点击0积分下载

    展开全文
  • 背景因为工作原因,需要经常往两个word...新的工作流程:利用python-docx编写脚本,运行脚本-输入个人信息-自动生成两个word模板脚本用到的python-docx库的功能:1、创建与合并表格2、添加文本3、设置文本属性(如大...

    背景

    因为工作原因,需要经常往两个word模板里填写内容并生成新的word文件,模板大致如下图:

    老的工作流程:

    打开两个表,在表中对应位置填写个人信息,保存。这样一来,当需要填写的信息比较多的时候,工作就会繁琐。

    新的工作流程:

    利用python-docx编写脚本,运行脚本-输入个人信息-自动生成两个word模板

    脚本用到的python-docx库的功能:1、创建与合并表格

    2、添加文本

    3、设置文本属性(如大小、加粗、下划线、居中等)

    安装python-docx:

    pip install python_docx

    创建与合并表格

    在python-docx中有表格对象(Table)。我们可以把一个表格看成M行(Row)N列(Column)的矩阵。

    表格中的一个“格子”就是一个cell对象,同时它还有rows(行)和columns(列)属性

    首先创建一个新的文档

    from docx import Document

    document = Document()

    然后用Document类的add_table方法增加一个表格,其中rows是行,cols是列,style表格样式,具体可以查看官方文档:

    table = document.add_table(rows=37,cols=13,style='Table Grid')

    上述代码就在word里插入了一个37行、13列的表格。(有37*13=481个cell)

    生成的每个cell都是有“坐标”的,比如上面的表格左上角cell为(0,0),右下角cell为(36,12)

    下面要做的就是合并一些cell,从而达到我们最终需要的表格

    table.cell(0,0).merge(table.cell(2,2))

    上述代码就将cell(0,0)到cell(2,2)之间的所有cell合并成一个cell

    这里需要注意的是,虽然每个cell都合并了,但其实它还是存在的。比如合并了(0,0)和(0,1)两个cell,那么这个合并的cell其实就是(0,0;0,1)

    如果cell较多,无法直观的看出坐标的话,可以用下列的代码将每个cell的坐标都标注出来,方便合并

    document = Document()

    table = document.add_table(rows=37,cols=13,style='Table Grid')

    document.save('table-1.docx')

    document1 = Document('table-1.docx')

    table = document1.tables[0]

    for row,obj_row in enumerate(table.rows):

    for col,cell in enumerate(obj_row.cells):

    cell.text = cell.text + "%d,%d " % (row,col)

    document1.save('table-2.docx')

    添加文本

    将所有cell依次合并后,就需要向合并后的cell里添加文本。

    用table的row方法可以得到一个表格的一行list其中包含了这一行的所有cell

    hdr_cells0 = table.rows[0].cells

    上面代码就得到了合并表格后的第一行所有cell,然后我们用hdr_cell0[0]就可以得到合并表格后的第一行的第一个cell。用add_paragraph方法即可像cell里添加文本

    hdr_cells0[0].add_paragraph('院(系)\n')

    上面已经说过,合并的cell其实还是存在的。因为我所需要的表格第一个cell实际合并了(0,0)---(2,2)之间六个cell。所以hdr_cell0[0].add_paragraph其实就是向这六个cell里写入内容。

    第二个cell合并的是(0,3)---(2,6)之间的cell。所以就应该向(0,3)写入文本,其实向这之间任一一个cell写入文本都是可以的,所以应该是

    hdr_cells0[3].add_paragraph('院')

    按照上面的方法依次类推,就可以将所需表格的整体部分做成。

    设置文本属性(如大小、加粗、下划线、居中等)

    合并表格并且添加了所需文本后,下面就需要设置表格内文本的各种属性了,比如大小、加粗、下划线、居中等

    在python-docx中,word主要有两种文本格式等级:块等级(block-level)和内联等级(inline-level)。word中大部分内容都是由这两种等级的对象组成。

    段落是word文件中主要的块对象,图片、表、标题、列表也是块对象

    内联对象是块对象的组成部分块对象的所有内容都包含在内联对象中,一个块对象由一个或多个内联对象组成

    run 是常用的内联对象,例如:

    p = document.add_paragraph('This is paragraph')

    p.add_run('bold').bold = True

    p.add_run(' and some ').font.size = Pt(14)

    p.add_run('italic.').italic = True

    这个例子中一个段落(块对象)包含三个 run(内联对象),每一个 run 依次设置了粗体、大小、斜体三种属性

    具体设置run属性直接用代码说明,更详细的请直接查阅官方文档

    from docx import Document

    from docx.shared import Inches, Pt

    from docx.enum.text import WD_ALIGN_PARAGRAPH

    document = Document()

    #设置整个文档的默认字体

    document.styles['Normal'].font.name = u'宋体'

    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

    p1=document.add_paragraph()

    #设置p1段落居中

    p1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER

    #p1段落大小

    p1.paragraph_format.line_spacing = Pt(25)

    #给p1段落添加run对象r1,并设置文本

    r1 =p1.add_run('添加文本\r添加文本\n')

    #文字大小

    r1.font.size = Pt(16)

    #粗体

    r1.bold = True

    #下划线

    r1.font.underline = True

    参考链接:

    展开全文
  • VC++中调用word进行word表格填写 下载源代码 在实际应用中,编程者往往喜欢程序能自动生成word说明文档,说明程序运行的状况或运行的结果;或者程序能提取数据库的内容生成word表格,使用户能方便的查看和修改,...
  • python 批量填写word表格

    千次阅读 2020-03-22 22:01:21
    今天因为老爸下乡扶贫工作,要填很多word表格,一张表一张表填写显然太慢了,就简单写了一个python代码去处理。大体上就是使用docx库来批量填写word表格,至于word表格的数据来源是使用xlrd库从excel表格中读取出来...
  • 易语言源码易语言自动添加WORD表格源码.rar
  • 易语言自动添加WORD表格源码
  • word表格换页自动续前表的方法

    千次阅读 2019-09-27 23:37:23
    工作中经常会遇到word表格换页的情况,而经常是需要有续前表的要求的,如果是不经常改动或比较简单的表,可以在整片文档内容及格式调整完成后,从头到尾依次通过以下两种比较“笨“”的办法实现: 在分页后表格中...
  • 下载源代码 ...或者程序能提取数据库的内容生成word表格,使用户能方便的查看和修改,打印。但是VC++中调用word的确不容易,特别是对word中各种函数的使用,本文以作者的工作经验详细介绍一下如...
  • 成功解决在word文件的表格中当输文字时自动出现加红色和下划线 目录 解决问题 解决思路 解决方法 解决问题 成功解决在word文件的表格中当输文字时自动出现加红色和下划线 解决思路 在输入...
  • Word 插入内容表格不换页

    千次阅读 2019-09-10 13:58:11
    答:选中表格,右键选择“表格属性”。在新跳出的窗口内选择“允许跨页断行”。然后选择“确定”。
  • 案例思想是源于前两天帮读者做了一个 demo ,需求大致将一上百个 word表格内容提取出来(所有word 中表格样式一样),把提取到的内容自动存入 Excel 中 word 中表格形式如下 目前含有数个上面形式的 word 文档需要...
  • 这个神奇的通知单自己会从Excel成绩表中提取学生的姓名、学号、各科成绩等等,然后按老师指定的格式自动制作全班同学的成绩通知单!既不用老师挨个儿填写成绩,也不会出差错!很酷吧? (电脑入门到精通网 ...
  • 批量设置word表格根据窗口自动调整

    万次阅读 2018-07-25 18:56:57
    打开word文档,开发工具 &gt; 代码 &gt; 宏, 在弹出的窗口如下 宏名填写 www,然后点击创建,弹出窗口如下 删除窗口里的内容,直接把下面这段代码复制进去 Sub www() Dim oDoc As Document Dim ...
  • 易语言word表格

    2015-12-07 17:35:01
    易语言word生成表格,包括合并单元格,字体,设置单元格属性

空空如也

空空如也

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

word自动填写表格内容