使用下面的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文件中?
我不想简单地复制电子表格,然后在新工作表中重命名工作表,因为一旦我能够将其工作,我想复制十几个电子表格中的每一个的唯一工作表,以成为同名的工作表在一个包含十几个工作表的传播器中。
答案 0 :(得分:4)
尝试使用pyexcel
。它会让你的生活变得更容易。
根据您使用十几个其他工作簿中的一个工作表构建新工作簿的最终要求,这里有一些代码可以提供帮助。
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
是您希望在其工作表中阅读的工作簿的字典映射。
您可能需要根据您正在使用的文件类型安装其他插件:
pip install pyexcel pyexcel-xls
如果不存在,您可能会看到如下错误:
IOError:找不到适合xls
的库
答案 1 :(得分:3)
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")