【发布时间】:2021-12-31 18:03:56
【问题描述】:
我正在编写一个脚本,用于将 Excel 工作簿中的特定单元格读取到列表中,然后从列表中读取到 CSV 中。还有一个循环可以从文件夹中打开工作簿。
我的代码:
import csv
import openpyxl
import os
path = r'C:\Users.....' # Folder holding workbooks
workbooks = os.listdir(path)
cell_values = [] # List for storing cell values from worksheets
for workbook in workbooks: # Workbook iteration
wb = openpyxl.load_workbook(os.path.join(path, workbook), data_only=True) # Open workbook
sheet = wb.active # Get sheet
f = open('../record.csv', 'w', newline='') # Open the CSV file
cell_list = ["I9", "AK6", "N35"] # List of cells to check
with f: # CSV writer loop
record_writer = csv.writer(f) # Open CSV writer
for cells in cell_list: # Loop through cell list to get cell values and write them to the cell_values list
cell_values.append(sheet[cells].value) # Append cell values to the cell_values list
record_writer.writerow(cell_values) # Write cell_values list to CSV
quit() # Terminate program after all workbooks in the folder have been analyzed
输出只是将所有值放在同一行上,尽管用逗号分隔,但是当我在 Excel 中打开结果时,如果所有内容都在同一行上,它对我没有帮助。当我使用xlrd 时,格式是垂直的,但我所要做的就是将数据集转置为好的。但我不得不从 xlrd 更改(这通常是一个聪明的举动),因为它不会读取合并的单元格。
我明白了:
4083940,140-21-541,NP,8847060,140-21-736,NP
当我想要这个时
4083940,140-21-541,NP
8847060,140-21-736,NP
编辑 - 我忘记了帖子的“我尝试过什么”部分。我尝试更改循环以避免覆盖之前对 CSV 的写入。我尝试清除每个循环上的列表,以使脚本将每个新条目视为新行。正如我在几篇文章中看到的那样,我尝试在作者行中添加\n。我尝试使用writerows 而不是writerow。我尝试了A 而不是W,尽管它是一个修复而不是一个解决方案,但它也不太正常。
【问题讨论】:
-
与其发布整个代码,不如考虑发布一个仅执行您遇到问题的任务的精简部分。例如,如果导入您的工作簿不是问题,请不要将其包含在您的帖子中。
-
很抱歉。我只是不确定我是否在循环之前搞砸了某个地方,或者可能嵌套不正确。但我把它删掉了。
-
我觉得你剪得太多了!基本上,为了提供帮助,有人需要一个示例,说明您正在使用什么数据、您正在获得什么输出以及您想要什么输出。但不要只发布输入的 XLS 文件,尽可能将数据带到最远的地方。作为指导,请查看此答案 stackoverflow.com/a/70539618/10245780 以了解您应该发布多少信息。
-
请提供其他人可以运行的minimal reproducible example。包括这样做所需的任何输入数据的小样本。
-
在您的代码中,您只有一个
record_writer.writerow(cell_values)行 - 它不在循环中。如果你想要多行,你需要多个 writerow 调用:)