如何编辑此代码以从多个Excel文件的特定工作表提取数据并显示在单独文件中
我有一段Python代码,它可以从多个Excel文件中提取数据,并把选中的数据放到一个单独的文件里,方便进一步分析。这个功能是可以用的:
import os
import openpyxl
folder = 'D:\My Documents\Code\Data'
output_file = 'D:\My Documents\Code\Data\masterfile.xlsx'
output_wb = openpyxl.Workbook()
output_sheet = output_wb.active
output_sheet.title = 'masterfile'
cells = ['A2', 'B2', 'C2']
for filename in os.listdir(folder):
if filename.endswith('.xlsx'):
filename = os.path.join(folder, filename)
workbook = openpyxl.load_workbook(filename)
values = [workbook.active[cell].value for cell in cells]
output_sheet.append(values)
output_wb.save(output_file)
不过,它只能从当前活动的工作表中提取数据……这就意味着,如果我想从Sheet2中提取数据,我必须把所有的Excel文件(有几百个)都保存成Sheet2为活动工作表,否则代码就无法运行。所以我想尝试在代码里直接设置活动工作表,但这样也不行。我才学Python一个月,并不是专业程序员,而是一个处理大量生物数据的科学家。这段代码不管用,我需要帮助来修复它。
import os
import openpyxl
folder = 'D:\My Documents\Code\Data'
output_file = 'D:\My Documents\Code\Data\masterfile.xlsx'
wb = openpyxl.Workbook()
output_wb = openpyxl.Workbook()
output_sheet = output_wb.active
output_sheet.title = 'masterfile'
cells = ['A2', 'B2', 'C2']
for filename in os.listdir(folder):
if filename.endswith('.xlsx'):
filename = os.path.join(folder, filename)
workbook = openpyxl.load_workbook(filename)
workbook.active = workbook.sheetnames.index('Sheet2')
values = [workbook.active[cell].value for cell in cells]
output_sheet.append(values)
output_wb.save(output_file)
我尝试把活动工作表设置为Sheet2,但它只会从原始Excel文件中当前活动的工作表提取数据。
我也试过这些链接里的建议,但都没有用:
用openpyxl设置活动工作表 如何在Excel openpyxl中切换工作表以进行更改 使用openpyxl按名称获取工作表
任何帮助都非常感谢。
1 个回答
你并没有缺少任何模块
这里有个快速教程,教你如何选择工作表
活动工作表是指在保存工作簿时处于焦点的那个工作表,你可以通过以下方式访问它:
sheet = wb.active
这里的 'wb' 是 Openpyxl 的工作簿对象。这也适用于在创建新工作簿时选择默认的工作表。
如果你想选择工作簿中的其他工作表,可以通过名称来选择;
sheet = wb['<sheet name>']
其中 <sheet name>
是工作表的名称(在 Openpyxl 中也叫做 '标题'),注意名称是区分大小写的。如果工作表的名称是 'Sheet1',那么 wb['sheet1']
会返回错误。
此外,工作表的 名称 存在于列表 wb.sheetnames
中,也就是说,这个列表仅包含工作表的名称,都是字符串。
因此,你可以通过以下方式选择工作簿中的每个工作表;
for sheetname in wb.sheetnames:
sheet = wb[sheetname]
...
但通常只有在你想根据标题筛选工作表时才会使用这种方法。
实际的 工作表对象 存储在列表 wb.worksheets
中。
如果你想处理工作簿中的每个工作表,可以通过以下方式遍历所有工作表;
for sheet in wb.worksheets:
print(sheet.title)
# do something with the worksheet object 'sheet' having 'title' ...
因此,使用这个列表,你也可以通过索引选择工作表,如下所示:
sheet = wb.worksheets[X]
其中 X 是你需要的工作表的索引。
工作表通常按它们在工作簿中出现的顺序列出。