Open a Workbook with XLWINGS without making it visible


I am starting to use XLWings (not that I like Excel, at all, but it is something I HAVE TO do). The thing is that I cannot find the way to make Python open a Workbook without showing it.

It seems the constructor for Workbooks in the old XLWings 0.6.4 was xlwings.Workbook, and one of the arguments was a flag ‘app_visible’ (see

However, in the new v0.9.2 Workbook has been replaced by Book, and Book does not have any such flag ( The App object does have it, and I thought that was the way to go. So I coded:

import xlwings as xw

app = xw.App(visible=False)
filename = os.path.join(PATH_EXCEL_SAMPLES, r"rangosConDatos_sample01.xls")
book = xw.Book(filename)
# Do stuff with the info in the book
book.close()  # Ya puedo cerrar el libro.

But, regretably, when

book = xw.Book(filename)

is executed the ‘visible’ attribute of app suddenly becomes True, and the book is shown. I do not know if this is a desired feature or an unexpected behaviour. Anyway, any ideas how should I do it?

Asked By: zeycus



You could try ‘with open’, for example

with open ("write.csv", "a", newline='') as file:  
    fields=['score', 'name']                       
    writer=csv.DictWriter(file, fieldnames=fields)
    writer.writerow({'score' : score, 'name' : username})

with open ("write.csv", "r") as file:
    for i in reader:
Answered By: Vinny122004

Here is my working code fragment:

    import xlwings

    excel_app = xlwings.App(visible=False)
    excel_book ='PATH_TO_YOUR_XLSX_FILE')
Answered By: Alexey Korolkov

You can also try:

import xlwings as xw

app = xw.App(visible=False)
book = xw.Book('PATH_TO_YOUR_XLSX_FILE')
sheet = book.sheets('sheetname')
df = sheet.range('A1:D10')

#corrected typo

Answered By: Femosh

This works for me:

import xlwings as xw

app = xw.App(visible=False)
readsheet = xw.Book('FILE_PATH').sheets['Sheet1']
df = pd.DataFrame(readsheet.range('A1', 'Z99').value)
Answered By: Lorenzo Bassetti

Since version 0.24.3, where with xw.App(): is implemented, the idiomatic way is:

import xlwings as xw

with xw.App(visible=False) as app:
    wb = xw.Book("test.xlsx")

    # Do some stuff e.g.
    wb.sheets[0]["A1"].value = 12345"test.xlsx")

The advantage of this is that there won’t be any hidden excel processes left over in the background, if you use a hidden instance and your code fails.

Answered By: mouwsy
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.