1.简单做了个模板,能干这个:
指定sheet中某列数据进行按需拆分,拆分后新建一个test的sheet,将数据分别存入test的不同列中。
import os
import xlwings as xw
import re
#excel路径
path=r'C:\Users\xxx\Desktop\123.xlsx'
#设置需要分列的sheet名
sheetname='Sheet1'
#设置需要分列的列名
colname='B'
#开始单元格
rowb=2
#结束单元格
rowe=25
def excel分列(path):
excelapp=xw.App(visible=False, add_book=False)
#打开excel
excel = excelapp.books.open(path)
#获取sheets
sheet = excel.sheets
#增加一个拆分用sheet,test
if sheet[0].name !='test':
sheet.add('test', before=sheet[0].name)
#print(sheet[0].name)
sheet2 = excel.sheets[sheetname]
#设置拆分条件,这里以复合字串为例,型如:你好123+好的234,拆成:你好,123,+,好的234
num1=re.compile('\w.[0-9]')
#print(re.findall(num1,sheet2.range('b2:b25').value[0])[0][:-1])
num2=re.compile('\d++')
#print(re.findall(num2,sheet2.range('b2:b25').value[0])[0])
num3=sheet2.range('b2:b25').value[0].split('+')
#print(num3[1])
t1=[]
t2=[]
t3=[]
t4=[]
#拆分取值
for i in sheet2.range(colname+str(rowb)+':'+colname+str(rowe)).value:
t1.append(re.findall(num1,i)[0][:-1])
t2.append(re.findall(num2,i)[0])
t3.append('+')
t4.append(i.split('+')[1])
#print(t1,t2,t3,t4)
#将拆分数据填入test中
sheet3=excel.sheets['test']
for i in range(len(t1)):
sheet3.range('A'+str(i+1)).value=t1[i]
sheet3.range('B' + str(i + 1)).value = t2[i]
sheet3.range('C' + str(i + 1)).value = t3[i]
sheet3.range('D' + str(i + 1)).value = t4[i]
excel.save()
excel.close()
excelapp.quit()
excel分列(path)
2.实际业务遇到批量报表打印的问题,每次都要打开一个excel报表然后设置打印格式打印,一个月31个报表要重复操作31次。
这里下面的代码可以将同一个目录下的自动化的同一类型报表合并成一个excel,即一个excel里面合并后有31个sheet,然后按ctrl全选所有sheet 即可以一次性打印所有报表了。
import os
import xlwings as xw
path=r'C:\Users\d\Desktop\脚本\22'
# 创建一个新的工作簿
app = xw.App(visible=False, add_book=False)
new_wb = app.books.add()
i=0
# 遍历文件夹中的所有Excel文件
for file_name in os.listdir(path):
if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
file_path = os.path.join(path, file_name)
wb = app.books.open(file_path)
try:
sheet = wb.sheets["Sheet1"] # 获取第一个工作表
sheet.api.Copy(Before=new_wb.sheets[-1].api)
new_sheet1 = new_wb.sheets[i]
#new_sheet1.name = 'Sheet'+str(i)
finally:
wb.close()
i += 1
# 保存并关闭新工作簿
new_wb.save(os.path.join(path, "union_Excel.xlsx"))
new_wb.close()
app.quit()