29

I can open a worksheet, how do I add the little filter menus to all columns without turning on any filters?

I can do it in xlsxwriter with

worksheet.autofilter(0, 0, 0, num_of_col)

How do I do it in openpyxl?

G5W
  • 36,531
  • 10
  • 47
  • 80
azazelspeaks
  • 5,727
  • 2
  • 22
  • 39

2 Answers2

49

You can simply read ws.dimensions and it will return a string value with your range from "A1:XX". I used this to apply filters to my entire excel spreadsheet.

import openpyxl as px

wb= px.load_workbook('Data/Test01.xlsx')
ws = wb.active

ws.auto_filter.ref = ws.dimensions

wb.save('Data/Test03.xlsx')
Jean-François Fabre
  • 137,073
  • 23
  • 153
  • 219
Robert Hadsell
  • 616
  • 6
  • 4
10

All you need to do is to set worksheet.auto_filter.ref to the full range of worksheet cells.

import openpyxl
from openpyxl.utils import get_column_letter

workbook = openpyxl.load_workbook('Data/Test01.xlsx')
worksheet = workbook['Sheet1']

FullRange = "A1:" + get_column_letter(worksheet.max_column) \
+ str(worksheet.max_row)
worksheet.auto_filter.ref = FullRange

workbook.save('Data/Test03.xlsx')
G5W
  • 36,531
  • 10
  • 47
  • 80