zoukankan      html  css  js  c++  java
  • python处理word和excel文件

    python处理word和excel表格数据

    学习过程中遇到批量将excel表格数据填入到word的问题,对于excel的函数使用不是很熟悉,python中有处理word和excel的库,所以学习使用python实现对数据的批量处理。首先是需要了解处理word和excel的具体操作。

    python对编辑word表格

    需要安装第三方库python-docx

    python-docx API网址:https://python-docx.readthedocs.io/en/latest/#api-documentation

    对表格的基本操作

    # -*- coding: utf-8 -*-
    from docx import Document
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.oxml.ns import qn
    from docx.shared import Pt
    
    path=r'C:UsershxyDesktop	est.docx'#文件路径
    doc=Document(path)#读入文件
    #设置表格字体
    doc.styles['Normal'].font.name = u'仿宋'
    doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋')
    
    #获取所有的表格,返回列表
    tables=doc.tables
    print(tables)
    
    #读取第一个表格的内容,获取全部的表格内容加个循环即可
    table_1=tables[0]#第一个表
    tb_rows=table_1.rows#获取表格的行
    #读取每一行内容s
    for i in range(len(tb_rows)):
        row_data=[]
        row_cells=tb_rows[i].cells
        #读取每一行单元格内容
        for cell in row_cells:
            #单元格内容
            row_data.append(cell.text)
        print(row_data)
    #数据填入表格,两种方式
    table_1.cell(0,1).text="测试使用"#单元格直接赋值
    table_1.cell(0,3).paragraphs[0].add_run(u'whoami')#追加写入数据
    #单元格的属性修改
    run=table_1.cell(0,5).paragraphs[0].add_run("计算机")
    run.bold=True#字体加粗
    run.font.size = Pt(9)  # 字体大小:小五-9
    table_1.cell(0,5).paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中
    
    doc.save(path)#文件保存
    

    python对excel表格的读写操作

    python实现对excel表格的操作有xlrd(只能读入,不能写)、xlwd,openpyxl模块能够实现对excel的读写操作。

    xlrd和xlwt都是针对Excel97-2003操作的,也就是以xls结尾的文件。很显然现在基本上都是Excel2007以上的版本,以xlsx为后缀。要对这种类型的Excel文件进行操作要使用openpyxl,该模块既可以进行“读”操作,也可以进行“写”操作,还可以对已经存在的文件做修改。

    xlrd网址:https://pypi.org/project/xlrd/

    xlrd模块读取excel表格

    # -*- coding: utf-8 -*-
    
    import xlrd
    excelDir=r'C:UsershxyDesktop	est.xlsx'
    # 打开表格
    workbook=xlrd.open_workbook(excelDir)
    # 获取表名
    worksheet_name=workbook.sheet_names()
    print(worksheet_name)
    # 根据序号打开表
    worksheet=workbook.sheet_by_index(0)
    # 获取表的名称,行,列
    print(worksheet.name,worksheet.nrows,worksheet.ncols)
    # 获取第一行
    rows=worksheet.row_values(0)
    print(rows)
    # 获取单元格的值
    data_1=worksheet.cell_value(1,7)
    data_2=worksheet.cell(1,0).value
    data_3=worksheet.row(1)[2].value
    print(data_1,data_2,data_3)
    # print(worksheet.cell(1,2))
    
    #读取指定工作表的表格内容
    for i in range(worksheet.nrows):
        row=worksheet.row_values(i)
        print(row)
    

    openpyxl网址:https://bitbucket.org/openpyxl/openpyxl/src/default/

    使用openpyxl读取和写入excel

    import openpyxl
    
    excelDir=r'C:UsershxyDesktop	est.xlsx'
    #打开工作簿对象
    workbook=openpyxl.load_workbook(excelDir)
    #获取工作簿中的所有表
    sheetnames=workbook.sheetnames
    print(sheetnames)
    
    #获取工作表对象
    # sheetname=workbook[sheetnames[0]]
    sheetname=workbook.worksheets[0]
    print(sheetname)
    
    #获取表的属性
    name=sheetname.title
    print(name)
    rows,cols=sheetname.max_row,sheetname.max_column
    print(rows,cols)
    
    #按行或列方式获取表中的数据
    for row in sheetname.rows:
        for cell in row:
            print(cell.value,end=" ")
        print()
    print("=="*30)
    for col in sheetname.columns:
        for cell in col:
            print(cell.value,end=" ")
        print()
    #获取指定单元个的数据
    data1=sheetname.cell_value(0,0)
    data2=sheetname.cell(0,1).value
    print(data1,data2)
    
    
    # 插入一列
    sheetname.insert_cols(1)
    for index,row in enumerate(sheetname.rows):
        if index==0:
            row[0].value="编号"
        else:
            row[0].value=index
    
    #可以插入列表数据
    data=[10,"llc",'whoami','hellowordl']
    sheetname.append(data)
    #保存
    workbook.save(filename=excelDir)
    print('finish')
    

    批量操作数据

    ​ 因为数据格式是相同的,只是填入的数据不同,所以可以通过docx和xlrd对表格的基本操作,可以实现对数据的批量处理。首先使用xlrd将数据读取到列表中,然后将列表的数据填入指定的表格中。

    这里只是对word和excel的基本操作,能够完成目前所需。另外设置单元格格式,设置数据格式等更多的操作还有待学习。

  • 相关阅读:
    JSON 基础完结 yz
    HTML5 基础教程一 yz
    HTML5 基础教程二 yz
    ADO.NET 之 一 yz
    [ lucene高级 ] Lucene docid,UID mapping and Payload [转]
    [ mongoDB ] Wordnik的MongoDB使用经验 [转]
    [ mongoDB ] MongoDB 客户端推荐
    [ mongoDB ] mongoDB replSet 添加节点注意事项
    Trie树实现[ java ]
    [ mongoDB ] MongoDB 连接池
  • 原文地址:https://www.cnblogs.com/thresh/p/12906852.html
Copyright © 2011-2022 走看看