我正在尝试创建一个python代码来使用openpyxl标准化excel文件。代码几乎已经准备好了,但是当我尝试做两件事时,我遇到了很多问题:
1.在第7行的A和B列中。每个具有相同内容/信息(非空)的连续垂直单元格需要合并为一个大单元格。例如:它可以是5个连续的相同内容的垂直单元格,我需要有一个大合并单元格。
1.在列C中,来自行#7的D & E。我还希望将空单元格与它们上面的第一个非空单元格合并。
这是我到目前为止的代码。
from openpyxl import load_workbook
from openpyxl.utils import column_index_from_string, get_column_letter
from openpyxl.styles import Alignment
# Load the Excel file
workbook = load_workbook('test.xlsx')
# Get the list of existing sheet names
sheet_names = workbook.sheetnames
# Iterate through the sheets in reverse order to avoid index issues
for sheet_name in reversed(sheet_names):
sheet = workbook[sheet_name]
# Check if the sheet name is not "AVL Report"
if sheet_name != "AVL Report":
# Remove the sheet
workbook.remove(sheet)
else:
worksheet = workbook["AVL Report"]
worksheet.title = "BOM"
# Get the modified sheet
modified_sheet = workbook['BOM']
# Define the columns to delete
columns_to_delete = ['C', 'D', 'G', 'H', 'J', 'M', 'N', 'O', 'P', 'Q', 'R', 'S']
# Iterate through the columns in reverse order to avoid index issues
for column in reversed(columns_to_delete):
# Get the column index
column_index = column_index_from_string(column)
# Delete the column
modified_sheet.delete_cols(column_index)
# Save the modified workbook
workbook.save('test_modified.xlsx')
print('Done')
1条答案
按热度按时间dly7yett1#
我已经合并了单元格范围的基础上的价值,通过处理数据在一个工作表,并创建一个字典,其中包含必要的合并;单元格值和范围,然后应用合并字典中的合并。
下面的示例代码是对它的修改,以适应您问题中的标准1和2。
如第一句所述,有两个部分;
第1节创建合并字典
merge_dict
。本节还包括两个部分,用于为这两个标准正确创建字典。两个标准之间的确定是通过none_list
,其中它包含Criteria 2列['C', 'D', 'E']
。合并字典是字典的字典,字典值作为列表。列字母作为主键,单元格值是每列中的子键。每个子键的值是包含该单元格值的单元格行号。
示例密钥A:
从示例;列为A,具有该值的单元格显示为子键
即
'Merge1'
在行7、8、9、10、11中。对于C、D和E列;
布局是相同的,但是在这种情况下,值是子键下面等于None的单元格,直到下一个具有值的单元格。
第2部分提取行范围并与列字母组合以创建跨范围的合并。
它忽略只有一个值的子键,因为至少需要两个单元格进行合并。
如果子键在列中存在不止一次,则这些范围将被拆分为连续的范围。
例如,在列A中,子键
'Merge2'
有一个类似[13, 17, 18, 20, 21, 22, 23, 24]
的列表,在13 & 17
和18 & 20
之间的范围序列中有两个断点,表明有三组单元格要合并。本节将这些组分开,再次丢弃单个单元格。因此,结果是A17-A18和A20-A24的合并,其中A13作为单个小区被丢弃。代码被设置为忽略A和B中的空单元格,因此这些单元格保持未合并。
例如B10-B12和B22-B24
代码还设置为忽略空单元格,这些空单元格在C、D和E中没有值高于它们的单元格,因此这些单元格也保持未合并。
例如D 7-D8
表之前和之后的示例;
列大小调整和单元格边框用于突出显示合并的单元格,而不是代码的一部分。