【python】操作Excel和word模块

一、Excel操作操作模块

.xls和.xlsx使用的两种不同的模块:

.xls: xlrd 常用函数

python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。

data = xlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个 r

获取book(excel文件)中一个工作表

table = data.sheets()[0]             #通过索引顺序获取
table = data.sheet_by_index(sheet_indx)  #通过索引顺序获取
table = data.sheet_by_name(sheet_name)  #通过名称获取
 
names = data.sheet_names()        #返回book中所有工作表的名字
data.sheet_loaded(sheet_name or indx)    # 检查某个sheet是否导入完毕
  1. 行的操作
nrows = table.nrows # 获取该sheet中的行数,注:这里table.nrows后面不带()
table.row(rowx) # 返回由该行中所有的单元格对象组成的列表,这与tabel.raw()方法并没有区别
table.row_slice(rowx) # 返回由该行中所有的单元格对象组成的列表 
table.row_types(rowx, start_colx=0, end_colx=None)# 返回由该行中所有单元格的数据类型组成的列表;
table.row_values(rowx, start_colx=0, end_colx=None) # 返回由该行中所有单元格的数据组成的列表
table.row_len(rowx) # 返回该行的有效单元格长度,即这一行有多少个数据
  1. 列(colnum)的操作
ncols = table.ncols # 获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=None) # 返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) # 返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) # 返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) # 返回由该列中所有单元格的数据组成的列表
  1. 单元格的操作
table.cell(rowx,colx) # 返回单元格对象
table.cell_type(rowx,colx) # 返回对应位置单元格中的数据类型
table.cell_value(rowx,colx) # 返回对应位置单元格中的数据

.xlsx:openpyxl 常用函数

  1. 新建表格文件
from  openpyxl import  Workbook 
wb = Workbook() # 实例化
ws = wb.active # 激活 worksheet
  1. 打开已有
from openpyxl  import load_workbook
wb = load_workbook('data.xlsx')
  1. 写入数据
# 方式一:数据可以直接分配到单元格中(可以输入公式)
ws['A1'] = 42
# 方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
ws.append([1, 2, 3])
# 方式三:Python 类型会被自动转换
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
  1. 创建表(sheet)
# 方式一:插入到最后(default)
ws1 = wb.create_sheet("Mysheet") 
# 方式二:插入到最开始的位置
ws2 = wb.create_sheet("Mysheet", 0)
  1. 选择表(sheet)
# sheet 名称可以作为 key 进行索引
ws3 = wb["new sheet"]
ws4 = wb.get_sheet_by_name("sheet1")
  1. 查看表名(sheet)
# 显示所有表名
wb.sheetnames
['Sheet2', 'New Title',  'Sheet1']
# 遍历所有表
for sheet in  wb:
	print(sheet.title)
  1. 访问单元格(cell)
# 方法一
cell = ws['A4']
# 方法二:row 行;column 列
cell = ws.cell(row=4, column=2, value=10)
  1. 保存数据
wb.save('文件名称.xlsx')

xlsx:openpyxl 封装类

# -*- coding: utf-8 -*-
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter


class ExcelUtils:
    def __init__(self, filename):
        self.filename = filename
        self.workbook = load_workbook(filename)

    def read_cell(self, sheet, cell, encoding='utf-8'):
        value = sheet[cell].value
        if isinstance(value, str):
            return value.encode(encoding).decode(encoding)
        return value

    def write_cell(self, sheet, cell, value):
        sheet[cell].value = value

    def save(self):
        self.workbook.save(self.filename)

    def create_sheet(self, sheet_name):
        self.workbook.create_sheet(title=sheet_name)

    def delete_sheet(self, sheet_name):
        sheet = self.workbook[sheet_name]
        self.workbook.remove(sheet)

    def get_sheet_names(self):
        return self.workbook.sheetnames

    def get_row_count(self, sheet):
        return sheet.max_row

    def get_column_count(self, sheet):
        return sheet.max_column

    def get_column_letter(self, column_number):
        return get_column_letter(column_number)

    def get_sheet_by_index(self, index):
        sheet_names = self.get_sheet_names()
        if index < len(sheet_names):
            sheet_name = sheet_names[index]
            sheet = self.workbook[sheet_name]
            return sheet
        else:
            return None

if __name__ == '__main__':
    # 创建一个 ExcelUtils 实例
    excel = ExcelUtils('data.xlsx')

    # 获取工作表对象
    sheet = excel.get_sheet_by_index(0)  # 获取第一个工作表
    if sheet:
        # 读取单元格的值
        value = excel.read_cell(sheet, 'A1',encoding='utf-8')
        print(value)
    else:
        print("Sheet not found.")

二、word操作模块

要使用 Python 操作 Word 模板文件,可以使用 python-docx 库

封装工具

from docx import Document
from docxtpl import DocxTemplate


class WordUtils:
    def __init__(self, filename):
        self.filename = filename
        self.document = Document(filename)
        self.template = DocxTemplate(filename)

    def read_paragraph(self, paragraph_index):
        paragraphs = self.document.paragraphs
        if 0 <= paragraph_index < len(paragraphs):
            return paragraphs[paragraph_index].text
        else:
            return None

    def write_paragraph(self, paragraph_index, text):
        paragraphs = self.document.paragraphs
        if 0 <= paragraph_index < len(paragraphs):
            paragraphs[paragraph_index].text = text

    def read_table_cell(self, table_index, row_index, column_index):
        tables = self.document.tables
        if 0 <= table_index < len(tables):
            table = tables[table_index]
            if 0 <= row_index < len(table.rows) and 0 <= column_index < len(table.columns):
                cell = table.cell(row_index, column_index)
                return cell.text
        return None

    def write_table_cell(self, table_index, row_index, column_index, text):
        tables = self.document.tables
        if 0 <= table_index < len(tables):
            table = tables[table_index]
            if 0 <= row_index < len(table.rows) and 0 <= column_index < len(table.columns):
                cell = table.cell(row_index, column_index)
                cell.text = text

    def render_template(self, context):
        self.template.render(context)

    def save(self, output_filename):
        self.template.save(output_filename)

    def save_document(self, output_filename):
        self.document.save(output_filename)

if __name__ == '__main__':
    # 创建一个 WordUtils 实例
    word = WordUtils('template.docx')

    # 读取段落内容
    paragraph_text = word.read_paragraph(0)
    print(paragraph_text)

    # 写入段落内容
    word.write_paragraph(0, 'Hello, world!')

    # 读取表格单元格内容
    cell_text = word.read_table_cell(0, 1, 1)
    print(cell_text)

    # 写入表格单元格内容
    word.write_table_cell(0, 1, 1, 'New value')

    # 渲染模板
    context = {
        'name': 'John Doe',
        'age': 30,
        'occupation': 'Engineer'
    }
    word.render_template(context)

    # 保存渲染后的文档
    word.save('output.docx')

    # 保存原始文档(未渲染)
    word.save_document('original.docx')

在示例中,我们使用 WordUtils 类加载 Word 模板文件并渲染模板。render_template 方法接受一个字典作为参数,其中包含模板中的变量和对应的值。然后,我们调用 save 方法将渲染后的文档保存到指定的输出文件中。根据需要修改模板文件的名称和输出文件的名称。

请确保已安装 docxtpl 库,可以使用 pip install docxtpl 命令进行安装。注意,docxtpl 是对 python-docx 的扩展,因此还需要确保 python-docx 库也已安装。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用PythonWordExcel数据内容进行匹配的方法如下: 1. 首先,需要安装并导入 `python-docx` 和 `openpyxl` 这两个 Python 模块,分别用于处理 WordExcel 文件。 2. 使用 `python-docx` 模块打开 Word 文件,可以通过以下代码实现: ``` from docx import Document doc = Document('example.docx') ``` 3. 使用 `openpyxl` 模块打开 Excel 文件,可以通过以下代码实现: ``` from openpyxl import load_workbook wb = load_workbook('example.xlsx') ``` 4. 分别获取 Word 文件和 Excel 文件的内容,可以通过以下代码实现: - Word 文件的内容获取: ``` paragraphs = [p.text for p in doc.paragraphs] ``` - Excel 文件的内容获取(假设要获取第一个工作表的 A 列数据): ``` sheet = wb.worksheets[0] column_A = [cell.value for cell in sheet['A']] ``` 5. 对 Word 文件和 Excel 文件的内容进行匹配,可以使用字符串匹配的方法,例如使用 `in` 操作符进行匹配: ``` matching_data = [value for value in column_A if any(word in value for word in paragraphs)] ``` 6. 将匹配到的数据进行进一步处理或输出,例如将匹配到的数据写入新的 Excel 文件或进行其他分析。 7. 最后记得关闭 WordExcel 文件,可以使用以下代码实现: ``` doc.close() wb.close() ``` 以上就是使用 PythonWordExcel 数据内容进行匹配的一种方法。当然,具体的实现方式还会根据具体的需求和数据结构稍有不同,上述代码仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhipengit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值