Openpyxl number_format не изменяет значения ячеек, полученные из формулы - PullRequest
0 голосов
/ 02 октября 2018

Openpyxl 'number_format' не изменяет значения ячеек, полученные из формул, поскольку результирующие значения имеют тип String в Python.

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

ПРИМЕЧАНИЕ. Я уже видел ту же проблему, решенную здесь: https://bitbucket.org/openpyxl/openpyxl/issues/376/number-format-not-refreshing-cells

Я согласен с первоначальным ответом: проблема в том, что Excel не хранит полученные данные.из формул в своем кеше.Данные хранятся в виде строки.Я просто не уверен, как изменить данные из String на int, как только они будут прочитаны Openpyxl:

import csv
import openpyxl
from openpyxl.styles import Alignment

wb = openpyxl.Workbook()
ws = wb.active
wb.active
f = open(r"...\....\...\automated.csv")
reader = csv.reader(f, delimiter=',')

for row in reader:
    ws.append(row)
f.close()
wb.save(r"...\...\...\...\automated.xlsx")

sheet=wb.active
wb.guess_types = True
sheet['F1'] = '***** Time Start'
rowNumber = 2  # Start reading from row 3
for i, cellObj in enumerate(ws, 3):  # 3 is the starting row to write on
    rowNumber += 1
    cellObj = ws.cell(row=i, column=6)  # 6 is the column to start writing on
    cellObj.value = '=OFFSET(B6,E{0},0)'.format(str(rowNumber).format(i))
    cellObj.number_format = 'dd mmm yyyy hh:mm:ss.000 "UTCG"'
    if i == 25:
        break
ws = wb.active

wb.save(r"...\...\...\...\automated.xlsx")

Я знаю, что код работает, потому что значения, хранящиеся как '0', изменяются с помощьюкод идеально (см. выделение), потому что они НЕ используют формулу для этой ячейки:

Excel Output

ПРИМЕЧАНИЕ. Формат number_format применяется ко ВСЕМ ячейкам (Я проверил это для каждой строки):

result of number_format in output

Но поскольку ячейка является строкой, она не отражает изменения.

Я довольно новичок в Python и попытался преобразовать cellObj.value в int, но это не сработало.

Буду признателен за любую помощь или совет, как это сделать.Я копался в переполнении стека за последние 4 дня и не нашел решения этой проблемы.Спасибо!

edit: я использую последнюю версию openpyxl 2.5.3 и пробовал это: openpyxl python - при записи csv в excel выдает «число в формате текста» , но это не сработало - всемои значения превратились в ноль:

Output Result Null

1 Ответ

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

Вам нужно будет преобразовать строки в объекты даты и времени, используя метод strptime.

...