При считывании данных с excel в python с помощью библиотеки win32com в массив, при выводе почему-то два раза выводит

Всем добрый день! Не понимаю почему у меня выводится два раза logic.py:

'''

import openpyxl as opx

import win32com

import win32com.client

def logic():

    val1 = []
    def excel_read2():
        Excel = win32com.client.Dispatch("Excel.Application")
        wb = Excel.Workbooks.Open(u'C:\\Users\\source\\DATA_MACH_0.18.xlsx')
        sh = wb.Worksheets('Лист3')
        sh1 = wb.Worksheets('Лист5')
        val = sh.Cells(2,2).value
        for i in range(3,14):
            val2 = sh1.Cells(i,2).value
            val1.append(val2)    
        print(val)
        print(val1)
        wb.Save()

        #закрываем таблицу
        wb.Close()

        #закрываем COM объект
        Excel.Quit()
    excel_read2()
  
logic()

'''

main.py:

'''

import logic
def MainFunction():

    logic.logic()

MainFunction()  

'''

ожидаю вывод:

-1.25

[1.5, 1.5, 1.5, 1.4, 1.2, 1.0, 0.85, 0.75, 0.68, 0.6, 0.5]

получаю:

-1.25

[1.5, 1.5, 1.5, 1.4, 1.2, 1.0, 0.85, 0.75, 0.68, 0.6, 0.5]

-1.25

[1.5, 1.5, 1.5, 1.4, 1.2, 1.0, 0.85, 0.75, 0.68, 0.6, 0.5]

Заранее спасибо, кто откликнется)


Ответы (1 шт):

Автор решения: Интик
import openpyxl as opx
import win32com
import win32com.client

def excel_read2():
    Excel = win32com.client.Dispatch("Excel.Application")
    wb = Excel.Workbooks.Open(u'C:\\Users\\source\\DATA_MACH_0.18.xlsx')
    sh = wb.Worksheets('Лист3')
    sh1 = wb.Worksheets('Лист5')
    val = sh.Cells(2,2).value
    for i in range(3,14):
        val2 = sh1.Cells(i,2).value
        val1.append(val2)    
    print(val)
    print(val1)
    
    wb.Save()
    wb.Close()
    Excel.Quit()

def foo():
    pass
    
def fun():
    pass

def logic():
    val1 = []
    excel_read2()
    foo()
    fun()

вот развёрнутый пример, который я спрашивал в комментариях(почему нельзя вынести функцию из функции?) ведь более читабельно выходит. фу и фун это те функции , которые будут в дальнейшем.функция майн остаётся такойже.

а ответ на главный вопрос: функция логик вызывается 2 раза.из майна и после самой функции.

→ Ссылка