2017-06-01 5 views
0

Ich habe eine .xlsx-Datei mit 11 Arbeitsblättern und ich muss den Inhalt einer Textdatei (Tab-Delim, etwa 30 Spalten mit 100 Zeilen) ab Zeile 3 einfügen. Ich habe den folgenden Code ausprobiert, aber am Ende habe ich Fehler. (Unter Verwendung von bash/Linux)Textdatei in existierende xlsx mit Python einfügen

#!/usr/bin/env python 

import csv 
from openpyxl.reader.excel import load_workbook 
from xlrd import open_workbook 
from xlutils import copy as xl_copy 


with open('S12_final.txt') as tab_file: #open tab text file 
    tab_reader = csv.reader(tab_file, delimiter='\t') 
    xls_readable_book = load_workbook('S12.xlsx') #load workbook 
    xls_writeable_book = xl_copy.copy(xls_readable_book) 
    xls_writeable_sheet = xls_writeable_book.get_sheet_by_name('Filtered') #write data on this sheet 
    for row_index, row in enumerate(tab_reader): 
     xls_writeable_sheet.write(row_index, 0, row[0]) 
     xls_writeable_sheet.write(row_index, 1, row[1]) 
    xls_writeable_book.save('S12.xlsx') #save excel file 

Fehler:

> Traceback (most recent call last): File "./tab2excel_a.py", line 23, 
> in <module> 
>  xls_writeable_book = xl_copy.copy(xls_readable_book) File "/usr/local/lib/python2.7/dist-packages/xlutils-1.6.0-py2.7.egg/xlutils/copy.py", 
> line 19, in copy 
>  w File "/usr/local/lib/python2.7/dist-packages/xlutils-1.6.0-py2.7.egg/xlutils/filter.py", 
> line 937, in process 
>  reader(chain[0]) File "/usr/local/lib/python2.7/dist-packages/xlutils-1.6.0-py2.7.egg/xlutils/filter.py", 
> line 61, in __call__ 
>  filter.workbook(workbook,filename) File "/usr/local/lib/python2.7/dist-packages/xlutils-1.6.0-py2.7.egg/xlutils/filter.py", 
> line 287, in workbook 
>  self.wtbook.dates_1904 = rdbook.datemode AttributeError: 'Workbook' object has no attribute 'datemode' 

Irgendwelche Vorschläge?

Antwort

0

Es scheint (und keineswegs ich bin gut informiert über diese speziellen Bibliotheken), die Sie zur Eingabe versuchen, ein openpyxl Objekt in ein xlutils Verfahren in diese Richtung:

xls_readable_book = load_workbook('S12.xlsx') #load workbook 
xls_writeable_book = xl_copy.copy(xls_readable_book) 

So beklagt sich der Dolmetscher, dass diese "unbekanntes" Objekt hat kein Attribut datemode. mit xlrdopen_workbook Methode als so versuchen, da es ein Book Objekt zurückzukehren scheint, die nach der Dokumentation, mit xlrd.copy Methoden kompatibel ist:

xls_readable_book = open_workbook('S12.xlsx') #load workbook 
xls_writeable_book = xl_copy.copy(xls_readable_book) 
+0

Hallo, das versucht einen weiteren Stapel von Fehlern 'Datei' /usr/local/lib/python2.7/dist-packages/xlwt-0.7.5-py2.7.egg/xlwt/Row.py", Zeile 42, in __init__ raise ValueError ("Zeilenindex (% r) kein int im Bereich (65536)"% rowx) ValueError: Zeilenindex (65536) kein int im Bereich (65536) ' ' – nbn

+0

Was ist die erste Zeile? dieser Rückverfolgung? – armatita

+0

'Traceback (letzter Aufruf zuletzt): Datei" ./tab2excel_a.py ", Zeile 24, in xls_writeable_book = xl_copy.copy (xls_readable_book)' Meine Datei ist eine xlsx-Datei, nicht sicher, ob das hier einen Unterschied macht – nbn

0

Betrachten Sie dieses openpyxl Beispiel:

from openpyxl.workbook.workbook import Workbook # as _Workbook 
import csv 

wb = Workbook() 
wb.create_sheet('Filtered') 
ws = wb['Filtered'] 

with open('test/S12_final.csv') as tab_file: 
    tab_reader = csv.reader(tab_file, delimiter='\t') 

    # Skipt first 2 Lines 
    [next(tab_reader) for skip in range(2)] 

    # Append list(rowData) after Sheets last accessed Row 
    for rowData in tab_reader: 
     ws.append(rowData) 

wb.save('test/S12.xlsx') 

Getestet mit Python: 3.4.2 - openpyxl: 2.4.1 - LibreOffice: 4.3.3.2