Python 3 xlutils + xlrd + xlwt - PullRequest
       97

Python 3 xlutils + xlrd + xlwt

0 голосов
/ 19 октября 2018

Я борюсь с редактированием существующей книги xls с помощью xlrd / xlwt / xlutils. Я могу изменить значения в книге xlrd, но мне нужно записать их в существующую книгу.Мой код не работает, я знаю, что алгоритм работает правильно, но код не работает.

  rb = open_workbook(filename)
#set active sheet
rs = rb.sheet_by_index(0)
#make instance for xlsutils
wb = copy(rb)
ws = wb.get_sheet(0)

rows = rs.nrows
cols = rs.ncols
#iterate and prepare format for SQL db tables
for row_idx in range (0,rows):
    for col_idx in range (0,cols):
        cell=rs.cell(row_idx,col_idx)
        clval = cell.value
        cltp = cell.ctype
        if cltp == xlrd.XL_CELL_BLANK:
           clval ="xy"
           ws.write(row_idx,col_idx,"xy")
        elif cltp == xlrd.XLDateError:
            date_format = XFStyle()
            date_format.num_format_str = 'dd/MM/yyyy'
            clval = '01/01/2018'
            ws.write(row_idx,col_idx, '01/01/2018', date_format)
        elif cltp == xlrd.XL_CELL_EMPTY:
            clval="XYU"
            ws.write(row_idx,col_idx,"xy")
        elif cltp == xlrd.XL_CELL_NUMBER:
            if clval < 0:
             clval=0
             ws.write(row_idx, col_idx,0)
        elif cltp == xlrd.XL_CELL_TEXT:
             clval = ftfy.fix_text(clval)
             ws.write(row_idx,col_idx, ftfy.fix_text(clval))

        elif clval == -693594:
             date_format = XFStyle()
             date_format.num_format_str = 'dd/MM/yyyy'
             clval='01/01/2018'
             ws.write(row_idx, col_idx,'01/01/2018',date_format)
             #print (row_idx,col_idx)
        print(clval)
        save(wb,'abbcards_2.xls')

Output:
 File "D:/rs_al/IdeaProjects/ExcelToSQL/PyXLSSQL/XLStoSQL.py", line 69, in 
 xls_wrk
save(wb,'abbcards_2.xls')
File "C:\Python\lib\site-packages\xlutils\save.py", line 24, in save
StreamWriter(stream)
File "C:\Python\lib\site-packages\xlutils\filter.py", line 941, in process
reader(chain[0])
File "C:\Python\lib\site-packages\xlutils\filter.py", line 65, in __call__
filter.workbook(workbook,filename)
File "C:\Python\lib\site-packages\xlutils\filter.py", line 291, in workbook
self.wtbook.dates_1904 = rdbook.datemode
AttributeError: 'Workbook' object has no attribute 'datemode'

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

Я не могу понять, что на самом деле делает копия из xlutils.Это делает другой объект?Если да, то как использовать xlrd + xlwt для записи?Я обнаружил, что панды нельзя использовать, потому что мне нужно точно знать тип ячейки, чтобы изменить значение там.

В Java я делал то же самое с одним пакетом, где были методы для чтения / записи / сохранения втот же объект.

1 Ответ

0 голосов
/ 23 октября 2018

Единственный способ работы:

  1. Открыть книгу с помощью xlrd
  2. Повторять и получать значения ячеек
  3. Создать новую книгу с помощью xlwt

Через итерацию скопируйте значения ячеек

Для дат создайте правильный стиль для Excel дд / мм / гггг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...