技术问询:将数组及循环获取的工作表名称列表输出至首个工作表
这两个需求都挺 straightforward 的,我给你准备了Python(用openpyxl库)和Excel VBA两种常用方案,你根据自己的使用场景选就行:
Python + openpyxl 实现方案
先确保你已经安装了openpyxl,没装的话在命令行跑 pip install openpyxl 就行。
1. 将指定数组输出至第一个工作表
from openpyxl import Workbook, load_workbook # 情况1:新建一个工作簿 wb = Workbook() ws = wb.active # 默认获取第一个工作表(名称为Sheet) # 情况2:打开已有工作簿 # wb = load_workbook("你的文件路径.xlsx") # ws = wb.worksheets[0] # 通过索引0获取第一个工作表 # 定义你要输出的指定数组(这里用二维数组举例) target_array = [ ["姓名", "年龄", "城市"], ["张三", 25, "北京"], ["李四", 30, "上海"] ] # 循环写入数组内容到工作表 for row_idx, row_data in enumerate(target_array, start=1): for col_idx, cell_value in enumerate(row_data, start=1): ws.cell(row=row_idx, column=col_idx, value=cell_value) # 保存结果 wb.save("输出结果.xlsx")
小提示:用enumerate(start=1)是为了直接对应Excel从1开始的行/列编号,不用额外做偏移计算,更省心。
2. 将所有工作表名称列表输出至第一个工作表
from openpyxl import load_workbook # 打开目标工作簿 wb = load_workbook("你的文件路径.xlsx") ws = wb.worksheets[0] # 第一个工作表作为输出目标 # 获取所有工作表名称的列表 all_sheet_names = wb.sheetnames # 把列表写入第一个工作表的A列,这里从第10行开始(避免和之前的数组内容重叠) for idx, sheet_name in enumerate(all_sheet_names, start=10): ws.cell(row=idx, column=1, value=sheet_name) # 保存修改 wb.save("输出结果.xlsx")
小提示:如果不想从第10行开始,直接把start=10改成你需要的起始行号就行。
Excel VBA 实现方案
打开Excel后按Alt+F11打开VBA编辑器,插入一个新模块,然后粘贴对应代码:
1. 将指定数组输出至第一个工作表
Sub 输出指定数组到首工作表() Dim targetArray As Variant Dim ws As Worksheet Dim i As Integer, j As Integer ' 定义要输出的二维数组 targetArray = Array(Array("姓名", "年龄", "城市"), _ Array("张三", 25, "北京"), _ Array("李四", 30, "上海")) ' 获取第一个工作表 Set ws = ThisWorkbook.Worksheets(1) ' 可选:清空工作表原有内容(不需要的话可以删掉这行) ws.Cells.Clear ' 循环写入数组内容 For i = LBound(targetArray) To UBound(targetArray) For j = LBound(targetArray(i)) To UBound(targetArray(i)) ws.Cells(i + 1, j + 1).Value = targetArray(i)(j) Next j Next i End Sub
小提示:VBA数组默认从0开始索引,所以写入单元格时要加1,对应Excel的1起始行/列。
2. 将所有工作表名称列表输出至第一个工作表
Sub 输出所有工作表名称到首工作表() Dim ws As Worksheet Dim targetWs As Worksheet Dim rowNum As Integer ' 第一个工作表作为输出目标 Set targetWs = ThisWorkbook.Worksheets(1) rowNum = 1 ' 从第1行开始写入,可自行修改 ' 遍历所有工作表,写入名称 For Each ws In ThisWorkbook.Worksheets targetWs.Cells(rowNum, 1).Value = ws.Name rowNum = rowNum + 1 Next ws End Sub
小提示:如果想把名称写到其他列,把Cells(rowNum, 1)里的1改成对应列号就行(比如2对应B列)。
内容的提问来源于stack exchange,提问作者user718229
相关产品推荐
相关产品推荐

