使用openpyxl写下下一个单元格

时间:2020-02-14 19:43:47

标签: openpyxl

enter image description here

我正在使用python从api获取数据,试图获取进程,主机名,进程的开始时间,用户名,ip地址,域和每个连接的时间戳。对于需要向下移动每一行的以下列,每个过程可以有多个结果。发生的事情是,所有内容都将被覆盖而被写入行2。这是我的剧本。

wb = Workbook()
ws1 = wb.create_sheet("Sheet_A")
ws1.title = "Results"
ws1['A1'] = "Process"
ws1['B1'] = "Host Name"
ws1['C1'] = "Process Time"
ws1['D1'] = "User Name"
ws1['E1'] = "Domain"
ws1['F1'] = "Netconn Time"

c = CbResponseAPI()

rows = 1

base_query = c.select(Process).where('start:-500m (hostname:1 OR hostname:2 OR hostname:3 OR hostname:4) netconn_count:[1 TO *] -ipaddr:192.168.0.0/16 -ipaddr:10.0.0.0/8 -ipaddr:172.16.0.0/12 -ipaddr:127.0.0.1')

for proc in base_query:
        # print proc
        ws1['A2'] = proc.process_name
        ws1['B2'] = proc.hostname
        ws1['C2'] = proc.start
        ws1['D2'] = proc.username
        rows+=1
        for netconn in proc.netconns:
            ws1['E2'] = netconn.domain
            ws1['F2'] = netconn.timestamp
            ws1['G2'] = netconn.remote_ip
            rows+=1

wb.save('Rav.xlsx')

This is the end result of the script just one row, I should have thousands

这是我的编辑

for i, proc in enumerate(base_query):
        # print proc
        ws1[f'A{i+2}'] = proc.process_name
        ws1[f'B{i+2}'] = proc.hostname
        ws1[f'C{i+2}'] = proc.start
        ws1[f'D{i+2}'] = proc.username
        rows+=1
        for netconn in proc.netconns:
            ws1[f'E{i+2}'] = netconn.domain
            ws1[f'F{i+2}'] = netconn.timestamp
            ws1[f'G{i+2}'] = netconn.remote_ip
            rows+=1

这是print(proc)和print(netconn)的输出

process_md5          : f8d0c92070e59a059a889d5e269c0da9
sensor_id            : 656
filtering_known_dlls : False
modload_count        : 45
parent_unique_id     : 00000290-0000-023c-01d5-e25a6a09eddc-000000000001
cmdline              : C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe
last_update          : 2020-02-17 14:48:26.878000
id                   : 00000290-0000-0760-01d5-e25a77d2e409
parent_name          : services.exe
group                : default group
parent_id            : 00000290-0000-023c-01d5-e25a6a09eddc
hostname             : 
filemod_count        : 0
start                : 2020-02-13 10:43:46.254000
comms_ip             : 0.0.0.0
regmod_count         : 5
interface_ip         : 10.140.51.10
process_pid          : 1888
username             : SYSTEM
process_sha256       : d40478a82bb2993f39a3ed6066cd0599be37ff9a0898636a680926fe145c64d6
terminated           : False
emet_config          :
process_name         : microsoft.activedirectory.webservices.exe
emet_count           : 0
last_server_update   : 2020-02-17 14:49:19.877000
path                 : c:\windows\adws\microsoft.activedirectory.webservices.exe
netconn_count        : 12008
parent_pid           : 572
crossproc_count      : 11
segment_id           : 1581950959796
host_type            : domain_controller
processblock_count   : 0
os_type              : windows
childproc_count      : 0
unique_id            : 00000290-0000-0760-01d5-e25a77d2e409-017053a000b4
Cb Network Connection event:
timestamp            : 2020-02-17 14:44:26.844000
domain               :
remote_ip            : ::1
remote_port          : 389
proto                : IPPROTO_TCP
direction            : Outbound
local_ip             : ::1
local_port           : 52995
proxy_ip             : 0.0.0.0
proxy_port           : 0

1 个答案:

答案 0 :(得分:0)

您只需要enumerate for循环来给自己一个计数器,进入下一行。然后将2加到i,因为您是从row 2开始的,而i将从0开始。

for i, proc in enumerate(base_query):
        # print proc
        ws1[f'A{i+2}'] = proc.process_name
        ws1[f'B{i+2}'] = proc.hostname
        ws1[f'C{i+2}'] = proc.start
        ws1[f'D{i+2}'] = proc.username
        for netconn in proc.netconns:
            ws1[f'E{i+2}'] = netconn.domain
            ws1[f'F{i+2}'] = netconn.timestamp
            ws1[f'G{i+2}'] = netconn.remote_ip

wb.save('Rav.xlsx')

这是我的工作示例:

import openpyxl
from openpyxl import Workbook

wb = Workbook()
ws1 = wb.create_sheet("Sheet_A")
ws1.title = "Results"
ws1['A1'] = "Process"
ws1['B1'] = "Host Name"
ws1['C1'] = "Process Time"
ws1['D1'] = "User Name"
ws1['E1'] = "Domain"
ws1['F1'] = "Netconn Time"


loop = [['process_name', 'hostname'],['process_name', 'hostname'],['process_name', 'hostname'],]

for i, proc in enumerate(loop):
        # print proc
        ws1[f'A{i+2}'] = proc[0]
        ws1[f'B{i+2}'] = proc[1]

wb.save('Rav.xlsx')

输出

Excel Output