This isn't a bug. It's how Google Sheets works, and it has real consequences for anyone sharing board packs, investor models, or syndicate DCFs with people outside the team.
Why Viewers Can See Formulas in Google Sheets (and Excel Can't Help)
The formula bar is always active for viewers. There's no native toggle to hide it. A viewer can't edit — but they can read =NPV(Assumptions!$B$3, 'Cash Flow'!D8:D17) - 'Cash Flow'!C8 just fine.
This is a deliberate architectural choice. Google's real-time collaboration model treats formula visibility as part of the spreadsheet's transparent state. According to Google's Workspace documentation on protected ranges, protection controls editing access — not read access to formula content.
Contrast this with Excel's behavior. Microsoft's documentation on workbook protection (support.microsoft.com) describes a "Hidden" checkbox under Format Cells → Protection that suppresses formula display in the formula bar — but only when sheet protection is active. Even then, the underlying logic can often be reconstructed from cell values. Excel's formula hiding is imperfect, but it exists. Google Sheets has no equivalent as of April 2026.
The practical gap: if you've built a model in Google Sheets and shared it with "View" access, assume the recipient can read every formula in every tab.
What This Exposes in an 8-Tab Model
In a real model — Assumptions, P&L, Balance Sheet, Cash Flow, FCFF, Debt Schedule, Returns Analysis, Summary — formula visibility leaks more than just arithmetic.
It exposes your methodology. A viewer can see that your EBITDA multiple on exit is =Assumptions!$B$12 (14.2x) and trace it back to the Assumptions tab. They can see that your WACC is =Assumptions!$C$4 * Assumptions!$C$5 + Assumptions!$C$6 * Assumptions!$C$7 * (1 - Assumptions!$C$8) — and reverse-engineer your cost of equity, cost of debt, and effective tax rate.
It exposes cross-tab structure. Formulas like =SUMIFS('P&L'!C:C, 'P&L'!B:B, ">=" & Assumptions!$B$3, 'P&L'!B:B, "<=" & Assumptions!$B$4) reveal how your tabs are named, how your date logic works, and where your assumption inputs live. A competitor with view access to your $4.2M EBITDA model knows your sheet architecture.
It exposes hard-coded assumptions. Any cell with a raw number instead of a reference — =0.385 for gross margin, =0.22 for tax rate — shows up exactly as typed.
The 3 Methods That Actually Limit Formula Visibility in Google Sheets
None of these are perfect. Here's what each one does and doesn't do.
1. Protected Ranges (Reduces Editing, Not Viewing)
Setup time: ~5 minutes
Protected ranges prevent edits to specific cells or sheets. They do nothing to hide formulas from viewers. A viewer with no edit permissions can still read every formula in a protected range.
Use this for: preventing accidental overwrites in shared models. Don't use it if your goal is formula confidentiality.
2. Publish as PDF or Share Values Only (Full Protection, Zero Interactivity)
Setup time: 2–4 minutes
File → Download → PDF gives recipients a static document with no formula access. Alternatively, paste-special values into a new workbook (Ctrl+Shift+V) before sharing, stripping all formulas.
The trade-off is obvious: a static PDF or values-only sheet can't be refreshed, linked to, or used as a live input. For a board pack where the numbers are final, this is the right call. For a working model that a client needs to interrogate, it isn't.
3. IMPORTRANGE into a Presentation Layer (Best Balance for Working Models)
Setup time: 30–60 minutes for an 8-tab model
Build your actual model in a private workbook. Create a second "presentation" workbook that pulls summary outputs via IMPORTRANGE:
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[source_id]", "Summary!B2:F20")
Share only the presentation workbook. Viewers see outputs — revenue of $4.2M, gross margin of 38.5%, EBITDA of $1.6M — but the formulas they see are just =IMPORTRANGE(...). The source logic lives in a file they don't have access to.
The limit: IMPORTRANGE only pulls values, not formatting. You'll need to reapply number formats and conditional formatting in the presentation layer. For complex models with 50+ output cells, this gets tedious — ModelMonkey can help trace which ranges need to be pulled and catch broken references when tabs in the source model get renamed.
This approach also breaks if viewers are granted access to the source workbook (intentionally or by accident), so manage sharing permissions on the source carefully.
Comparison: Formula Visibility by Sharing Method
| Method | Viewers See Formulas? | Stays Live? | Setup Effort |
|---|---|---|---|
| Share with "View" access | Yes — all formulas | Yes | None |
| Protected ranges | Yes — all formulas | Yes | Low |
| PDF export | No | No | Very low |
| Values-only copy | No | No | Low |
| IMPORTRANGE presentation layer | Source formulas hidden | Partially | Medium–high |
What Viewers Can Still See — Formulas in Protected Ranges
This is the most common misconception worth clearing up: protecting a range does not hide its formulas.
If you protect Assumptions!B3:B20 to prevent edits, a viewer can still click B7 and read =4200000 * 0.385 or whatever sits there. The lock icon on a protected range means "you can't change this" — not "you can't see how this was built."
The only way to prevent formula visibility in Google Sheets is to either remove the formulas (values-only) or remove the tab from the shared file (IMPORTRANGE approach).
If you need granular formula hiding at the cell level — something closer to Excel's Format Cells → Protection → Hidden workflow — Google Sheets doesn't have it. This is a documented gap between the two platforms, and as of April 2026, Google hasn't signaled plans to close it.