如何在Excel工作表中循环

2024-06-10 14:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图学习Python,并试图从excel文件中给我的映射生成一个.sql文件。但我可以浏览第一页的行和列,但无法前进到下一页。我使用的是python3.7。每张纸将包含两列

这是excel工作表列的外观:

TABLE1                      TABLE2
-----------------------------------
VERSION                      NULL
VALID_FROM                   USG_DT
USERNAME                     MIG
UD_GEPART_ID                 NULL
UD_SEPART_ID                 NULL

一个工作簿中可以有多个工作表。你知道吗

下面是我到目前为止所做的尝试。请有人指出我在代码中出错的地方,因为我无法进入下一页:

wb = xl.load_workbook("C:\\New folder\\MAPPING.xlsx")
ws = wb.sheetnames

sheets = [wb.sheetnames]
statement_a = "INSERT /*+ APPEND */ INTO "
statement_b = "SELECT /*+ PARALLEL(64) */ "


for i, ws in enumerate(sheets):
    stat_c = statement_b 
    stat_d = statement_b + ws[1+i] + " ( "

for sh in wb.worksheets:
    sh = wb.active 
    for col_cells in sh.iter_cols(min_row= 2, min_col= 1, max_col=2):
        for cell in col_cells:
            stat_c = stat_c + str(cell.value) + ", "
    stat_c = stat_c.rstrip(", ")  +" FROM " + ws[1+i] + ";"
    print(stat_c)
    print("-------------------------------------------------")
    for col_cellr in sh.iter_cols(max_row = 1,min_col= 2, max_col =2):
        for cell in col_cellr:
            stat_a = statement_a + cell.value + " ( "
    for col_celli in sh.iter_cols(min_row= 2, min_col= 1, max_col=1):
        for cell in col_celli:
            stat_a = stat_a + str(cell.value) + ", "
    stat_a = stat_a.rstrip(", ") + " )"
    print("\n")
    print(stat_a)

它不能提供正确的输出。例如,它在第一个工作表列的select语句中包含第二个工作表名作为表名。请有人帮我指出我的错误。你知道吗

预期o/p:

INSERT /*+ APPEND */ INTO TABLE1 (VERSION,VALID_FROM,USERNAME,UD_GEPART_ID, UD_SEPART_ID) 
SELECT /*+ PARALLEL(64) */ NULL, USG_DT, MIG, NULL,NULL FROM TABLE2;

类似地,迭代其他工作表并生成如上所述的语句。你知道吗


Tags: infromidforwsshcellcol
2条回答

我认为以下几点应该会有所帮助。你知道吗

target_table, source_table,  = ws.iter_rows(min_col=1, max_col=2, min_row=1 max_row=1, values_only)[0]
target_cols, source_cols,  = ws.iter_cols(min_col=1, max_col=2, min_row=3, values)
target_cols.insert(0, "PARALLEL(64)")

stmt = """INSERT INTO {0} ({1})
SELECT {2} FROM {3}.format(target_table, ",".join(target_cols), ",".join(source_cols), source_table)
"""

这不会做所有的事情,你可能会想调整它,但希望它做得足够,如果没有给你更具体的问题的基础。你知道吗

sheetnames

Returns the list of the names of worksheets in this workbook.

Type: list of strings

sheetnames返回一个列表。你应该改变

sheets = [wb.sheetnames]

sheets = wb.sheetnames

下面也是错的。您正试图迭代每个工作表,但在下一步中,您会将它分配给其他内容,从而丢失sh。你知道吗

for sh in wb.worksheets:
    sh = wb.active

相关问题 更多 >