Python - выравнивание правых чисел при преобразовании листа Excel в текстовый файл - PullRequest
0 голосов
/ 07 января 2020

Обновление: Так что я просто вернулся к Excel: преобразовал столбец D (количество) в число, а затем перешел к форматированию ячеек и вручную выбрал 2 десятичных знака, и все заработало, текстовая версия выглядела идеально выровнен. Однако мой вопрос заключается в том, как автоматически сохранить столбец, чтобы преобразовать его содержимое в число с двумя десятичными знаками. Я знаю, что возвращаюсь к своему первому вопросу, но я думаю, что это самый близкий вопрос к моей проблеме, о котором я только могу подумать.

Я использую python, чтобы создать лист Excel, который я позже преобразовал бы в текст файл. У меня есть конкретные c требования к ширине и выравниванию. Если оно немного изменилось, Ellucian (программное обеспечение) не сможет его прочитать. Сейчас я пытаюсь выровнять столбец сумма столбец по правому краю: D. Я использовал xlwt , чтобы выровнять его по правому краю. Казалось, он работал, пока я не преобразовал его в файл .prn, а затем снова выровнял по левому краю.

Найдите код ниже:

import pandas as pd
import xlwt

df = pd.read_excel("tms_report.xls", "Disbursement Detail Report")
workbook = xlwt.Workbook(encoding="ascii")
worksheet = workbook.add_sheet("Sheet", cell_overwrite_ok = False)

#Varibales: Width of the column, alignement
right_align = xlwt.easyxf("align: vert centre, horiz right")

def adjustement(data):
    x = len(data)
    del data[x - 1]
    return data

arrStudentID = adjustement(df['Student ID'])
arrStudentFirst = adjustement(df['Student First Name'])
arrStudentLast = adjustement(df['Student Last Name'])
arrAmount = adjustement(df['Payment Amount'])

worksheet.col(0).width = 256*10
worksheet.col(1).width = 256*17
worksheet.col(2).width = 256*18
worksheet.col(3).width = 256*8
i = 0
for studentID in arrStudentID:
    if len(studentID) < 7:
        studentID = "0" + studentID
    while len(studentID) >= 8:
            studentID = studentID[1:]
    worksheet.write(i, 0, studentID)
    i+=1

i = 0
for studentFirst in arrStudentFirst:
    worksheet.write(i, 1, studentFirst)
    i+=1

i = 0
for studentLast in arrStudentLast:
    worksheet.write(i, 2, studentLast)
    i+=1


#This is the part that I need to be a number or right aligned
i = 0
for amount in arrAmount:
    amount = '%.2f'%amount
    worksheet.write(i, 3, amount, right_align)
    i += 1

workbook.save("tms_import.xls")

Файл Excel, который я получаю, выглядит идеально так, как я хочу. Но когда я сохраняю его как файл .prn, правильное выравнивание столбца суммы нарушается.

Кроме того, это обновленный вопрос, поскольку я сначала подумал, что преобразование числа с плавающей точкой в ​​действительное число решит проблему. мой вопрос. Но благодаря ответам пользователей здесь я понял, что моя проблема, как указано выше. Я действительно ценю вашу помощь !!

...