У меня есть расчет, который создает электронную таблицу Excel, используя xlsxwriter, чтобы показать результаты. Было бы полезно отсортировать таблицу, узнав результаты.

Одним из решений было бы создание отдельной структуры данных в python, сортировка структуры данных и последующее использование xlsx, но это не очень элегантно, требует большой обработки типов данных.

Я не могу найти способ сортировки структур в модуле xlsx. Кто-нибудь может помочь с внутренней структурой данных этого модуля? Можно ли это отсортировать перед записью на диск. Другое решение - открыть файл, отсортировать содержимое и снова закрыть?

    import xlsxwriter
    workbook=xlsxwriter("Trial.xlsx")
    worksheet=workbook.add_worksheet("first")
    worksheet.write_number(0,1,2)
    worksheet.write_number(0,2,1)

    ...worksheet.sort
1
Okapi575 24 Апр 2017 в 12:26

2 ответа

Лучший ответ

Кто-нибудь может помочь с внутренней структурой данных этого модуля? Можно ли это отсортировать перед записью на диск.

Я являюсь автором модуля, и короткий ответ заключается в том, что это не может или не должно быть сделано.

Можно отсортировать данные листа в Excel во время выполнения, но это не является частью спецификации файла, поэтому это невозможно сделать с помощью XlsxWriter.

Одним из решений было бы создание отдельной структуры данных в python, сортировка структуры данных и последующее использование xlsx, но это не очень элегантно, требует большой обработки типов данных.

Это звучит как разумное решение для меня.

6
jmcnamara 24 Апр 2017 в 09:52

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

В следующем примере будет записан столбец чисел, не отсортированных:

import xlsxwriter

with xlsxwriter.Workbook("Trial.xlsx") as workbook:
    worksheet = workbook.add_worksheet("first")

    data = [5, 2, 7, 3, 8, 1]

    for rowy, value in enumerate(data):
        worksheet.write_number(rowy, 0, value)      # use column 0

Но если вы сначала отсортируете данные следующим образом:

import xlsxwriter

with xlsxwriter.Workbook("Trial.xlsx") as workbook:
    worksheet = workbook.add_worksheet("first")

    data = sorted([5, 2, 7, 3, 8, 1])

    for rowy, value in enumerate(data):
        worksheet.write_number(rowy, 0, value)      # use column 0

Вы бы получили что-то вроде:

Sorted data in a single column

3
Martin Evans 25 Окт 2019 в 14:58
43584362