Excel in WordPress: Import & Embed Spreadsheets With One Plugin

Someone corrects the spreadsheet in February and the website carries on showing December numbers. Nobody notices for weeks, because nothing looks broken.

That’s the failure mode of pasting rows into the editor. The copy has no connection to the file it came from.

Getting Excel into WordPress properly means keeping that link intact, so the table follows the workbook instead of drifting away from it. One plugin handles the whole path, wpDataTables, from upload to shortcode.

Worth saying up front: wpDataTables publishes this article. The pricing section below states plainly which tier each feature needs, including the ones our cheapest paid plan doesn’t cover, and the free alternatives get an honest hearing at the end.

What Is an Excel Table in WordPress

The important thing to grasp is that the file and the published table are two different objects. One lives on disk. The other lives in a page.

What you’re actually publishing is spreadsheet data read from an .xlsx, .xls, .csv or .ods file and rendered as an HTML table, either stored in the WordPress database or pulled from the linked source file on each page load.

The three states your spreadsheet data passes through

  • Source file: the .xlsx workbook sitting in your media library, on a remote URL, or in Google Drive
  • Stored table: the parsed data plus its configuration, either written into MySQL or held as a cached copy of the file
  • Rendered output: the sortable, searchable HTML table your visitors actually see

Mess up the relationship between those three and you get the December-numbers problem from the top of this page.

Embedding is not the same as pasting

A pasted table is dead markup. You copy cells out of Excel, drop them into the editor, and the connection to the source is gone forever.

An embedded table keeps a reference. The page holds a shortcode or a block that points at a table ID, and the data behind that ID can change without anyone touching the post.

This matters more than it sounds. Spreadsheet error research going back to Ray Panko’s work has repeatedly found that the overwhelming majority of business spreadsheets contain errors, which means your source file will get corrected. Repeatedly.

Where native WordPress stops

Gutenberg ships with a Table block. It handles a five-row price list fine and nothing beyond that.

Method Handles Excel Import Sorting and Search
Gutenberg Table block No, manual entry only No
Raw HTML in the editor No No, unless you write the JS
iframe to a published sheet Indirectly Google’s UI, not yours
Table plugin Yes Built in

You can absolutely build a table in WordPress without a plugin. You just cannot import 400 rows of quarterly data into one without losing an afternoon.

People who try to embed Excel directly in HTML usually end up with an Office Online iframe, which works until the sharing permission changes.

What wpDataTables Does With Excel Spreadsheets

In a single admin interface, it parses the spreadsheet file, detects a data type for every column, stores the table configuration, and generates a shortcode that renders the table on the front end with sorting, search and pagination attached.

The Lite version on WordPress.org sits at 70,000+ active installs with a 4.5 rating. Check the current WordPress.org listing for the latest tested-up-to WordPress version and PHP requirement, since both move with each release.

What actually powers the front end

wpDataTables uses the DataTables JavaScript library to power interactive HTML tables, the library that most serious JavaScript data table implementations are built on. Sorting, the global search box, and pagination controls all come from there.

Parsing on the server side is handled through PHP spreadsheet libraries, which is why the plugin reads .xlsx without asking you to convert anything to CSV first.

The plugin package weighs around 15 MB, so a low upload limit on shared hosting will block the install before you ever get to your data.

The table types you can create

  • Linked to an existing data source: Excel, CSV, ODS, Google Sheets, JSON, XML, serialized PHP array, MySQL query
  • Imported into MySQL: data lands in the database and becomes editable
  • Manual table: you define the structure and type the values
  • Simple table: spreadsheet-style editor with merged cells, star ratings and cell colors

Each saved table gets a numeric ID under the wpDataTables admin menu. That ID is the only thing your page needs.

How this compares to the rest of the category

TablePress carries more than 700,000 active installations with a 5.0 rating and imports Excel too, so the install count alone doesn’t settle the question. It’s the most installed table plugin on WordPress by a wide margin.

The split shows up in what happens after import. Linked-file tables that refresh on their own, server-side processing, chart generation, and front-end editing all sit on the Excel spreadsheet plugin side of the fence rather than the static-table side.

Which File Formats and Data Sources wpDataTables Reads

Which File Formats and Data Sources wpDataTables Reads

Five spreadsheet formats (XLS, XLSX, XLSM, ODS, CSV) plus six non-file sources: Google Sheets published URL, Google Sheets API, JSON, nested JSON, XML, and serialized PHP array. Direct MySQL queries against tables already in your database work too.

Source Best Suited To Updates When Source Changes
XLSX / XLS / ODS Reports exported from accounting or ERP tools Yes, if linked
CSV Exports from almost any system Yes, if linked
Google Sheets URL Data a team edits together Yes
JSON / nested JSON API responses Yes
MySQL query Data already inside WordPress Live

Nested JSON support with authentication means an API feed can become a table without a middle step, which is the same problem people solve badly when they hand-code a JSON to HTML table conversion.

The header row rule nobody reads until it breaks

Row 1 becomes your column titles. Not row 3, not a merged banner cell with your company name in it.

These reliably break parsing:

  • Merged cells inside the header row
  • Blank rows above the header
  • Mixed types in one column (dates and free text together)
  • Duplicate column names

Strip the decorative rows out of your workbook before uploading. Takes thirty seconds and saves a support ticket.

Multi-sheet workbooks

One wpDataTable maps to one sheet. A workbook with tabs for Q1 through Q4 becomes four tables, not one, and you pick the sheet during setup.

That constraint is worth planning around when you build the source file. Consolidate first if the whole year belongs in a single view, then link a single data source to the table.

How an Excel File Is Imported Into WordPress With wpDataTables

How an Excel File Is Imported Into WordPress With wpDataTables

Five clicks, assuming your header row is clean.

  1. Open wpDataTables, then Create a Table
  2. Choose the option to create a table linked to an existing data source
  3. Select Excel file as the input data source type
  4. Upload the file or paste a URL
  5. Save, and the plugin reads the structure and generates the shortcode

Uploading the file and selecting the sheet

The Media Library is the default file location, so the upload lands in wp-content/uploads like any other media item.

Set the table name at this stage rather than later. You’ll have six tables inside a month and “Table 3” tells you nothing.

Click Save Changes and the column structure appears in the editor below.

Reading the file from a URL instead of the media library

Since version 5.1, wpDataTables creates Excel tables linked to a file hosted on any external domain.

Useful when a reporting tool writes the same filename to a fixed path every night. The table follows the file instead of the file following you.

Worth knowing before you choose this route: the URL has to stay publicly reachable, so anything behind a login will fail silently.

What happens on the first save

wpDataTables reads the header row as column titles, guesses a data type per column, writes the configuration, and assigns a table ID.

Your shortcode looks like [ wpdatatable id=1 ]. Copy it.

Most failed first imports trace to three settings:

  • upload_max_filesize set below your file size
  • memory_limit under 256M, which the WordPress hosting baseline treats as a practical minimum
  • max_execution_time too short for a wide workbook, with 60 seconds the floor and 300 more realistic for imports

Managed hosts commonly default to a generous upload limit, but plenty of budget shared hosts still ship 2 MB, and that’s where imports die.

Once the table saves, the workflow is closer to publishing a live view than the old routine of trying to publish an Excel spreadsheet on the web by hand.

Which Import Method Fits Which Spreadsheet

Two questions decide it: how often the data changes, and whether anyone edits it from the website.

Method Fits Editable On Site Server-Side Processing
One-time Excel import to MySQL Static reference data Yes Yes
Linked Excel or CSV file Monthly or weekly reports No No
Google Sheets URL Team-maintained data No No
MySQL query Data already in the database Yes Yes
Manual table No source file exists Yes Yes

Notice the pattern in the last column. Server-side processing only exists for tables stored in MySQL, and the plugin forces it on automatically once a query-based table passes 2,000 rows.

The trade-off you are actually making

Linked files win on maintenance and lose on scale. File-based tables are documented as comfortable up to roughly 2,000 to 3,000 cells, counting columns multiplied by rows.

Imported MySQL tables win on scale and lose the automatic link to the source file. You gain editing, filters that run on the database, and no practical row ceiling.

Anyone pulling from a database inside a WordPress page is already on the second path whether they framed it that way or not.

When Google Sheets beats an Excel file

Three people editing the same numbers, that’s when.

Paste the published sheet link into the input field, save, and the plugin reads the structure exactly as it does with a local .xlsx. Teams that already visualize Google Sheets data elsewhere in their stack usually find this the shortest path.

The catch is dependency. Revoke the sharing link and your public table empties out. Note that Google Sheets import is a premium feature, not part of Lite.

How the Imported Table Is Embedded in a Page, Post, or Page Builder

How the Imported Table Is Embedded in a Page, Post, or Page Builder

Same table ID, four placements. That’s the whole point of inserting a table in WordPress through a stored reference rather than pasted markup.

Shortcode, block, or builder widget

  • Shortcode: [ wpdatatable id=1 ] works anywhere WordPress runs shortcodes
  • Gutenberg block: search for the wpDataTables block, pick the table from a dropdown, done
  • Page builder: Elementor, Divi, WPBakery and Avada all have integrations. Elementor alone carries 10 million+ active installations and still has no native sortable data table widget, which is exactly the gap this fills
  • Theme file: <?php echo do_shortcode('[ wpdatatable id=1 ]'); ?> for headers, footers, or custom templates

Width behavior inside narrow containers

A twelve-column spreadsheet does not fit inside a 700px blog column. It never did.

Mobile accounts for roughly 55% to 60% of global web traffic depending on the month and the source, per StatCounter data, so the phone view is the default case rather than the edge case.

wpDataTables offers three answers:

  • Responsive mode, which collapses lower-priority columns into an expandable row
  • Column hiding on mobile, set per column
  • Fixed headers and fixed columns, added in version 5.6, for wide tables that scroll horizontally

Responsive mode is the one most people want, and the plugin documentation covers how to make a table responsive in more depth than fits here. Note it’s a premium feature, and fixed columns sit on Standard and above.

How Column Types and Data Formats Are Set After Import

How Column Types and Data Formats Are Set After Import

Open Column Settings from the table editor or the Column List button, then set the data type per column. That type controls three things at once: how values display, how the column sorts, and which filter input the front end renders.

Fixing misdetected column types

Type detection is a guess. A date column formatted as text in Excel imports as a string, and strings sort alphabetically.

Which means 01/03/2025 lands next to 01/03/2024 and your chronology is nonsense. The fix takes one dropdown change, and the difference between correct and broken sorting in JavaScript tables is almost always the declared type rather than the library.

Three culprits to check first: dates stored as text, numbers with currency symbols baked in, and ID columns that start with a zero.

Number, currency, and date formatting

Formatting is set in wpDataTables, not inherited from the workbook.

  • Decimal places: per column, 0 to 4
  • Thousands separator: comma, period, or space
  • Currency prefix and suffix: so $ and EUR sit outside the numeric value
  • Date format: display pattern independent of how the source stored it

Keeping the currency symbol out of the stored value is what lets the column stay numeric, which in turn lets it sum correctly in a table footer and feed a chart later.

Available column types

String, integer, float, date, datetime, time, link, email, image, and attachment.

Link and image types matter more than they sound. They turn a plain URL cell into a clickable anchor or a rendered thumbnail without any HTML in the source file.

Visibility, order, and the hidden filterable column

The Column List dialog handles renaming, reordering by drag and drop, and visibility toggles.

A column can be hidden and still filterable. Keep a region code out of the visible table, then use it to drive a select-box filter that visitors can actually use.

Office workers spend a large share of the working week inside spreadsheets, and the columns that make sense internally are rarely the columns your audience needs to see.

Which Excel Formatting Carries Over and How the Rest Is Rebuilt

Values transfer. Visual formatting doesn’t, so the plugin hands you its own styling layer to rebuild what the workbook was doing with fills, fonts and conditional rules.

Formulas are the part that surprises people. You get the calculated result, not the live formula.

Excel Feature Survives Import Replacement In The Plugin
Cell values and headers Yes Nothing needed
Formulas Result only Formula columns (Standard+)
Conditional formatting No Conditional formatting rules
Fonts, fills, borders No Customize tab and skins
Charts and pivot tables No Chart Creator wizard

Rebuilding conditional formatting

Rules live in Column Settings under the Conditional formatting tab, one column at a time.

Numeric and date columns accept six comparison operators: less than, less than or equal, equal, not equal, greater than or equal, greater than. String columns get four: equal, not equal, contains, does not contain.

Each rule can set a color, change the content, or apply a CSS class, and it can target the cell, the whole row, or the column. That last option is how people build a heatmap table out of plain sales figures.

Rules are unlimited per column. They also render one by one, so forty rules on a wide table will drag.

Formula columns are not Excel formulas

The documentation says this outright, and it catches people out.

A formula column adds a calculated field on the fly (tax, margin, difference between two columns) using a popup formula constructor. Only integer and float columns can feed a formula.

From version 5.7, calculation functions became available inside formula columns too. Formula columns require the Standard tier or above.

Styling, skins, and totals

The Customize tab arrived in version 3.4 and covers skin, font, header, borders, row color, cell color, pagination and custom CSS.

  • Calculate total: sums a numeric column in the footer and recalculates on every filter change
  • Calculate average, min, max: same mechanism, same footer row
  • Shortcode output: totals can be placed outside the table entirely

Anyone used to hand-writing CSS for styling HTML tables will find the Customize tab covers most of it, and custom CSS covers the rest.

Typography sits in the same tab, which matters more than people assume given how much of a data table is numerals. The research on fonts for tables mostly comes down to tabular figures and consistent digit width.

How the WordPress Table Stays in Sync With the Source File

Three behaviors, three very different maintenance stories. Linked tables read the source file on every page load, so data updates the moment the file changes. Cached tables store a copy in the database and refresh on a schedule you define. Imported MySQL tables don’t sync at all.

Read on every load versus cached

By default the file gets parsed on each page view, which keeps data current and costs you speed. Enable Cache data and the parsed result is written to the database instead, so visitors get the cached copy.

Before version 5.0, linked files above 3,000 to 5,000 rows made page generation extremely slow and sometimes broke the page entirely. Caching is the fix.

Google’s widely cited research found that 53% of mobile visits are abandoned when a page takes over three seconds to load. That figure comes from a 2016 study, but the principle has held up, and an uncached 4,000-row table on a landing page is not a neutral choice.

Auto-update cache and the cron job

Auto-update cache refreshes the stored copy at a defined interval using a server cron event.

Set it to match your actual publishing rhythm. Nightly for a sales export, weekly for a price list, hourly if a system writes to the file that often.

The cron URL points at admin-ajax.php with a cache verification string. Most managed hosts let you add this from cPanel in about two minutes.

Server-side tables have their own version of this: a front-end auto-refresh interval that reloads the table without a page reload, which only works when server-side processing is on.

What breaks the connection

  • Renaming or reordering columns in the source file (the documentation flags this as strongly discouraged after the table exists)
  • Adding a new column to a linked workbook
  • Moving or renaming the file
  • Revoking a Google Sheets sharing link
  • A page cache plugin serving a stale HTML snapshot even after the table data updated

That last one causes more confusion than everything else combined. If the table looks frozen, clear the WordPress cache before you start debugging the plugin.

The monthly report workflow

Overwrite the file at the same path, keep the column structure identical, and let the cache refresh handle the rest.

No table rebuild, no shortcode change, no republishing the post.

How Imported Excel Data Is Turned Into Charts

The Chart Creator wizard reads the same imported data as the table. Pick the source table, choose which columns supply the labels and the series, select a chart type, then paste the generated chart shortcode into any page.

Four rendering engines, one wizard

Engine Character Licensing
Google Charts Clean defaults, wide type coverage Free
Highcharts Polished, includes Stock charts Free for commercial use inside the plugin
Chart.js Lightweight canvas rendering MIT
ApexCharts Best-looking out of the box Dual-licensed (see note)

Highcharts and ApexCharts integration sits on the Standard tier and above, so the two most polished engines aren’t in Starter.

The licensing line matters. Highcharts normally costs between $1,000 and $5,000 per year for standard commercial deployments according to Vendr’s marketplace data, with standalone reseller listings starting around $416 per developer.

Since wpDataTables 3.0.4, the bundled Highcharts library is free for commercial use, so you don’t buy a separate license to put a chart on a business site. Highcharts Stock is the exception, available only on Pro and Developer tiers.

One note on ApexCharts: it moved to a dual-license model, with its Community License free only for organizations under $2 million USD annual revenue. That applies to standalone use of the library rather than the copy bundled here, but it’s worth knowing if you also use ApexCharts elsewhere in your stack.

Matching chart type to data shape

Your spreadsheet already tells you which chart it wants.

  • Time series in a date column: line
  • Categories compared side by side: column or bar
  • Parts of a whole, under six slices: pie
  • Two numeric columns, looking for correlation: scatter

The line chart versus bar chart decision is the one people get wrong most often, usually by putting months on a bar chart when a line would show the trend better.

Worth reading the guidance on choosing the right chart type for your data before you build six charts and rebuild them all.

Charts that follow the table filters

Enable “follow table filtering” and the chart redraws whenever a visitor filters or searches the table.

Filter to one region, the chart shows that region. That single toggle is the difference between a static image and something people actually explore.

Placement is independent: you can embed a chart on a completely different page from its source table, since both reference the same stored data.

How Filtering, Sorting, and Front-End Editing Work on Imported Data

Every column gets a filter input type based on its data type, sorting runs on the declared type, and tables stored in MySQL can be edited directly from the front end by whichever WordPress user roles you authorize.

Filter configuration

Filter type is set per column in the Filtering tab, and it doesn’t have to match what the column looks like.

  • Text: free-text match on string columns
  • Number range: two inputs, useful on price or quantity
  • Date range: datepicker on both ends
  • Select box: single choice from existing values
  • Multiselect: several values at once

The global search field scans every cell and returns rows where any cell matches. It sits above the table alongside the entries-per-page selector.

Cascading filters, where one selection narrows the next, come from the Powerful Filters add-on rather than the core plugin. Anyone who has tried to hand-build a table filter in JavaScript knows why that add-on exists.

Editable tables and user permissions

Front-end editing needs the data in MySQL, and it needs the Standard tier or above. Linked Excel and Google Sheets tables are read-only by design, since the source of truth is the file.

Editor roles is a multi-select of WordPress user roles, and custom roles from membership plugins appear in the same dropdown from version 2.1 onward.

Setting Editor roles to “Everyone” with front-end editing on grants both logged-in and logged-out visitors the ability to change your data. The documentation warns about this explicitly. Do not do it.

Users see and edit only their own data pairs with a User ID column, so each contributor gets their own rows and nobody else’s.

Editor styles

Three options: a popup modal, inline editing with popover tools, or the Excel-like spreadsheet editor built on Handsontable.

The spreadsheet editor is the one that feels closest to the workbook people came from.

Export tools

The Table Tools block ships buttons for CSV, Excel, PDF, Copy to clipboard, Print, and column visibility toggling.

Two limitations are worth knowing before you promise anything to a client:

  • On server-side tables, only the visible rows export unless the visitor picks “Show All” first
  • Conditional formatting never appears in exported files

Table Tools are also unavailable on Simple tables. The Include HTML option, though, does carry link, image and email columns through to CSV, Excel, Print and Copy exports.

Which Performance Limits Apply to Large Excel Imports

File-based tables stay comfortable up to roughly 2,000 to 3,000 cells. Beyond that, the data belongs in MySQL with server-side processing, which the plugin forces on automatically once a query-based table passes 2,000 rows and treats as mandatory above 3,000 to 4,000.

What server-side processing actually changes

Without it, every row ships to the browser and the browser does the sorting. With it, MySQL does the work and returns only the rows on screen.

Show 10 rows per page and 10 rows get queried. Sort, filter, or page forward and an AJAX request fetches the next 10.

The catch: it only exists for tables stored in the database. A linked Excel file cannot use it, no matter how large the file is. It also requires the Standard tier or above.

The vendor’s documentation demonstrates the feature on a 2,560,000-row dataset that would otherwise take 5 to 15 minutes to load, assuming it loaded at all. That’s our own benchmark, so weigh it accordingly.

Three server settings that block big imports

Hosting kills more imports than data volume does.

  • memory_limit: 256M is the practical floor for a production WordPress site
  • max_execution_time: 60 seconds minimum, 300 for anything wide
  • upload_max_filesize: must exceed your workbook, and post_max_size should be at least double it

If post_max_size is smaller than upload_max_filesize, PHP discards the upload silently and you get no error at all. Standard MySQL practice applies on the other side too: an unindexed query on a million rows will be slow regardless of which plugin is asking.

Trimming the payload

Around 56% of websites pass all three Core Web Vitals according to recent HTTP Archive and CrUX data, with desktop clearing the bar far more often than mobile. A fat table is an easy way to land on the wrong side of that split.

Four levers, roughly in order of impact:

  1. Enable caching on linked file tables
  2. Drop the default display length to 10 or 25 rows
  3. Hide columns nobody filters on
  4. Turn off responsive mode on tables that scroll horizontally instead

Everything above is cheaper than the usual advice to speed up WordPress globally, because it fixes the specific page rather than the whole site. Sites handling genuinely large data sets should plan for MySQL storage from day one.

Database growth and leftovers

Every imported table becomes a real MySQL table. Delete the wpDataTable and, depending on your settings, the underlying database table can stay behind.

“Prevent deleting tables in database” is enabled by default, which protects your data and quietly accumulates orphans.

Audit these once a quarter. A routine WordPress database cleanup should include the wp_wpdatatables tables nobody has referenced in a year.

What the Excel Import Workflow Costs

Lite is free and does import Excel, CSV, XML, JSON and PHP arrays. Above that sit four paid tiers, sold as annual subscriptions or lifetime licenses: Starter and Standard for one domain, Pro for three, and Developer for unlimited.

The tier that matters for this article is Standard, not Starter. Here’s why.

Tier Domains What It Adds
Lite (free) 1 Linked and simple tables, basic charts, row cap
Starter 1 Unlimited tables and charts, Excel and CSV imports, Google Sheets
Standard 1 MySQL-query tables, front-end editing, server-side processing, formula columns, fixed columns, Highcharts and ApexCharts
Pro 3 Everything in Standard plus Highcharts Stock
Developer Unlimited Full feature set, REST API access

Read that Standard row again if you came here for the workflow above. Server-side processing, front-end editing, formula columns and MySQL-query tables all sit there, not on Starter. Someone who buys the cheapest paid plan for a large Excel dataset will find the scaling half of this article unavailable to them.

Annual pricing runs from roughly $59 at Starter through the mid-tiers up to the Developer plan, with lifetime licenses offered on the higher tiers and a 15-day money-back guarantee. Promotional discounts run more or less continuously and prices display in your local currency, so confirm the current figures on the pricing page rather than trusting a number in any article, this one included. Envato pricing runs separately: $299 Regular, $1,495 Extended.

Where Lite stops

The free version covers more than people expect and then hits a wall in a specific place.

Not in Lite: Google Sheets import, MySQL-query tables, manual tables, server-side processing, responsive mode, table filters, front-end editing, Excel-like editing, and the Table Constructor wizard.

In Lite: simple tables, linked file tables from Excel and CSV, basic charts, and the export tools. Row counts are also capped.

So the honest read is this. Lite gets your spreadsheet onto the page. Filters, mobile behavior and editing are the paid part, and those are usually the reason someone wanted a plugin in the first place.

Add-ons are priced separately

Add-on Purpose Basic Tier
Powerful Filters Cascade filters, hide table before filtering $39
Report Builder Generates DOCX and XLSX from table data $39
Master-Detail Tables Row details in a popup or separate page $35
Gravity Forms integration Editable tables from form entries $35

Add-on tiers scale the same way the core licenses do, with Pro and Developer versions covering three and unlimited domains respectively.

Forminator Forms integration is free. Formidable Forms and Forminator both connect form submissions straight into a table, which sidesteps the spreadsheet entirely for data you’re collecting rather than importing.

The free alternatives, honestly

TablePress carries more than 700,000 active installations with a 5.0 rating, imports Excel and CSV, and costs nothing for static tables. It also runs a vulnerability disclosure program with Patchstack, which is more than most plugins in this category can say. It’s the safest free default in the category, and if your spreadsheet never changes, it’s likely all you need.

Ninja Tables has a capable free tier with 70,000+ active installs, covered in more depth in this Ninja Tables breakdown.

Neither one does the linked-file workflow the same way: a source file that changes and a table that follows it without anyone opening wp-admin.

If your spreadsheet is genuinely static, take the free route. If it changes monthly, the comparison worth running is between the paid tiers rather than TablePress alternatives generally, and this rundown of WordPress table plugins covers the wider field.

FAQ on Getting Excel Into WordPress

Can I import an Excel file into WordPress without writing code?

Yes. Go to wpDataTables, Create a Table, pick the data source option, upload your .xlsx, and save. The plugin reads the header row, guesses column types, and generates a shortcode. No PHP, no SQL, and no manual work to build the data table.

Does the table update automatically when the Excel file changes?

Linked tables do. They read the source file on every page load, so overwriting the file updates the table. Imported MySQL tables do not sync, since the data now lives in the database independently of the workbook.

Which spreadsheet formats does wpDataTables read?

XLS, XLSX, XLSM, ODS and CSV. Non-file sources include Google Sheets published URLs, the Google Sheets API, JSON, nested JSON, XML, serialized PHP arrays, and direct MySQL queries against tables already sitting in your database.

Which wpDataTables plan do I need for a large Excel dataset?

Standard or above. Starter covers Excel and CSV imports plus Google Sheets, but MySQL-query tables, server-side processing, front-end editing and formula columns all start at Standard. If your workbook runs past a few thousand cells, Starter won’t carry it.

Does Excel formatting carry over during import?

No. Cell fills, fonts, borders, charts and pivot tables stay behind, and formulas import as calculated values rather than live formulas. Rebuild highlighting through conditional formatting rules. Merged cells are supported in simple tables only.

How do I embed the table in a page or post?

Paste the shortcode, something like [ wpdatatable id=1 ], anywhere WordPress runs shortcodes. A Gutenberg block and page builder widgets for Elementor, Divi, WPBakery and Avada work too. Theme files accept it through do_shortcode().

How many rows can a linked Excel table handle?

Roughly 2,000 to 3,000 cells, counting columns multiplied by rows. Past that, import the data into MySQL and enable server-side processing, which the plugin forces on automatically above 2,000 rows and treats as mandatory above 3,000. Both require the Standard tier.

Can visitors edit the imported table on the front end?

Only when the data sits in MySQL, and only on Standard or above. Linked file and Google Sheets tables stay read-only. Set which WordPress user roles get editing rights, and avoid the “Everyone” option, which exposes your data to logged-out visitors.

Is the free Lite version enough to import a spreadsheet?

For a static table, yes. Lite handles linked Excel, CSV, XML and JSON tables plus export tools. It excludes Google Sheets, MySQL queries, responsive mode, column filters, server-side processing and front-end editing, and caps row counts. TablePress is worth comparing if static is all you need.

Can I build charts from the imported spreadsheet?

Yes, through the Chart Creator wizard. Four engines are bundled: Google Charts, Highcharts, Chart.js and ApexCharts, though Highcharts and ApexCharts need Standard or above. Charts can follow table filtering and redraw as visitors search, which is what makes WordPress charts useful rather than decorative.

Why did my Excel import fail?

Usually server settings, not data. Check upload_max_filesize against your file size, memory_limit at 256M or higher, and max_execution_time. Malformed headers cause the rest: merged header cells, blank rows above row 1, duplicate column names.

Conclusion

Running Excel in WordPress comes down to one decision made early: whether the spreadsheet stays a linked file or becomes a database table.

Link it when the workbook remains the source of truth and someone overwrites it monthly. Move it into MySQL when visitors need to filter, sort past a few thousand rows, or edit values themselves.

Clean the header row before you upload anything. Set column types before you touch skins or colors, because sorting and filter inputs both depend on them.

Then the unglamorous parts start paying off. A cron event refreshes the cached copy, the Chart Creator reuses the same table ID, and nobody opens wp-admin to publish next quarter’s numbers.


Milan Jovanovic
Milan Jovanovic

Product Lead

Articles: 281