Python xlrd и xlwt не добавляются к существующим xls - PullRequest
0 голосов
/ 18 декабря 2018

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

import xlwt
import xlrd
from xlutils.copy import copy


wb_in = xlrd.open_workbook('~/new.xls', 'r+')
sheet_name = wb_in.sheet_names()[0]
ws_in = wb_in.sheet_by_name(sheet_name)

wb_out = xlwt.Workbook()
ws_out = wb_out.add_sheet(sheet_name)   # Use the same sheet name


f = open('~/count.txt', 'r+')

data = f.readlines() # read all lines at once
for i in range(len(data)):
  row = data[i].split()  # This will return a line of string data, you may need to convert to other formats depending on your use case

  for j in range(len(row)):
    ws_out.write(i, j, row[j])  # Write to cell i, j

wb_out.save('~/new' + '.xls')
f.close()

Правильно получено имя листа.Но не добавляется.

count .txt:

Selissues  11
Genissues 68
Noissues  7
Otherissues  13
Total  99999
Pruning/OtherEfficiency .58064516129032258064
CSEfficiency .38888888888888888888

Хотите, чтобы Excel был похож:

enter image description here

1 Ответ

0 голосов
/ 18 декабря 2018

Ваш код имеет две проблемы.Во-первых, вы не копируете существующее содержимое wb_in в wb_out.Вы импортируете xlutils.copy, но не используете его.

Во-вторых, вы записываете данные, всегда начиная со строки 0.Это означает, что вы всегда будете перезаписывать то, что уже есть.

Следующее должно решить обе эти проблемы.Обратите внимание, что wb_out устанавливается на копию wb_in, и что при записи в ws_out номер строки смещается на ws_in.nrows, число строк, которые уже существовали в ws_in:

from xlrd import open_workbook
from xlutils.copy import copy

wb_in = open_workbook('~/new.xls', 'r+')
ws_in = wb_in.sheet_by_index(0)

wb_out = copy(wb_in)
ws_out = wb_out.get_sheet(0)

f = open('~/count.txt', 'r+')

data = f.readlines()

for i in range(len(data)):
    row = data[i].split()

    for j in range(len(row)):
        ws_out.write(ws_in.nrows + i, j, row[j].strip())

wb_out.save('~/new.xls')
f.close()
...