无法使用 python 将多个 .xls 文件放入多张 .xls 文件中

Posted

技术标签:

【中文标题】无法使用 python 将多个 .xls 文件放入多张 .xls 文件中【英文标题】:Can't get multiple .xls file into multiple sheets of a .xls file with python 【发布时间】:2018-02-01 15:38:40 【问题描述】:

我正在尝试找到一种方法将多个 .xls 文件放入一个带有单独工作表的 .xls 文件中。 (所以 1.xls 将在 Sheet1 下,等等) 这是我的代码

    mypath = raw_input("Please enter the directory path for the input files: ")

from os import listdir
from os.path import isfile, join
textfiles = [ join(mypath,f) for f in listdir(mypath) if isfile(join(mypath,f)) and '.txt' in  f]

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False        

import xlwt
import xlrd

style = xlwt.XFStyle()
style.num_format_str = '#,###0.00'  

for textfile in textfiles:
    f = open(textfile, 'r+')
    row_list = []
    for row in f:
        row_list.append(row.split('\t'))
    column_list = zip(*row_list)
    workbook = xlwt.Workbook()
    worksheet = workbook.add_sheet('Sheet1')
    i = 0
    for column in column_list:
        for item in range(len(column)):
            value = column[item].strip()
            if is_number(value):
                worksheet.write(item, i, float(value), style=style)
            else:
                worksheet.write(item, i, value)
        i+=1
    workbook.save(textfile.replace('.txt', '.xls'))

import glob, os
import pandas as pd

writer = pd.ExcelWriter('C:\Users\xxx\Desktop\forpythonscript\minonna.xls')

i=1
for xlsfile in glob.glob(os.path.abspath('C:\Users\xxx\Desktop\forpythonscript\*.xls')):
    df = pd.read_excel(xlsfile)
    df.to_excel(writer, 'sheet%s' % i)
    i +=1

writer.save()       

这是运行到 anaconda 时的错误。

Traceback (most recent call last):

文件“C:\Users\xxx\Desktop\provaimport.py”,第 51 行,在 writer.save() 文件“C:\Users\xxx\Anaconda2\lib\site-packages\pandas\io\excel.py”,第 1423 行,保存 返回 self.book.save(self.path) 文件“C:\Users\xxx\Anaconda2\lib\site-packages\xlwt\Workbook.py”,第 710 行,保存 doc.save(filename_or_stream, self.get_biff_data()) 文件“C:\Users\xxx\Anaconda2\lib\site-packages\xlwt\Workbook.py”,第 680 行,在 get_biff_data self.__worksheets[self.__active_sheet].selected = True IndexError: 列表索引超出范围

【问题讨论】:

【参考方案1】:

我无法发表评论,但我认为这可能导致两个问题。

    文件夹中保存的工作簿是否只有一个工作表?通常使用 read_excel,您还可以选择要读取的选项卡名称。

    你也试过设置如下

df.to_excel(writer, 'sheet%s' % i, index=False)

【讨论】:

添加了 index=False 您能解释一下如何选择要读取的标签名称吗? pd.read_excel(FileToRead, 'Sheet1', header=0) 其中Sheet1 = 工作表名称,header = 0 表示有标题(第一行是列名) 还是不行。我的 .xls 文件由一张纸制成,因此 Sheet1 是默认名称。我的脚本现在可以创建一个 .xlsx 文件,但仍然无法在其上写入内容。

以上是关于无法使用 python 将多个 .xls 文件放入多张 .xls 文件中的主要内容,如果未能解决你的问题,请参考以下文章

xlrd 库不适用于 xlsx 文件。使用 python 将 xlsx 转换为 xls 的任何方法?

将多个 .xls 文件添加到单个 .xls 文件中,使用文件名命名选项卡

将多个.xls文件添加到单个.xls文件中,使用文件名命名选项卡

如何将多个 xls 文件中的 xls 数据加载到 hive 中?

Python:Pandas read_excel 无法打开 .xls 文件,不支持 xlrd

如何批处理将多个文件夹下的excel文件(xls,xlsx,csv等)合并成一个文件?