使用 Python 仅复制 XLS 的工作表以成为新 XLS 中的新工作表?

Copying only worksheet of XLS to become new worksheet in new XLS using Python?

使用下面的 Python 测试代码,我试图将 Excel (*.xls) 文件中唯一的工作表复制到一个新的 Excel 文件中,其中包含一个工作表.

输入电子表格如下所示:

from copy import deepcopy
from xlrd import open_workbook
from xlutils.copy import copy as copy
from xlwt import Workbook

rb = open_workbook(r"C:\Temp\test1.xls",formatting_info=True)
wb = copy(rb)
new_book = Workbook()
r_sheet = rb.sheet_by_index(0)

sheets = []
w_sheet = deepcopy(wb.get_sheet(0))
w_sheet.set_name("test1")

for row_index in range(0, r_sheet.nrows):
    for col_index in range(0, r_sheet.ncols):
        cell_value = r_sheet.cell(row_index, col_index).value
        print cell_value
        w_sheet.write(row_index, col_index, cell_value)

sheets.append(w_sheet)
new_book._Workbook__worksheets = sheets

new_book.save(r"C:\Temp\test2.xls")

如果我 运行 代码它会显示下面的输出并使用名为 test1 的工作表创建新的 Excel 文件。

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
Col1
Col2
Col3
a
1.0
X
b
2.0
Y
c
3.0
Z
>>> 

不幸的是,输出似乎写入了正确数量的单元格,但所有非数字单元格值都写为 #VALUE!

使用 Python 2.7.10,有没有一种简单的方法可以从一个 XLS 文件中读取工作表,然后将其作为工作表写入另一个 XLS 文件?

我不想简单地复制电子表格,然后在新的电子表格中重命名工作表,因为一旦我可以让它工作,我想复制十几个电子表格中每一个的唯一工作表,成为在包含十几个工作表的电子表格中使用相同的名称。

尝试使用 pyexcel。这将使您尝试做的事情变得更加轻松。

根据您使用来自许多其他工作簿的一个 sheet 构建新工作簿的最终要求,这里有一些代码可以提供帮助。

import pyexcel as pe

outputbook = "merged.xls"
inputbooks = {
  "test1.xls" : "Sheet1",
  "test2.xls" : "Sheet1",
  "test3.xls" : "Sheet1",
}

merged_book = None
for book, sheet in inputbooks.iteritems():
  wb = pe.get_book(file_name=book)
  if merged_book is None:
    merged_book = wb[sheet]
  else:
    merged_book = merged_book + wb[sheet]

merged_book.save_as(outputbook)

inputbooks 是您希望阅读的工作簿与其 sheet.

的字典映射

您可能需要安装附加插件,具体取决于您使用的文件类型:

pip install pyexcel pyexcel-xls

如果不存在,您可能会看到如下错误:

IOError: No suitable library found for xls

from xlrd import open_workbook
from xlutils.copy import copy

# Read the workbook
rb = open_workbook("input.xls", formatting_info=True)

# Copy into a new workbook
wb = copy(rb)

# Rename to 'test1' as the original post asked for 
ws = wb.get_sheet(0)
ws.name = 'test1'

# Save the new workbook
wb.save("output.xls")