用Python做自动化的表格处理(批量智能替换) - Python趣用之法2

表格处理

目标将前表中的任务编号替换为后表中的具体内容。
用Python做自动化的表格处理(批量智能替换) - Python趣用之法2_第1张图片

# 读取表格组件
import xlrd

# 写入列表组件
import xlwt


# 表格自动化处理
def table():

    # 打开并且拿到需要的表格
    number = xlrd.open_workbook('xlsx/RawData.xlsx')
    content = xlrd.open_workbook('xlsx/target.xlsx')
    sheet_number = number.sheets()[0]
    sheet_content = content.sheets()[0]

    # 创建一个新的表格用于存储数据
    word = xlwt.Workbook(encoding='utf-8')
    sheet1 = word.add_sheet(u'sheet1',cell_overwrite_ok=True)

    # 获取表格列内容函数将此列以列表形式返回
    def table_col_content(cols, start, sheet):
        """

        :param cols: 输入要去的内容列数
        :param start: 是否跳过第一行
        :param sheet: 输入需要操作的列表
        :return: 取出的内容
        """
        # 判断是否需要跳过第一行
        if start:
            data = 1
        else:
            data = 0
        # 动态获取列表中总行数
        nrows = sheet.nrows
        # 需要的内容
        data = sheet.col_values(cols, data, nrows)
        return data

    lis1 = table_col_content(3, 1, sheet_number)
    lis2 = table_col_content(4, 1, sheet_number)
    lis3 = table_col_content(5, 1, sheet_number)
    lis = table_col_content(0, 0, sheet_content)
    print(lis1[63])

    # 对比原始序列在对比序列中的位置,并返回对应位置序号
    def compare(old_list, compare_list):
        """

        :param old_list: 需要对比的元素列表
        :param compare_list: 进行对比的最新列表
        :return: 返回原始列表在对比列表中的位置
        """
        new_list = []
        for i in old_list:
            n = 0
            for j in compare_list:
                if i == j:
                    new_list.append(n)
                    break
                elif n == len(compare_list):
                    new_list.append(' ')
                n += 1
        return new_list
    lis1 = compare(lis1, lis)
    lis2 = compare(lis2, lis)
    lis3 = compare(lis3, lis)


    # 将序号变成对应位置的内容并输出
    def change(num, sheet, start=1, end=2):
        """

        :param num: 序号
        :param sheet: 序号对应的内容所在的表格
        :param start: 序号转变内容列数开始的地方(默认为第二列开始)
        :param end: 序号转变内容列数结束的地方(默认为第三列结束,不包含第三列)
        :return: 输出对应的内容
        """
        new_lis = []
        for n in num:
            if n == ' ':
                new_lis.append('')
            else:
                new_lis.append(sheet.row_values(n, start, end))
        return new_lis
    lis1 = change(lis1, sheet_content)
    lis2 = change(lis2, sheet_content)
    lis3 = change(lis3, sheet_content)
    # 将列表输出到新的表格中
    def new_sheet(data, sheet, position=0):
        """

        :param data: 需要输入到列表中的数据
        :param sheet: 需要输入的列表
        :param position:要保存到第几列(默认为第一列)
        :return:
        """
        i = 0
        for n in data:
            sheet.write(i, position, n)
            i += 1
        return print('完成任务')
    new_sheet(lis1, sheet1, 0)
    new_sheet(lis2, sheet1, 1)
    new_sheet(lis3, sheet1, 2)
    # 保存
    word.save('xlsx/Data.xls')

table()

你可能感兴趣的:(Python)