Запись в несколько строк в листе Excel с помощью pandas xlsxwriter - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь записать значения в таблицу Excel с помощью xlsxwriter.

При попытке записать данные во вторую строку данные перезаписываются в первую строку. Поскольку я новичок в писателе xlsx, я не могу понять, где выполнить итерацию.

import pandas as pd
from pandas import ExcelWriter


def outputInExcel(valueToExcel):
    with ExcelWriter('pandas.xlsx', mode='A', engine='xlsxwriter') as writer:
        # write operation perform
        valueToExcel.to_excel(writer,startrow=1, header=False)
        worksheet = writer.sheets['Sheet1']
        workbook = writer.book
        header_format = workbook.add_format({
            'bold': True,
            'text_wrap': True,
            'valign': 'top',
            'fg_color': '#D7E4BB',
            'border': 1})

        for row_num,col_num,value in enumerate(valueToExcel.columns.values):
            worksheet.write(0, col_num + 1, value, header_format)
        writer.save()


file = "Search.xlsx"#image  reference
df = pd.read_excel(file)
for index, row in df.iterrows():
    valueToExcel = pd.DataFrame({
        'Manager': [row['Manager']], 'Policy Name': [row['Policy Name']], 'Numbers': [row['Numbers'], 'Source IP': [row['Source']], 'Destination IP': [row['Destination']]
    })
    outputInExcel(valueToExcel)

Я ожидаю такого результата.

enter image description here

I am getting a output like this.

введите описание изображения здесь

1 Ответ

0 голосов
/ 02 августа 2020

Есть проблемы с вашим кодом; вы каждый раз переопределяете одну и ту же строку и перезапускаете модуль записи каждую строку, так что это не очень эффективно. Моя рекомендация - записать весь фрейм данных в один go:

writer = ExcelWriter('pandas.xlsx', mode='A', engine='xlsxwriter')
worksheet = writer.sheets['Sheet1']
workbook = writer.book
header_format = workbook.add_format({
  'bold': True,
  'text_wrap': True,
  'valign': 'top',
  'fg_color': '#D7E4BB',
  'border': 1
})
# write the header separately so you can format it
for col_num, value in enumerate(['Manager', 'Policy Name', 'Numbers', 'Source IP', 'Destination IP']):
  worksheet.write(0, col_num + 1, value, header_format)

df = pd.read_excel(file)
# if you only want specific columns
df = df[['Manager', 'Policy Name', 'Numbers', 'Source', 'Destination']]
df.to_excel(writer, sheet_name=name, index=False, header=False, startrow=1)
writer.save()

Я старался, чтобы он как можно больше соответствовал вашему коду, я просто удалил l oop и переместил код функции

...