OpenPyXL - numeri c формат даты Excel - PullRequest
0 голосов
/ 08 мая 2020

Я работаю в LabVIEW 2018 над заменой ВП автоматизации Excel COM узлом Call Python, используя библиотеки OpenPyXL 3.0.3 и Python 3.8.x для чтения и извлечения значения диапазона ячеек из указанный рабочий лист и указанную книгу. У меня есть несколько тестовых примеров, которые работают хорошо; Основное различие между COM и OpenPyXL, с которым я сталкиваюсь, - это обработка ячеек с отметками даты. отформатируйте ячейку или столбец. Мой внутренний код LabVIEW ожидает этот формат и имеет необходимый код форматирования для преобразования из этого формата в формат даты эпохи LabVIEW.

С OpenPyXL всегда кажется, что преобразование этих ячеек происходит в краткий формат даты системы. Есть ли способ получить доступ к этому числовому значению c через OpenPyXL?

Моя функция:

def GetXLSXWorksheetCellsV2(XLSXfile, XLSXsheet, minRow, minCol, maxRow, maxCol):
    from openpyxl import load_workbook
    wb = load_workbook(XLSXfile,False)
    ws = wb[XLSXsheet]
    def iter_rows(wsht):
        conv = lambda i : i or ''
        for wcol in wsht.iter_rows(minCol, maxCol, minRow, maxRow):
            yield tuple(str(conv(wcell.value)) for wcell in wcol)
    tupleList = tuple(iter_rows(ws))
    finalList = [list(tupleElem) for tupleElem in tupleList]
    wb.close()  
    return finalList

(Я конвертирую кортеж кортежей в список списков, потому что LabVIEW преобразует кортежи в кластеры и преобразует списки в массивы; 2D-массив намного проще, чем кластер кластеров!)

EDIT: потенциальный обходной путь, найденный в документации (касающийся закладки производительности ), не работает.

Одно из основных различий между библиотеками заключается в том, что режим openpyxl только для чтения открывает книгу почти сразу, что делает ее пригодной для нескольких процессов, это также значительно сокращает использование памяти. xlrd также не выполняет автоматическое преобразование даты и времени в Python datetimes , хотя делает соответствующие аннотации ячеек, но выполнение этого в клиентском коде значительно снижает производительность.

Рефакторинг load_workbook команда, чтобы сделать read_only True:

wb = load_workbook(XLSXfile, True, False, True, True)

по-прежнему дает данные datetime в результатах (а не значения эпохи Excel).

EDIT: Duh. xlrd - это отдельный продукт, а не только для чтения.

...