2016-11-30 4 views
2

Используя тестовый код Python ниже, я пытаюсь скопировать единственный рабочий лист в файле Excel (*.xls) в новый файл Excel с одним рабочим листом.Копирование только рабочего листа XLS, чтобы стать новым листом в новом XLS с использованием Python?

вход таблица выглядит следующим образом:

enter image description here

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") 

Если я запускаю код он показывает выход ниже, и создает новый файл Excel с листа с именем test1.

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!.

enter image description here

Использование Python 2.7.10, есть простой способ чтения лист из одного XLS, а затем записать его в виде электронной таблицы в другой файл XLS?

Я не хочу просто скопировать электронную таблицу и затем переименовать рабочий лист в новом, потому что как только я смогу заставить это работать, я хочу скопировать единственный рабочий лист в каждой из десятков электронных таблиц, чтобы стать листом того же имя в распределителе с десятком листов.

+0

Попробуйте заменить '.get_sheet (0)' на '.sheet_by_index (0)'. – Giordano

ответ

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") 
3

Попробуйте использовать 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: No suitable library found for xls

Смежные вопросы