2016-11-30 5 views
2

Mit dem folgenden Python-Testcode versuche ich das einzige Arbeitsblatt in einer Excel-Datei (*.xls) in eine neue Excel-Datei mit einem Arbeitsblatt zu kopieren.Kopieren nur Arbeitsblatt von XLS, um neues Arbeitsblatt in neuen XLS mit Python zu werden?

Die Eingabe-Tabelle wie folgt aussieht:

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

Wenn ich den Code ausführen es die Ausgabe unten zeigt und erstellt das neue Excel mit dem Arbeitsblatt mit dem Namen Test1-Datei.

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

Leider ist die Ausgabe, die die richtige Anzahl von Zellen geschrieben zu haben scheint hat alle nicht-numerischen Werte Zelle als #VALUE! geschrieben.

enter image description here

Mit Python 2.7.10 gibt es eine einfache Möglichkeit, das Arbeitsblatt von einem XLS lesen und schreiben sie dann als ein Arbeitsblatt in einer anderen XLS-Datei?

Ich möchte nicht einfach die Tabelle kopieren und dann das Arbeitsblatt in das neue umbenennen, denn sobald ich dies zum Laufen bringen kann, möchte ich das einzige Arbeitsblatt in jedem Dutzend Tabellenkalkulationen kopieren, um ein Arbeitsblatt zu werden Name in einem Spreadsheer mit einem Dutzend Arbeitsblättern.

+0

Versuchen Sie, '.get_sheet (0)' durch '.sheet_by_index (0)' zu ersetzen. – Giordano

Antwort

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

Versuchen Sie mit pyexcel. Es wird das Leben für das, was Sie versuchen, viel einfacher machen.

Basierend auf Ihrer endgültigen Anforderung zum Erstellen einer neuen Arbeitsmappe mit einem Blatt aus einem Dutzend anderer Arbeitsmappen, hier ein paar Code zu helfen.

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 ist ein Wörterbuch Zuordnung der Arbeitsmappe Sie wollen gegen ihren Bogen lesen.

Sie müssen möglicherweise das zusätzliche Plugin installieren, je nachdem, welchen Dateityp mit dem Sie arbeiten:

pip install pyexcel pyexcel-xls 

Wenn das nicht vorhanden ist, einen Fehler angezeigt, kann wie:

IOError: No suitable library found for xls

Verwandte Themen