Изменение формата ячеек в python 2.7 с помощью xlsxwriter или xlwt

Я все еще относительно новичок в python и испытываю трудности с небольшим проектом. Я преобразовываю файл csv в файл xls, который я выполнил, и теперь я хочу выполнить некоторые вычисления для некоторых частей нового файла xls. Все значения хранятся в виде текста, я пытаюсь преобразовать ячейки с числами в числа.

Из моего чтения вы не можете изменить тип ячейки, не удалив данные, хранящиеся в ячейке, с помощью xlsxwriter, есть ли способ отформатировать ячейки перед записью данных? Я не нашел способа преобразовать тип ячейки с помощью xlwt.

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

Моя простая программа просто копирует файл csv и создает файл xls, если есть способ отформатировать ячейки по мере их записи, это здорово, если нет, я знаю точные ячейки, в которые будут поступать данные, поэтому я могу их отформатировать. до написания.

import csv, xlsxwriter
def makeXls(path, fileName):
    wb = xlsxwriter.Workbook(fileName+'.xls')
    ws = wb.add_worksheet('Report')
    with open(path, "rb") as f:
        reader = csv.reader((line.replace('\0','') for line in f), delimiter=';')
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r,c,val)

person Jeremy_L    schedule 06.03.2018    source источник


Ответы (2)


Пример, который я разместил ниже, работает с вашим существующим кодом, чтобы показать, как вы можете использовать условное форматирование в Excel через модуль xlsxwriter (когда значение больше или равно нулю в этом примере, цвет шрифта устанавливается на темно-красный) .

Я создал небольшой файл test.csv, который записывается/читается в/из текущего каталога и используется для создания test.xls. Также обратите внимание, что я удалил «rb» для чтения в файле .csv, который я сделал.

Дополнительную информацию о работе с условными форматами в модуле Xlsxwriter можно найти здесь

import pandas as pd
import numpy as np
import csv
import xlsxwriter

# This creates a sample .csv file used in my example
df = pd.DataFrame(np.random.randn(10, 3), columns=list('ABC'))
df.to_csv('test.csv' , sep = ';')

def makeXls(path, fileName):
    wb = xlsxwriter.Workbook(fileName+'.xls', {'strings_to_numbers':  True})
    format_1 = wb.add_format({'num_format': '#.########'})
    format_2 = wb.add_format({'num_format': '#.########', 'font_color' : '#9C0006'})
    ws = wb.add_worksheet('Report')
    with open(path) as f:
        reader = csv.reader((line.replace('\0','') for line in f), delimiter=';')
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r,c, val, format_1)
    ws.conditional_format('B2:K50', {'type':'cell', 'criteria': '>=', 'value': 0, 'format':   format_2})
    ws.set_column(0, 3, 15)


makeXls(path = 'test.csv', fileName = 'test')

Ожидаемый результат:

Ожидается test.xls

Для достижения наилучших результатов с модулем xlsxwriter я бы рекомендовал использовать формат файла .xlsx, а не .xls.

person patrickjlong1    schedule 06.03.2018
comment
Работал, как и ожидалось, формат немного изменился, что может понравиться, а может и не понравиться. Я увижу, как только все это соберется. Спасибо еще раз. - person Jeremy_L; 08.03.2018

Все значения хранятся в виде текста, я пытаюсь преобразовать ячейки с числами в числа.

Вы можете использовать параметр XlsxWriter strings_to_numbers конструктора:

wb = xlsxwriter.Workbook(fileName + '.xlsx', {'strings_to_numbers': True})

Из документов XlsxWriter:

strings_to_numbers: включите метод worksheet.write() для преобразования строк в числа, где это возможно, с помощью float(), чтобы избежать предупреждения Excel о «Числах, сохраненных как текст».

person jmcnamara    schedule 07.03.2018
comment
Работал как шарм. Сохранено исходное форматирование, которое может помочь в конце. Спасибо! - person Jeremy_L; 08.03.2018