我正在撰寫一個腳本,用于將 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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400255.html
