Hyperlink to a specific sheet

后端 未结 6 1956
猫巷女王i
猫巷女王i 2021-02-08 01:45

I would like to open a specific sheet of a Google Sheets from a hyperlink in another spreadsheet.

I have different links in my master spreadsheet and each should have a

6条回答
  •  暖寄归人
    2021-02-08 02:17

    So what I understand from the OP is that you have one master spreadsheet that you want to have links to individual sheets, where one or more of those sheets may be in single or multiple spreadsheet files.

    The HYPERLINK function only turns a URL into a hyperlink and is really only useful when you want to have hypertext instead of just a link. If you enter the raw URL as the data, it's automatically turned into a hyperlink, so there's no additional work.

    As mentioned in other answers, the solution is to have the spreadsheet's URL then use the gid value to calculate the link to the desired sheet within the spreadsheet. You can write a simple app that collects all of the individual sheets' links and writes them into the master.

    Below are some snippets of pseudocode (Python) that can help you get started. I'm leaving out all the boilerplate auth code, but if you need it, see this blog post and this video. The code below assumes your API service endpoint is SHEETS.

    This reads a target spreadsheet to build links for each of its sheets:

    # open target Sheet, get all sheets & Sheet URL
    SHEET_ID = TARGET_SHEET_DRIVE_FILE_ID
    res = SHEETS.spreadsheets().get(spreadsheetId=SHEET_ID,
            fields='sheets,spreadsheetUrl').execute()
    sheets = res.get('sheets', [])
    url = res['spreadsheetUrl']
    
    # for each sheet, dump out its name & full URL
    for sheet in sheets:
        data = sheet['properties']
        print('** Sheet title: %r' % data['title'])
        print(' - Link: %s#gid=%s' % (url, data['sheetId']))
    

    Instead of printing to the screen, let's say you stored them in a (name, URL) 2-tuple array in your app, so bottom-line, it looks something like this list called sheet_data:

    sheet_data = [
        ('Intro', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=5'),
        ('XData', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=3'),
        ('YData', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=7')
    ]
    

    You can then write them to the master (starting from the upper-left corner, cell A1) like this:

    SHEET_ID = MASTER_SHEET_DRIVE_FILE_ID
    SHEETS.spreadsheets().values().update(
        spreadsheetId=SHEET_ID, range='A1',
        body={'values': sheet_data},
        valueInputOption='USER_ENTERED'
    ).execute()
    

    Some caveats when using gid:

    • The first default sheet created for you (Sheet1) always has a gid=0.
    • Any sheets you add after that will have a random gid.
    • Don't bank on a gid=0 for the 1st sheet in your spreadsheets however as you or someone else may have deleted the original default sheet, like my example above.

    If you want to see more examples of using the Sheets API, here are more videos I've made (along with posts that delve into each code sample):

    • Migrating SQL data to a Sheet plus code deep dive post
    • Formatting text using the Sheets API plus code deep dive post
    • Generating slides from spreadsheet data plus code deep dive post

    Then when you open up the master in the Sheets UI, you can clickthrough to any of the individual sheets, regardless of which spreadsheet files they're in. If you want them automatically opened by another app or script, most programming languages offer developers a ways to launch a web browser given the target URL. In Python, it would be the webbrowser module (docs):

    import webbrowser
    webbrowser.open_new(url) # or webbrowser.open_new_tab(url)
    

提交回复
热议问题