python指定一列为KEY 合并多列单元格 并设置单元格行高
一、需求
1.第一列Sku数值相同的,合并A-E列,J-M列
2.M列设置行高完全显示内容
3.A1单元格内数字是SKU个数,合并单元格后数字更新
二、效果图
input入力文件处理前:
文件处理后 出力效果:
三、代码
1.合并单元格
wb = openpyxl.load_workbook('123.xlsx')name_list = wb.sheetnamesfor sheetName in name_list:mergedRowCount = 0 dw_sheet = wb[sheetName]startDataRow = 3 # 出力レポートのデータは3行目から書き込みが開始されるneedGroupAndMergeColumnsIndex = [1] # 出力レポートの最初の3列にはがマージ必要となるfor columnNumber in needGroupAndMergeColumnsIndex:#現在のセルの値currentValue = 0mergeValue = 0firstMergeRowNumber = 3#マージセルの個数addFlag = 0for rowNumber in range(startDataRow, dw_sheet.max_row+2):mergeValue = currentValuecurrentValue = dw_sheet.cell(row=rowNumber, column=columnNumber).valueif currentValue == mergeValue:addFlag += 1if addFlag == 1:firstMergeRowNumber = rowNumber - 1else:if addFlag == 0:firstMergeRowNumber = rowNumber mergedRowCount += 1 else:mergedRowCount += 1 dw_sheet.merge_cells(start_row=firstMergeRowNumber,end_row=rowNumber-1,start_column=columnNumber,end_column=columnNumber)dw_sheet.cell(row=firstMergeRowNumber,column= columnNumber).value = mergeValueif columnNumber == 1:
# tempValueCol5 = 0
# if sheetName == name_list[0]:tempValueCol5 = dw_sheet.cell(row=firstMergeRowNumber, column=5).valueelse:tempValueCol5 = dw_sheet.cell(row=firstMergeRowNumber, column=4).value * 0.8 - dw_sheet.cell(row=firstMergeRowNumber, column=4).value##セルをマージするdw_sheet.merge_cells(start_row=firstMergeRowNumber,end_row=rowNumber-1,start_column=5,end_column=5)dw_sheet.cell(row = firstMergeRowNumber,column= 5).value = tempValueCol5for merge_col in [2,3,4,9,10,11,12,13]:dw_sheet.merge_cells(start_row=firstMergeRowNumber,end_row=rowNumber-1,start_column=merge_col,end_column=merge_col)
# # セルのボーダーを描く
# if addFlag == 1:
# for col in range(1,5):
# dw_sheet.cell(row=firstMergeRowNumber+1,column=col).border=border
# else:
# for row in range(firstMergeRowNumber+1,rowNumber):
# for col in range(1,5):
# dw_sheet.cell(row=row,column=col).border=border addFlag = 0 if columnNumber == 1:totalFormattedRowsCount = mergedRowCount - 1raw_dw_txt = dw_sheet.cell(row=1, column=1).valueraw_dw_cnt = '(' + str(totalFormattedRowsCount)dw_txt = raw_dw_txt + raw_dw_cntdw_sheet['A1'] = dw_txt# wb.save('./template.xlsx')wb.save('123.xlsx')wb.close()
2.设置行高
wb = openpyxl.load_workbook('123.xlsx')
excelname='123.xlsx'
up_sheet = wb.sheetnames[0]
dw_sheet = wb.sheetnames[1]
up = wb[up_sheet]
dw = wb[dw_sheet]
up_df =pd.read_excel(io=excelname,sheet_name=up_sheet)
dw_df =pd.read_excel(io=excelname,sheet_name=dw_sheet)
# up_df = pd.read_excel(excelname, sheet_name=up_sheet)
# dw_df = pd.read_excel('input.xlsx', sheet_name=dw_sheet)
up_cnt = 3
for row in up_df.iterrows():
# comment = 'V' + str(up_cnt)comment = 'M' + str(up_cnt)# up_sheet[comment] = up_df.at[row[0], 'Unnamed: 21']
# up_comment = up_df.at[row[0], 'Unnamed: 21']up_comment = up_df.at[row[0], 'Unnamed: 12']# 終わりの改行を削除します
# up_comment = up_comment.strip("\n")
# up_comment = up_comment.strip("\r")if isinstance(up_comment,float):up_comment = ''n_line_up_cnt = 0# 行の高さ設定 else:n_line_up_cnt = up_comment.count('\n')height_cnt = 1if up_comment.find('\n') > -1:height_cnt += n_line_up_cntup_sen_list = up_comment.split('\n')for up_sen in up_sen_list:# 42.5文字を1行と設定するup_sen_len = len(up_sen) // 42.5height_cnt += up_sen_lenup.row_dimensions[up_cnt].height = height_cnt * 19.2elif up_comment.find('[') > -1:# 42.5文字を1行と設定するup_sen_len = len(up_comment) // 42.5height_cnt += up_sen_lenup.row_dimensions[up_cnt].height = height_cnt * 19.2up_cnt += 1wb.save('123.xlsx')dw_cnt = 3for row in dw_df.iterrows():
# comment = 'V' + str(dw_cnt)comment = 'M' + str(dw_cnt)
# dw_sheet[comment] = dw_df.at[row[0], 'COMMENT']
# dw_comment = dw_df.at[row[0], 'Unnamed: 21']dw_comment = dw_df.at[row[0], 'Unnamed: 12']
# 終わりの改行を削除します
# dw_comment = dw_comment.strip("\n")
# dw_comment = dw_comment.strip("\r")if isinstance(dw_comment,float):dw_comment = ''n_line_dw_cnt = 0# 行の高さ設定 else:n_line_dw_cnt = dw_comment.count('\n')height_cnt = 1if dw_comment.find('\n') > -1:height_cnt += n_line_dw_cntdw_sen_list = dw_comment.split('\n')for dw_sen in dw_sen_list:# 42.5文字を1行と設定するdw_sen_len = len(dw_sen) // 42.5height_cnt += dw_sen_lendw.row_dimensions[dw_cnt].height = height_cnt * 19.2elif dw_comment.find('[') > -1:# 42.5文字を1行と設定するdw_sen_len = len(dw_comment) // 42.5height_cnt += dw_sen_lendw.row_dimensions[dw_cnt].height = height_cnt * 19.2dw_cnt += 1wb.save('123.xlsx')```
python指定一列为KEY 合并多列单元格 并设置单元格行高相关推荐
- excel html 列宽,POI精确设置Excel的行高和列宽
EXCEL的行高度和列宽度单位是不一样的. 1,EXCEL列高度的单位是磅,Apache POI的行高度单位是缇(twip): 1英寸=72磅=25.4毫米=1440缇 1磅=0.353毫米=20缇 ...
- Laravel Excel实现Excel/CSV文件导入导出的功能详解(合并单元格,设置单元格样式)
Laravel Excel实现Excel/CSV文件导入导出(合并单元格,设置单元格样式) 这篇文章主要给大家介绍了关于在Laravel中如何使用Laravel Excel实现Excel/CSV文件导 ...
- 如何设置QTableWideget和行高和列宽
如何设置QTableWideget和行高和列宽 QTtableView或者QTableWidget的verticalHeader()->setDefaultSectionSize(15)可以设置 ...
- html设置表格行高和列宽,怎么在腾讯文档中设置表格的行高和列宽
摘要 腾兴网为您分享:怎么在腾讯文档中设置表格的行高和列宽,云集,虚拟机,我的世界,卫星云图等软件知识,以及cad2009,kmp,mt4,usb转串口驱动,wifi吸粉,csgo动态组名,亿方云,单 ...
- matlab excel 单元居中,用matlab如何识别excel里的单元格是否为合并单元格|excel表格怎么调整行高和列宽...
用matlab合并excel表格文件 没看明白 你换一种表述说说 matlab怎么合并excel单元格并赋值? 需要确切地说明一下:matlab导入默认是double型的,小数点后至以保留15位.你不 ...
- el-table合并一列中数据相同的单元格
html相关代码 即普通的ElementUI的表格插件传入span-method方法: <el-table :data="tableData" border class=&q ...
- 前端使用xlsx、file-saver实现自定义excel格式导出(列宽、字体、边框、行高)
前端使用xlsx.file-saver实现excel导出 前端使用xlsx.file-saver实现excel导出 1.下载依赖 2.在需要导出excel的页面使用依赖 3.实现导出excel文件功能 ...
- java excel行高_Java 设置Excel自适应行高、列宽
在excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法.设置自适应时,可考虑2种情况: 1.固定数据,设置行高.列宽自适应数据(常见的设置自适应方法) 2.固定 ...
- Java 设置Excel自适应行高、列宽
在excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法.设置自适应时,可考虑2种情况: 1.固定数据,设置行高.列宽自适应数据(常见的设置自适应方法) 2.固定 ...
最新文章
- 谈谈CNN中的位置和尺度问题
- HDU5762(暴力)
- Modelsim初级使用教程
- 解决启动mysql.exe闪退问题
- Py之cairocffi:cairocffi的简介、安装、使用方法之详细攻略
- python画统计图怎么在右上角表示哪条线代表什么_Python-matplotlib统计图之箱线图漫谈...
- linux图形环境小记
- python装饰器@深度加工(三分钟读懂)
- 十万大学生都已成为猿粉,你还在等什么?
- python爬虫什么意思-Python爬虫是什么意思有啥用 python爬虫原理实例介绍
- 转~ubuntu的一些常用软件
- 科来网络分析系统网络故障分析方法
- ai怎么调界面大小_ai软件界面字体特别小 ai菜单栏字体大小怎么改
- 大学计算机之软件设计程序框图,《程序框图、顺序结构》教学设计
- mysql用其他用户登录报错_mysql如何登录创建的用户
- win10系统 DNS服务器,Win10系统DNS服务器无响应
- 进阶阿里巴巴之路——招聘要求汇总
- index data
- 安卓病毒频发,做好手机安全防护很有必要
- java int Integer