python中使用openpyxl遍历表格,将每一行中的第四列单元格内容和第三列的单元格内容以字符串形式拼接起来,添加到list1列表中
时间: 2024-03-26 19:39:07 浏览: 224
好的,您可以使用下面的代码实现:
```python
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 获取当前活跃的工作表
sheet = wb.active
# 创建一个空列表来存储拼接后的字符串
list1 = []
# 遍历每一行,获取第三列和第四列的内容进行拼接
for row in sheet.iter_rows(min_row=2, min_col=1, max_col=4):
col3 = row[2].value
col4 = row[3].value
result_str = str(col3) + str(col4)
# 将拼接后的字符串添加到列表中
list1.append(result_str)
# 输出拼接后的字符串列表
print(list1)
```
上述代码中,min_row=2表示从第二行开始遍历,因为第一行通常是表头,不需要进行处理。min_col=1表示从第一列开始遍历,因为我们需要获取第三列和第四列的内容。max_col=4表示遍历到第四列结束。最后,将拼接后的字符串添加到list1中,并输出列表的内容。
相关问题
使用python代码,对excel文件“临时文件\推送名单.xlsx”操作,遍历此excel的所有sheet,当sheet名为“总行”的时候,其中表头“推送内容”一列是合并单元格,合并的是第5列到至第22列的所有数据,读取表头为“接收人工号”,和“推送内容”的这些列数据,定义一个字符串,以行遍历这些数据,把表头为“推送内容”的这些数据进行单元格字符串拼接起来(这些单元格数据里有可能有换行),进行下一行则重置字符串,遍历每行输出拼接的字符串 相关所有代码
可以使用openpyxl库来实现对Excel文件的操作,以下是实现你要求的Python代码:
```python
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('临时文件\\推送名单.xlsx')
# 遍历所有sheet
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
if sheet_name == '总行':
# 找到表头为“接收人工号”和“推送内容”的列号
receiver_col = None
content_col_start = None
content_col_end = None
for col in sheet.iter_cols(min_col=1, max_col=sheet.max_column, min_row=1, max_row=1):
for cell in col:
if cell.value == '接收人工号':
receiver_col = cell.col_idx
elif cell.value == '推送内容':
content_col_start = cell.col_idx
content_col_end = col[-1].col_idx
# 遍历每行数据,拼接推送内容
content_str = ''
for row in sheet.iter_rows(min_row=2):
if content_str and row[content_col_start-1].value:
print(content_str) # 输出上一行拼接的字符串
content_str = ''
for col in range(content_col_start, content_col_end+1):
cell = row[col-1]
if cell.value:
if col == content_col_start:
content_str += str(cell.value)
else:
content_str += '\n' + str(cell.value)
if row[receiver_col-1].value:
content_str += '\n接收人工号:' + str(row[receiver_col-1].value)
if content_str:
print(content_str) # 输出最后一行拼接的字符串
```
这段代码做了以下操作:
1. 打开Excel文件;
2. 遍历所有sheet,找到名称为“总行”的sheet;
3. 在“总行”sheet中找到表头为“接收人工号”和“推送内容”的列号;
4. 遍历每行数据,拼接推送内容;
5. 当遍历到下一行或者最后一行时,输出拼接的字符串。
由于你的Excel文件路径是相对路径,需要确保你的代码文件和Excel文件在同一目录下。如果不是,需要修改文件路径。
python 使用pandas库,使用 pandas 库中的 read_excel 函数和 MultiIndex 类型来读取合并单元格表头,操作excel文件“data\推送名单.xlsx”,遍历循环读取所有sheet表,在最右侧添加一列,表头为“合并内容”,读取合并单元格表头“推送内容”的所在的合并列的所有数据data(示列:B列,C列,D列的第一行为合并单元格,数值是表头“推送内容”),定义一个字符串,对data数据进行遍历循环,每一行对列数据做字符串拼接strtext(表头为“推送内容”的合并列的单元格数据有转行,有特殊符号),生成的strtext写入到excel中的对应行的“合并表头”列,保存excel文件
好的,我来解答您的问题。
您可以按照以下步骤来实现您的需求:
1. 导入 pandas 库和 openpyxl 库(openpyxl 库是 pandas 库处理合并单元格表头需要用到的库):
```python
import pandas as pd
from openpyxl import load_workbook
```
2. 使用 read_excel 函数读取 Excel 文件,并通过 MultiIndex 类型处理合并单元格表头:
```python
# 读取 Excel 文件
file_path = 'data/推送名单.xlsx'
excel_file = pd.ExcelFile(file_path)
# 定义一个空的 DataFrame 保存所有 sheet 表的数据
data_all = pd.DataFrame()
# 遍历循环读取所有 sheet 表
for sheet_name in excel_file.sheet_names:
# 读取 sheet 表数据,并使用 MultiIndex 类型处理合并单元格表头
data = pd.read_excel(file_path, sheet_name=sheet_name, header=[0, 1], engine='openpyxl')
data_all = pd.concat([data_all, data], axis=0)
```
3. 定义一个函数,用于获取合并单元格表头“推送内容”的所在的合并列的所有数据:
```python
def get_merge_cells(sheet):
merge_cells = sheet.merged_cells
for merged_cell in merge_cells:
if merged_cell.start_row == 0 and merged_cell.start_column == 1:
merge_range = sheet[merged_cell.coord]
merge_values = [cell.value for row in merge_range for cell in row]
return merge_values
return []
```
4. 遍历循环 DataFrame 中的每一行,对列数据做字符串拼接,生成的 strtext 写入到 excel 中的对应行的“合并表头”列:
```python
# 打开 Excel 文件
excel_writer = pd.ExcelWriter(file_path, engine='openpyxl')
book = load_workbook(file_path)
excel_writer.book = book
# 遍历循环 DataFrame 中的每一行
for i, row in data_all.iterrows():
# 获取“推送内容”的合并列数据
sheet_name = row.name[0]
sheet = book[sheet_name]
merge_values = get_merge_cells(sheet)
# 对列数据做字符串拼接
strtext = ''
for col in ['B', 'C', 'D']:
if not pd.isna(row[(col, '推送内容')]):
strtext += str(row[(col, '推送内容')])
if str(row[(col, '推送内容')]).endswith('\n'):
strtext += '\n'
# 将生成的 strtext 写入到 excel 中的对应行的“合并表头”列
data_all.at[i, ('', '合并内容')] = strtext.strip()
# 将 DataFrame 保存到 Excel 文件中
data_all.to_excel(excel_writer, sheet_name='合并表头', index=False)
# 关闭 Excel 文件
excel_writer.save()
```
这样,您就可以使用 pandas 库和 openpyxl 库读取合并单元格表头,操作 excel 文件,并在最右侧添加一列,表头为“合并内容”,读取合并单元格表头“推送内容”的所在的合并列的所有数据,对数据进行遍历循环,每一行对列数据做字符串拼接,生成的 strtext 写入到 excel 中的对应行的“合并表头”列,最后保存 excel 文件。
阅读全文