Bagaimana cara menulis kerangka data nilai string ke file excel sebagai nilai numerik yang diformat?

Jan 05 2021

Pada dasarnya saya memiliki daftar nilai string yang dimaksudkan untuk diubah menjadi numerik dan dicetak ke lembar excel. Saya sudah dapat melakukannya tetapi saya ingin nilai-nilai itu dicetak sebagai "nilai nomor excel" . Inilah yang saya dapatkan:

writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')

listOfValues = ['3913375,45','126179,15','22324,72','26335,28','3699901,34']

df_values = pd.DataFrame({'TOTAL': listOfValues}).apply(pd.to_numeric)

df_values.to_excel(writer, sheet_name='test')

writer.save()

Hasil saya adalah:

Excel yang dihasilkan

Tetapi saya ingin itu dicetak sebagai nilai numerik yang dipisahkan oleh titik-titik agar lebih mudah disiapkan, seperti itu:

Apa yang ingin saya dapatkan sebagai hasilnya

(Solusi yang saya inginkan tidak dapat dicetak sebagai string di excel yang dihasilkan, itu harus berupa nilai numerik, seolah-olah kami menggunakan opsi "Format sebagai Angka (Shift + ctrl + 1)" di libreoffice calc).

(Saya menggunakan Python 3.8.5 dan LibreOffice Calc untuk pengujian tetapi hasilnya dimaksudkan untuk berfungsi di Excel 2016).

Mungkinkah itu? Terima kasih atas bantuan Anda, dan maaf atas bahasa Inggris saya!

Jawaban

DonLarry Jan 06 2021 at 07:11

Saya telah menemukan pertanyaan lain ini , ini berbeda, tetapi jawabannya sama menurut saya.

from openpyxl import load_workbook

wb = load_workbook('a.xlsx')
ws = wb[wb.sheetnames[0]]
cell11 = ws.cell(1, 1)
cell11.number_format = '#,##0.00'
wb.save('b.xlsx')
wb.close()

Ini berfungsi dengan format itu, tetapi sepertinya itu tidak berfungsi dengan '#.##0,00'format itu

DonLarry Jan 05 2021 at 21:55

Periksa ini https://xlsxwriter.readthedocs.io/working_with_pandas.html

Dimungkinkan untuk memformat data kolom non tanggal / tanggal waktu lainnya menggunakan set_column ()

Coba ubah kode contoh pemformatan dari ini:

format1 = workbook.add_format({'num_format': '#,##0.00'})

untuk ini:

format1 = workbook.add_format({'num_format': '#.##0,00'})