Python Forum
Delete all Excel named ranges (local and global scope)
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Delete all Excel named ranges (local and global scope)
#1
Hi,

I have an Excel Workbook. I am using the openpyxl package. I don't know how many worksheets I have nor do I know the named ranges.

My goal is to remove all named ranges.

wb.defined_names.get gives me a class 'openpyxl.workbook.defined_name.DefinedNameList' but I can't find the scope. Below is one output:

.
.
.
Parameters:
name='ref_fx_qs', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=8, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_fx_qs', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=9, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_fx_qs', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=None, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=4, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text="'2018 CY'!$AL$22", <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=3, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text="'2019 CY'!$AL$22", <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=2, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text="'2020 CY'!$AL$22", <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=7, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=5, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=6, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=10, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=8, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=9, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='ref_std_itd_on', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=None, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='#REF!', <openpyxl.workbook.defined_name.DefinedName object>
.
.
.

Thanks
Reply
#2
Documentation is here
You can get a list of sheet names with wb.sheetnames (assumes workbook named wb, modify for your name)
Reply
#3
(Mar-23-2023, 11:45 AM)Larz60+ Wrote: Documentation is here
You can get a list of sheet names with wb.sheetnames (assumes workbook named wb, modify for your name)

I had managed to get the sheets; I wanted to delete all named ranges (both local and global in scope) Big Grin .

The following did it:


    wb = load_workbook(filename = file, data_only=True)

    # Get the global named ranges
    named_ranges = wb.defined_names

    # Print the names
    index = 0
    while len(named_ranges.definedName) > index:
        name = named_ranges.definedName[index].name  
        sheetID = named_ranges.definedName[index].localSheetId
        if sheetID == None:    
            del wb.defined_names[name]  # you can also call wb.defined_names.delete(name)
        else:
            wb.defined_names.delete(name, sheetID)

    wb.save(file)
    wb.close()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to create a variable only for use inside the scope of a while loop? Radical 10 1,683 Nov-07-2023, 09:49 AM
Last Post: buran
  It's saying my global variable is a local variable Radical 5 1,153 Oct-02-2023, 12:57 AM
Last Post: deanhystad
  [SOLVED] [loop] Exclude ranges in… range? Winfried 2 1,437 May-14-2023, 04:29 PM
Last Post: Winfried
  Library scope mike_zah 2 834 Feb-23-2023, 12:20 AM
Last Post: mike_zah
  Global variables or local accessible caslor 4 1,017 Jan-27-2023, 05:32 PM
Last Post: caslor
  How to use global value or local value sabuzaki 4 1,151 Jan-11-2023, 11:59 AM
Last Post: Gribouillis
  Scope of variable confusion Mark17 10 2,828 Feb-24-2022, 06:03 PM
Last Post: deanhystad
  Variable scope issue melvin13 2 1,529 Nov-29-2021, 08:26 PM
Last Post: melvin13
  Dictionary with ranges that have a float step value Irv1n 2 2,109 Apr-21-2021, 09:04 PM
Last Post: Yoriz
  Global vs. Local Variables Davy_Jones_XIV 4 2,649 Jan-06-2021, 10:22 PM
Last Post: Davy_Jones_XIV

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020