我正在撰写一个脚本,用于将 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
即使它是一个修复而不是一个解决方案,但这也不太正常。
uj5u.com热心网友回复:
您的主要问题是cell_values
从多个作业表中累积单元格。您需要cell_values = []
为每张纸重置它,例如,。
我回到你原来的例子,然后:
- 将record.csv的打开上移,并将所有作业放在打开并写入的档案范围内
cell_values = []
在您的作业簿回圈内移动- 移到
cell_list = ["I9", "AK6", "N35"]
顶部,因为这确实适用于整个脚本,如果每个作业簿都具有相同的单元格 - 洗掉
quit()
,在脚本的最后没有必要,一般应该避免:Python 退出命令 - 为什么这幺多以及何时应该使用每个命令?
import csv
import openpyxl
import os
path = r'C:\Users.....' # Folder holding workbooks
workbooks = os.listdir(path)
cell_list = ["I9", "AK6", "N35"] # List of cells to check
with open('record.csv', 'w', newline='') as f:
record_writer = csv.writer(f)
for workbook in workbooks:
wb = openpyxl.load_workbook(os.path.join(path, workbook), data_only=True)
sheet = wb.active
cell_values = [] # reset for every sheet
for cells in cell_list:
cell_values.append(sheet[cells].value)
# Write one row per sheet
record_writer.writerow(cell_values)
此外,我可以看到您的新 CSV 模块,并且在概念上有点挣扎(因为您尝试过writerow
,然后writerows
尝试除错您的代码)。Python 的 CSV 官方档案并没有真正给出如何使用它的实际示例。尝试在这里阅读,写入 CSV。
0 评论