Python处理Excel(7):处理清产核资表格(2)合并单元格等

Python处理Excel(7):处理清产核资表格(2)合并单元格等
openpyxl能保持Excel表原有的格式。
一、清空单元格

#coding=utf-8
#合并单元格,此文档尝试了用增加行
import xlrd, xlwt, xlwings, pyautogui, time, pyperclip, easygui, os, tkinter, io,pandas,shutil,re, os
from tkinter import filedialog,ttk

from openpyxl import load_workbook
from openpyxl.styles import Border, Side, colors
#import autopy as at
import openpyxl

#file= tkinter.filedialog.askopenfile()#选择打开什么文件,返回IO流对象
#file= tkinter.filedialog.askopenfilename()#选择打开什么文件,返回文件名

#print(file)

from io import StringIO
import sys
from contextlib import contextmanager
import sys

curn_path = os.getcwd() #current path当前路径
temp_tabl_path = os.path.join(curn_path, 'Template Table')
outp_tabl_path = os.path.join(curn_path, 'Output Table')
data_sour_path = os.path.join(curn_path, 'Data Source')
# ['封面', '货币资金清查登记表', '短期投资清查登记表', '应收款项清查登记表', '库存物资清查登记表', '牲畜 (禽) 资产清查登记表', '林木资产清查登记表', '长期投资清查登记表',
#  '固定资产清查登记表-1', ' 固定资产清查登记表-2', '在建工程清查登记表-1', '在建工程清查登记表-2', '无形资产清查登记表', '租赁发包合同', '短期借款清查登记表', '应付款项清查登记表',
#  '长期借款及应付款清查登记表', '应付工资清查登记表', '应付福利费清查登记表', '一事一议资金清查登记表', '专项应付款清查登记表', '所有者权益清查登记表', '待界定资产清查登记表(账外)',
#  '资源性资产清查登记明细表-1', '资源性资产清查登记明细表-2', '资源性资产清查登记明细表-3', '资产负债表(合并报表)', '资源性资产清查登记总表', '收益分配统计表', '合同总表']
list_shet_name =['货币资金清查登记表', '应收款项清查登记表', ' 固定资产清查登记表-2','应付款项清查登记表','应付工资清查登记表','专项应付款清查登记表']
#indx_list_shet_name=0
shet_name =list_shet_name[0]
def get_file_list(raw_folder_path):
    # 打开文件
    dirs = os.listdir(raw_folder_path)
    raw_file_list=[]
    raw_file_path_list=[]
    for home, dirs, files in os.walk(raw_folder_path):
        for file_name in files:

            raw_file_list.append((file_name))
            raw_file_path_list.append(os.path.join(home, file_name))
    #print('raw_file_list')
    #print(raw_file_list)
    return raw_file_list,raw_file_path_list



def modf_excl(targ_file_path, shet_name): #modify Excel
    #Unmerges cells Excel 01.py:50: DeprecationWarning: Call to deprecated function get_sheet_by_name
    # python的openpyxl连接Excel:舍弃get_sheet_names()
    # 与get_shetet_by_name(),现在已经替换成了相应的其他两个方法。
    # - wb.get_sheet_names()(舍弃) —— > wb.sheetnames(现在用的)
    # - wb.get_sheet_by_names(‘sheet1’)(舍弃) —— > wb[ ‘sheet1’](现在用的)
    # ————————————————
    # 版权声明:本文为CSDN博主「い风花の雪栎」的原创文章,遵循CC
    # 4.0
    # BY - SA版权协议,转载请附上原文出处链接及本声明。
    # 原文链接:https: // blog.csdn.net / XRTONY / article / details / 113817732


    print(targ_file_path)

    wb = load_workbook(targ_file_path)
    # # ws = wb[' 固定资产清查登记表-2']
    # #ws = wb['封面']
    # #ws = wb[' 固定资产清查登记表-2']
    # ws = wb['应收款项清查登记表']
    # ws = wb['资源性资产清查登记明细表-1']
    ws = wb[shet_name]
    #ws = wb.get_sheet_by_name('封面')
    # ws.merge_cells('A1:B1')
    # ws.unmerge_cells('A1:B1')
     # 以下函数可以达到相同效果
    #ws = wb._sheets[0]
    # 获取行列数
    # print(wb.sheetnames)
    # ['封面', '货币资金清查登记表', '短期投资清查登记表', '应收款项清查登记表', '库存物资清查登记表', '牲畜 (禽) 资产清查登记表', '林木资产清查登记表', '长期投资清查登记表',
    #  '固定资产清查登记表-1', ' 固定资产清查登记表-2', '在建工程清查登记表-1', '在建工程清查登记表-2', '无形资产清查登记表', '租赁发包合同', '短期借款清查登记表', '应付款项清查登记表',
    #  '长期借款及应付款清查登记表', '应付工资清查登记表', '应付福利费清查登记表', '一事一议资金清查登记表', '专项应付款清查登记表', '所有者权益清查登记表', '待界定资产清查登记表(账外)',
    #  '资源性资产清查登记明细表-1', '资源性资产清查登记明细表-2', '资源性资产清查登记明细表-3', '资产负债表(合并报表)', '资源性资产清查登记总表', '收益分配统计表', '合同总表']
    row = ws.max_row
    colm = ws.max_column
    #print(row)
    #print(colm)

    # # 单元格赋值
    #ws.cell(row=9, column=1, value='金额')
    # xl_cell = xl_sheet.cell(row=i, column=j, value=“金额”)

    #ws.unmerge_cells(start_row=row-1, start_column=1, end_row=row-1, end_column=3)  #wb[' 固定资产清查登记表-2']
    #ws.unmerge_cells(start_row=row-1, start_column=1, end_row=row-1, end_column=2)  #'应收款项清查登记表'

    #ws.unmerge_cells(start_row=row - 1, start_column=1, end_row=row - 1, end_column=2)  # '资源性资产清查登记明细表-1'
    if shet_name=='货币资金清查登记表':
        print('修改{}'.format(shet_name))
        ws.cell(row=6, column=4).value = 0.00
        ws.cell(row=6, column=8).value = 0.00
        ws.cell(row=10, column=4).value = 0.00
        ws.cell(row=10, column=8).value = 0.00
    for r in range(10, row+1):
        if ws.cell(row=r, column=1).value == '相关事项说明:':
            print(1)
            print('相关事项说明在第{}行.'.format(r))
            row2=r
            #print(r)
            # print(row2)
    # print('row2')
    # print(row2)
    if shet_name=='应收款项清查登记表':
        print('修改{}'.format(shet_name))
        #第9行到倒数第三行
        for r in range(9,row2-1):
            ws.cell(row=r, column=2).value =''
            for colm2 in [6, 9, 11]:
                ws.cell(row=r, column=colm2).value = 0.00
    if shet_name==' 固定资产清查登记表-2':
        print('修改{}'.format(shet_name))

        for r in range(12,row2-1):
            for colm2 in [2, 3, 11]:
                ws.cell(row=r, column=colm2).value =''
            for colm2 in [10, 11,12,13,14,16,18,19,20,21,22, 23,26,27 ]:
                ws.cell(row=r, column=colm2).value = 0.00
    if shet_name=='应付款项清查登记表':#表格有问题,有一千多列
        print('修改{}'.format(shet_name))
        for r in range(9,row2-1):
            for colm2 in [2, 3, 4,5,6]:
                ws.cell(row=r, column=colm2).value =''
            for colm2 in [9,11,14,16 ]:
                ws.cell(row=r, column=colm2).value = 0.00
    if shet_name == '应付工资清查登记表':#表格有问题,有一千多列
        print('修改{}'.format(shet_name))
        for r in range(9, row2-1):
        #for r in range(9, 24):
            for colm2 in [2, 3]:
                ws.cell(row=r, column=colm2).value = ''
            for colm2 in [5,6,7,10,12]:
                ws.cell(row=r, column=colm2).value = 0.00
    if shet_name == '专项应付款清查登记表': #表格有问题,有一千多列
        print('修改{}'.format(shet_name))
        for r in range(9, row2-1):
        #for r in range(9, 24):
            for colm2 in [2, 3,4 ,5,6]:
                ws.cell(row=r, column=colm2).value = ''
            for colm2 in [7,8,9,10,11,12,13,15,16]:
                ws.cell(row=r, column=colm2).value = 0.00

    # ws.unmerge_cells(start_row=1, start_column=1, end_row=2, end_column=2) #A1:B2,start_row=1就是冒号前的A,start_column是冒号前的1,从1行到1行
    # #如果openpyxl在取消合并单元格的时候遇见报错ValueError: list.remove(x): x not in list,那么大概率是因为取消单元格的范围写错了!需检查下到底哪些范围是需要取消的。
    # #PS:单元格取消合并后,原来合并单元格的值会赋值到左上角单元格,其他单元格是空白!
    # ws.merge_cells(start_row=5, start_column=5, end_row=7, end_column=7)
    # #end_row、end_column分别要比start_row、start_column大,合并E5:G7单元格

    wb.save(targ_file_path)
    # 释放资源,不然脚本无法打开,会处于锁定状态。
    wb.close()


def func():



    #raw_file_list,raw_file_path_list =get_file_list(data_sour_path)

    #print(raw_file_list)
    temp_file_list, temp_file_path_list = get_file_list(temp_tabl_path)
    #模板文件夹template table的文件复制到output table文件夹下
    outp_tabl_list = []
    for i in range(len(temp_file_list)):
        outp_file_path =os.path.join(outp_tabl_path, temp_file_list[i])
        shutil.copy(temp_file_path_list[i], outp_file_path)


    outp_file_list, outp_file_path_list = get_file_list(outp_tabl_path)
    print(outp_file_path_list)



    print('gather data to excel')
    for i in range(0,len(outp_file_path_list)):
        outp_fil_nam = outp_file_list[i]
        orgz = outp_fil_nam.strip('.xlsx').strip('台山市冲蒌镇') #organization组织单位
        print(orgz)
        modf_excl(targ_file_path=outp_file_path_list[i], shet_name=list_shet_name[0])
        # for k in range(len(list_shet_name)):
        #     modf_excl(targ_file_path=outp_file_path_list[i],shet_name=list_shet_name[k])
        print('第{}个文件'.format(i+1))


if __name__ == "__main__":
    func()

二、取消合并单元格

#coding=utf-8
#合并单元格,此文档尝试了用增加行
import xlrd, xlwt, xlwings, pyautogui, time, pyperclip, easygui, os, tkinter, io,pandas,shutil,re, os
from tkinter import filedialog,ttk

from openpyxl import load_workbook
from openpyxl.styles import Border, Side, colors
#import autopy as at
import openpyxl

#file= tkinter.filedialog.askopenfile()#选择打开什么文件,返回IO流对象
#file= tkinter.filedialog.askopenfilename()#选择打开什么文件,返回文件名

#print(file)

from io import StringIO
import sys
from contextlib import contextmanager
import sys

curn_path = os.getcwd() #current path当前路径
temp_tabl_path = os.path.join(curn_path, 'Template Table')
outp_tabl_path = os.path.join(curn_path, 'Output Table')
data_sour_path = os.path.join(curn_path, 'Data Source')

list_shet_name =['应收款项清查登记表', ' 固定资产清查登记表-2', '资源性资产清查登记明细表-1']
shet_name =list_shet_name[2]
def get_file_list(raw_folder_path):
    # 打开文件
    dirs = os.listdir(raw_folder_path)
    raw_file_list=[]
    raw_file_path_list=[]
    for home, dirs, files in os.walk(raw_folder_path):
        for file_name in files:

            raw_file_list.append((file_name))
            raw_file_path_list.append(os.path.join(home, file_name))
    #print('raw_file_list')
    #print(raw_file_list)
    return raw_file_list,raw_file_path_list



def modf_excl(targ_file_path): #modify Excel
    #Unmerges cells Excel 01.py:50: DeprecationWarning: Call to deprecated function get_sheet_by_name
    # python的openpyxl连接Excel:舍弃get_sheet_names()
    # 与get_shetet_by_name(),现在已经替换成了相应的其他两个方法。
    # - wb.get_sheet_names()(舍弃) —— > wb.sheetnames(现在用的)
    # - wb.get_sheet_by_names(‘sheet1’)(舍弃) —— > wb[ ‘sheet1’](现在用的)
    # ————————————————
    # 版权声明:本文为CSDN博主「い风花の雪栎」的原创文章,遵循CC
    # 4.0
    # BY - SA版权协议,转载请附上原文出处链接及本声明。
    # 原文链接:https: // blog.csdn.net / XRTONY / article / details / 113817732


    print(targ_file_path)

    wb = load_workbook(targ_file_path)
    # ws = wb[' 固定资产清查登记表-2']
    #ws = wb['封面']
    #ws = wb[' 固定资产清查登记表-2']
    ws = wb['应收款项清查登记表']
    ws = wb['资源性资产清查登记明细表-1']
    #ws = wb.get_sheet_by_name('封面')
    # ws.merge_cells('A1:B1')
    # ws.unmerge_cells('A1:B1')
     # 以下函数可以达到相同效果
    #ws = wb._sheets[0]
    # 获取行列数
    # print(wb.sheetnames)
    # ['封面', '货币资金清查登记表', '短期投资清查登记表', '应收款项清查登记表', '库存物资清查登记表', '牲畜 (禽) 资产清查登记表', '林木资产清查登记表', '长期投资清查登记表',
    #  '固定资产清查登记表-1', ' 固定资产清查登记表-2', '在建工程清查登记表-1', '在建工程清查登记表-2', '无形资产清查登记表', '租赁发包合同', '短期借款清查登记表', '应付款项清查登记表',
    #  '长期借款及应付款清查登记表', '应付工资清查登记表', '应付福利费清查登记表', '一事一议资金清查登记表', '专项应付款清查登记表', '所有者权益清查登记表', '待界定资产清查登记表(账外)',
    #  '资源性资产清查登记明细表-1', '资源性资产清查登记明细表-2', '资源性资产清查登记明细表-3', '资产负债表(合并报表)', '资源性资产清查登记总表', '收益分配统计表', '合同总表']
    row = ws.max_row
    colm = ws.max_column
    print(row)
    #print(colm)

    # # 单元格赋值
    #ws.cell(row=9, column=1, value='金额')
    # xl_cell = xl_sheet.cell(row=i, column=j, value=“金额”)

    #ws.unmerge_cells(start_row=row-1, start_column=1, end_row=row-1, end_column=3)  #wb[' 固定资产清查登记表-2']
    #ws.unmerge_cells(start_row=row-1, start_column=1, end_row=row-1, end_column=2)  #'应收款项清查登记表'

    ws.unmerge_cells(start_row=row - 1, start_column=1, end_row=row - 1, end_column=2)  # '资源性资产清查登记明细表-1'



    # ws.unmerge_cells(start_row=1, start_column=1, end_row=2, end_column=2) #A1:B2,start_row=1就是冒号前的A,start_column是冒号前的1,从1行到1行
    # #如果openpyxl在取消合并单元格的时候遇见报错ValueError: list.remove(x): x not in list,那么大概率是因为取消单元格的范围写错了!需检查下到底哪些范围是需要取消的。
    # #PS:单元格取消合并后,原来合并单元格的值会赋值到左上角单元格,其他单元格是空白!
    # ws.merge_cells(start_row=5, start_column=5, end_row=7, end_column=7)
    # #end_row、end_column分别要比start_row、start_column大,合并E5:G7单元格

    wb.save(targ_file_path)
    # 释放资源,不然脚本无法打开,会处于锁定状态。
    wb.close()


def func():



    #raw_file_list,raw_file_path_list =get_file_list(data_sour_path)

    #print(raw_file_list)
    temp_file_list, temp_file_path_list = get_file_list(temp_tabl_path)
    #模板文件夹template table的文件复制到output table文件夹下
    outp_tabl_list = []
    for i in range(len(temp_file_list)):
        outp_file_path =os.path.join(outp_tabl_path, temp_file_list[i])
        shutil.copy(temp_file_path_list[i], outp_file_path)


    outp_file_list, outp_file_path_list = get_file_list(outp_tabl_path)
    print(outp_file_path_list)



    print('gather data to excel')
    for i in range(0,len(outp_file_path_list)):
        outp_fil_nam = outp_file_list[i]
        orgz = outp_fil_nam.strip('.xlsx').strip('台山市冲蒌镇') #organization组织单位
        print(orgz)
        modf_excl(targ_file_path=outp_file_path_list[i])
        print('第{}个文件'.format(i+1))


if __name__ == "__main__":
    func()

三、插入行

#coding=utf-8
#
import xlrd, xlwt, xlwings, pyautogui, time, pyperclip, easygui, os, tkinter, io,pandas,shutil,re, os, openpyxl
from tkinter import filedialog,ttk
from openpyxl import load_workbook    #pip install openpyxl
from openpyxl.styles import Border, Side, colors
#import autopy as at


#file= tkinter.filedialog.askopenfile()#选择打开什么文件,返回IO流对象
#file= tkinter.filedialog.askopenfilename()#选择打开什么文件,返回文件名

#print(file)

from io import StringIO
import sys
from contextlib import contextmanager
import sys

def row_inse(file_path): #row insert https://blog.csdn.net/weixin_44015669/article/details/117637954
    # 参数visible设置False不显示excel界面,默认是True显示的
    #app = xlwings.App(visible=False)
    app = xlwings.App(visible=False)
    wt = app.books.open(file_path)
    # # 加载第一个sheet页签
    # sheet = wt.sheets[0]
    #sheet = wt.sheets[' 固定资产清查登记表-2']
    sheet = wt.sheets[' 固定资产清查登记表-2']
    #sheet = wt.sheets['封面']
    time.sleep(2)
    # 读取行数
    #rows = sheet.used_range.last_cell.row
    # sheet.api.Rows(33).Insert()
    # sheet.api.Rows(23).Insert()
    # sheet.api.Rows(13).Insert()
    sheet.api.Rows(6).Insert()
    time.sleep(2)
    # 不指定路径,脚本会直接保存到原文件
    wt.save()
    # 释放资源,不然脚本无法打开,会处于锁定状态。
    wt.close()



def row_inse2(targ_file_path): #

    wb = openpyxl.load_workbook(targ_file_path)
    # ws = wb[' 固定资产清查登记表-2']
    # ws = wb['封面']
    ws = wb.get_sheet_by_name(' 固定资产清查登记表-2')
    # ws.merge_cells('A1:B1')
    # ws.unmerge_cells('A1:B1')
     # 以下函数可以达到相同效果
    #ws = wb._sheets[0]

    n=10
    ws.insert_rows(n)  # 在第n行插入一行
    # (四)插入行列
    # ws.insert_rows(n)  # 在第n行插入一行
    # ws.insert_cols(m, n)  # 从第m列开始插入n列


    print(1)
    wb.save(targ_file_path)
    # 释放资源,不然脚本无法打开,会处于锁定状态。
    wb.close()


def func():
    file_path ='台山市冲蒌镇八家经济联合社.xlsx'
    file_path = '台山市冲蒌镇八家经济联合社 (5).xlsx'
    #row_inse(file_path=file_path)
    row_inse2(targ_file_path=file_path)
if __name__ == "__main__":
    func()






#
#
#
#
#
#
#
#
#
#
# def saveAsNewExcelFile(raw_file_path_list):
#     list1=[]
#     print("file name")
#     fil_nam='村委会1'
#
#     for raw_file_path in raw_file_path_list:
#
#         for i in getInfo.index:
#             for j in range(len(getInfo.loc[i].values)):
#                 if (getInfo.loc[i].values[j] == '专项应付款-村(社区)办公经费'):
#                     start_col = i + 1
#                     row_data = getInfo.loc[i].values
#                     # print(row_data)
#                     row_data = list(row_data)
#                     row_data = list[fil_nam] + row_data
#                     list1.append(row_data)
#         print(list1)
#         print('target data目标数据')
#         targ_data = pandas.DataFrame(list1)
#
#
#
#
#     # get cared macro info from testplan and save as 'MacroInfo.xlsx'
#     getInfo = pandas.read_excel(input_file_path_plan, sheet_name="Sheet1", dtype=str, keep_default_na=False)
#     for i in getInfo.index:
#         for j in range(len(getInfo.loc[i].values)):
#             if (getInfo.loc[i].values[j] == '专项应付款-村(社区)办公经费'):
#                 start_col = i + 1
#                 row_data=getInfo.loc[i].values
#                 #print(row_data)
#                 row_data=list(row_data)
#                 row_data=list[fil_nam]+row_data
#                 list1.append(row_data)
#     print(list1)
#     print('target data目标数据')
#     targ_data=pandas.DataFrame(list1)
#                 #break #add 2.3
#                 # print(getInfo.loc[i].values[j])
#     #x = pandas.DataFrame(getInfo.iloc[start_col:, ])
#     #print(x)
#     # 判断是否存在output文件夹
#     OutputPath=r"e:\贝佳会计系统导出数据\两项经费统计"
#     if (os.path.exists(OutputPath)):
#         shutil.rmtree(OutputPath)
#         print('output dir has been rm -rf and new makedirs')
#     os.makedirs(OutputPath)
#
#     # 写入文件保存在output 文件夹下
#     filepath = os.path.join(OutputPath, '村(社区)办公经费.xls')
#     targ_data.to_excel(filepath, header=2, index=False, encoding='utf-8', sheet_name='村(社区)办公经费')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值