Skip to main content

Import Excel to Retool without Code

Import Excel to Retool without Code

Import Excel to Retool without Code

Did you know that more than 70 % of companies still keep their “single source of truth” in a spreadsheet? Yet only a handful can shove that data into a modern tool without writing a single line of code. Imagine turning a messy Excel file—filled with VLOOKUPs, XLOOKUPs, and nested formulas—into a live dashboard in Retool in under five minutes. Sound familiar?

Why Bring Excel Into Retool?

Speed to insight is the first reason I love Retool. A static spreadsheet can be a bottleneck; with Retool, one click turns it into a searchable, filterable UI that anyone on the team can use instantly. Data governance? Retool gives you centralised permissions, audit trails, and version control—features that Excel just can’t match. Scalability is the cherry on top. A 10‑row quick‑calc can grow into a 100 k‑row production‑grade app without a hitch. So, if you’re tired of manual copy‑pastings or worry about version conflicts, Retool is your next stop.

Preparing Your Spreadsheet for a Seamless Import

You’ve probably noticed that not every Excel file plays nice with Retool. Here’s how to clean it up:
  • Clean the data: Remove merged cells, hidden rows or columns, and keep a single, clear header row.
  • Standardise formulas: Replace volatile functions (like NOW()) with static values. Keep VLOOKUP/XLOOKUP only if you need them as reference tables.
  • Save in a compatible format: XLSX preserves sheet tabs and formulas better than CSV, but if you’re only using raw data, CSV can be a lighter load.
And remember: the file you upload should fit comfortably under the 50 MB limit, unless you’re on a paid plan that allows larger uploads.

Step‑by‑Step: Importing Excel to Retool without Writing Code

Let’s walk through the process. I’ve personally done this dozens of times, and it’s pretty straightforward.
  1. Upload the file to Retool’s “Resources” – choose File Upload > Excel and give it a memorable name.
  2. Create a new app & add a Table component – point the Table’s Data field to the uploaded resource, e.g., {{ excelResource.data }}.
  3. Map columns to UI controls – drag a Dropdown, Text Input, or Date Picker onto the canvas and bind it with a simple Retool expression like {{ table1.filteredData }}.
  4. Add a quick filter with VLOOKUP logic – use Retool’s built‑in “Transformer” to mimic VLOOKUP: {{ table1.data.filter(row => row.ID === dropdown1.value) }}.
  5. Publish and test – preview the app, try editing a cell, and watch the change appear instantly.
Here’s a quick code snippet you’ll paste into a Transformer:
// Filter rows where the ID matches the dropdown selection
return table1.data.filter(row => row.ID === dropdown1.value);
That’s it. The whole workflow can be saved as a “Template” for future imports, which means you’ll be set up in minutes every time.

Advanced Tricks: Leveraging Excel Formulas Inside Retool

What’s the point of importing if you can’t keep your formulas alive? Here’s how to bring Excel logic into Retool:
  • Re‑using VLOOKUP/XLOOKUP: Export the lookup table as a separate sheet, import it as a second resource, and join the two tables with Retool’s Join transformer.
  • Dynamic calculations: Replicate Excel’s IF, SUMIFS, or array formulas using the JavaScript‑based Transformer (e.g., {{ _.sumBy(table1.filteredData, 'Revenue') }}).
  • Conditional formatting → UI styling: Translate Excel’s colour rules into Retool’s Conditional Styles (e.g., highlight rows where Profit < 0 with a red background).
And here’s a more elaborate example. Suppose you have two sheets: Orders and Customers. You want to add the customer name to each order without writing a backend service. Use this Transformer:
// Transformer: enrichOrdersWithCustomerName
const orders   = {{ excelResource.ordersSheet }};      // [{OrderID: 1, Amount: 250}, …]
const customers = {{ excelResource.customersSheet }}; // [{CustomerID: 1, Name: "Acme"} , …]

// Build a lookup map (XLOOKUP equivalent)
const customerMap = _.keyBy(customers, 'CustomerID');

// Merge the data
return orders.map(order => ({
  ...order,
  CustomerName: customerMap[order.OrderID]?.Name || 'Unknown'
}));
Now bind a Table to {{ enrichOrdersWithCustomerName }} and you’ve got a live “Customer Name” column—no code beyond that little block.

Actionable Takeaways & Next Steps

  • Checklist: Before you hit upload, double‑check your data for hidden rows, merged cells, and volatile formulas.
  • Resources: Retool’s Excel Import docs, community templates, and a downloadable “Excel‑to‑Retool” cheat sheet are great starting points.
  • Growth path: Once you’re comfortable with static imports, add API calls, write‑back capabilities, and role‑based access in subsequent iterations.
As of 2026, Retool’s free tier supports up to 5 custom apps and file‑based resources, which is more than enough for most small‑team projects. If you hit the 50 MB file size limit, just split the workbook or store the file in a cloud bucket (S3, Google Drive) and link it as a resource.

Frequently Asked Questions

Q1. How do I import an Excel file with multiple sheets into a single Retool app?

A: Upload the XLSX file as a resource; each sheet becomes a separate data set (e.g., excelResource.sheet1, excelResource.sheet2). Bind each sheet to its own component or join them with a transformer.

Q2. Can I keep my VLOOKUP or XLOOKUP formulas alive after the import?

A: Retool doesn’t execute Excel formulas directly, but you can replicate the logic using JavaScript transformers or by importing the lookup table as a separate sheet and joining it inside Retool.

Q3. What’s the size limit for Excel files uploaded to Retool?

A: The default limit is 50 MB per file; larger workbooks can be split into smaller files or stored in a cloud bucket (S3, Google Drive) and linked as a resource.

Q4. Do I need a paid Retool plan to import Excel files?

A: The free tier allows up to 5 custom apps and supports file‑based resources, including Excel. For higher volume or automated scheduled imports, a paid plan is recommended.

Q5. How can I automatically refresh the data when the source Excel file changes?

A: Set up a Scheduled Query that re‑reads the file from a cloud storage location (Google Drive, S3, etc.) and triggers a UI refresh via Retool’s “Refresh Data” action. That way your dashboard stays in sync without manual intervention.


Related reading: Original discussion

What do you think?

Have experience with this topic? Drop your thoughts in the comments - I read every single one and love hearing different perspectives!

Comments

Popular posts from this blog

2026 Update: Getting Started with SQL & Databases: A Comp...

Low-Code Isn't Stealing Dev Jobs — It's Changing Them (And That's a Good Thing) Have you noticed how many non-tech folks are building Mission-critical apps lately? Honestly, it's kinda wild — marketing tres creating lead-gen tools, ops managers deploying inventory systems. Sound familiar? But here's the deal: it's not magic, it's low-code development platforms reshaping who gets to play the app-building game. What's With This Low-Code Thing Anyway? So let's break it down. Low-code platforms are visual playgrounds where you drag pre-built components instead of hand-coding everything. Think LEGO blocks for software – connect APIs, design interfaces, and automate workflows with minimal typing. Citizen developers (non-IT pros solving their own problems) are loving it because they don't need a PhD in Java. Recently, platforms like OutSystems and Mendix have exploded because honestly? Everyone needs custom tools faster than traditional codin...

Practical Guide: Getting Started with Data Science: A Com...

Laravel 11 Unpacked: What's New and Why It Matters Still running Laravel 10? Honestly, you might be missing out on some serious upgrades. Let's break down what Laravel 11 brings to the table – and whether it's worth the hype for your PHP framework projects. Because when it comes down to it, staying current can save you headaches later. What's Cooking in Laravel 11? Laravel 11 streamlines things right out of the gate. Gone are the cluttered config files – now you get a leaner, more focused starting point. That means less boilerplate and more actual coding. And here's the kicker: they've baked health routing directly into the framework. So instead of third-party packages for uptime monitoring, you've got built-in /up endpoints. But the real showstopper? Per-second API rate limiting. Remember those clunky custom solutions for throttling requests? Now you can just do: RateLimiter::for('api', function (Request $ 💬 What do you think?...

Expert Tips: Getting Started with Data Tools & ETL: A Com...

{"text":""} 💬 What do you think? Have you tried any of these approaches? I'd love to hear about your experience in the comments!