首页 > 解决方案 > python:将excel转换为csv

问题描述

我有几行代码应该将我当前工作目录中的大量 excel 电子表格转换为csv文件。

不幸的是,在运行此代码后,我在第 21 行出现错误。什么可能导致此错误?提前致谢。

python
import os
import csv
import openpyxl

for spreadsheet in os.listdir('.'):
    if spreadsheet.endswith('.xlsx'):
        wb = openpyxl.load_workbook(spreadsheet)
        for sheet_name in wb.get_sheet_names():
            sheet = wb.get_sheet_by_name(sheet_name)
            csv_file = open(sheet_name + '.csv', 'w', newline='')
            csv_writer = csv.writer(csv_file)
            for row_num in range(1, sheet.max_row + 1):
                row_data = []
                for col_num in range(1, sheet.max_column + 1):
                    row_data.append(sheet.cell(row=row_num, column=col_num).value)
                for row in row_data:
                    csv_writer.writerow(row)
            csv_file.close()

我希望有转换的csv文件。下面是我得到的。

C:\Users\User\Anaconda3\lib\site-packages\ipykernel_launcher.py:10:DeprecationWarning:调用已弃用的函数 get_sheet_names(使用 wb.sheetnames)。

在我们加载东西时删除CWDfrom 。sys.path

C:\Users\User\Anaconda3\lib\site-packages\ipykernel_launcher.py:11: DeprecationWarning: Call to deprecated function get_sheet_by_name (使用 wb[sheetname])。

这是由InteractiveShellApp.init_path()

Error  Traceback (most recent call last) <ipython-input-29-1b50f926f2e2> in <module>() 
     19 
     20                 for row in row_data:
---> 21                     csv_writer.writerow(row)
     22             csv_file.close()
Error: iterable expected, not int

标签: python-3.xcsvspreadsheet

解决方案


考虑用以下内容替换你的最后几行:

for row_num in range(1, sheet.max_row + 1):
    row_data = []
    for col_num in range(1, sheet.max_column + 1):
        row_data.append(sheet.cell(row=row_num, column=col_num).value)
    csv_writer.writerow(row_data)
csv_file.close()

当你这样做时for row in row_data:,你实际上是在迭代单个值(它们是整数)


推荐阅读