提问人:Awellkeptsecret 提问时间:11/13/2023 更新时间:11/14/2023 访问量:74
用于迭代具有多个选项卡的 .xls 电子表格、删除行和第一列并导出到 csv 的 Python 解决方案?
Python solution for iterating through .xls spreadsheet with multiple tabs, deleting rows and first column, and export to csv?
问:
我非常沮丧地试图编写一个代码来迭代每个工作表为一年的 .xls(或 .xlsx)电子表格,编辑每个工作表以删除第 1-4、6 和 72-150 行,删除第一列,然后将该工作表导出到 csv。所以我应该每张(年)有一个 csv。我尝试使用 pandas、xlrd、openpyxl,但每一行都不断出现错误。有人可以帮我吗?用最少的额外包裹最简单的方法是什么?继续让该列表不可调用或字符串或错误的索引。请帮忙。
感谢它!
import openpyxl
import csv
workbook = openpyxl.load_workbook("C:/Users/example.xlsx")
worksheet = workbook.sheetnames
print(worksheet)
for sheet in worksheet:
mrts_worksheet['B5'] = "Diff Label"
sheet.delete_rows(mrts_worksheet.delete_rows(72, 100))
sheet.delete_rows(mrts_worksheet.delete_rows(6, 1))
sheet.delete_rows(mrts_worksheet.delete_rows(1, 4))
sheet.delete_cols(1,1)
with open("C:/Users/example"+ sheet +".csv", "w", newline="") as file_handle:
csv_writer = csv.writer(file_handle)
for row in sheet.iter_rows():
csv_writer.writerow([cell.value for cell in row])
file_handle.close()
答:
0赞
moken
11/13/2023
#1
为了使您的代码示例在描述中提供的详细信息下工作,它需要更改为如下所示;
删除方法很好,从要删除的最后一行开始,一直移动到第 1 行。您的代码将删除不符合要求的第 72 到 171 行,即 72-150,因此将其更改为 .
注意:删除第 1 行将删除标题。delete_rows(72, 100)
delete_rows(72, 79)
“mrts_worksheet”部件已被移除。
我不知道这张纸的目的是什么,也不知道它应该如何删除其他工作表中的行。即使将值写入工作表循环中的单元格 B5 也似乎很浪费,因为您只需要执行一次,而不是对工作簿中的每个工作表执行一次,因为它不会更改。mrts_worksheet['B5'] = "Diff Label"
import openpyxl
import csv
workbook = openpyxl.load_workbook("data.xlsx")
worksheet = workbook.worksheets # List of Worksheet objects
print(worksheet)
for sheet in worksheet: # 'sheet' is a worksheet
sheet.delete_rows(72, 79) # Delete rows 72 - 150, start at row 72 and delete the next 79 rows
sheet.delete_rows(6, 1) # Delete row 6, start at row 6 and delete that row only
sheet.delete_rows(1, 4) # Delete rows 1 - 4, start at row 1 and delete the next 4 rows
sheet.delete_cols(1, 1) # Delete column 'A'
### Create csv file name using sheet name (title)
with open("example" + sheet.title + ".csv", "w", newline="") as file_handle:
csv_writer = csv.writer(file_handle)
for row in sheet.iter_rows():
csv_writer.writerow([cell.value for cell in row])
file_handle.close()
0赞
Dheeraj Malik
11/14/2023
#2
您可以使用 Spire.XLS for Python 包来操作 xls 或 xlsx 文件并将它们转换为 csv。
以下是安装软件包的命令:
pip install Spire.Xls
以下示例从 .xls 或 .xlsx 文件的每个工作表中删除特定行和列,然后将每个工作表另存为单独的 csv 文件:
from spire.xls import *
from spire.common import *
workbook = Workbook()
# Load a .xls file
# workbook.LoadFromFile("Input.xls")
# Load a .xlsx file
workbook.LoadFromFile("Input.xlsx")
for sheet in workbook.Worksheets:
# Remove rows 72-150
sheet.DeleteRow(72, 79)
# Remove row 6
sheet.DeleteRow(6, 1)
# Remove rows 1-4
sheet.DeleteRow(1, 4)
# Remove column 1
sheet.DeleteColumn(1, 1)
# Save each sheet to a csv
csv_name = sheet.Name + ".csv"
sheet.SaveToFile(csv_name, ",", Encoding.get_UTF8())
workbook.Dispose()
免责声明:我为开发此软件包的公司工作。
评论
mrts_worksheet
sheet.delete_rows(mrts_worksheet.delete_rows(72, 100))
worksheet = workbook.sheetnames