{"id":289553,"date":"2026-03-28T18:47:29","date_gmt":"2026-03-28T18:47:29","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sheetfusion\/"},"modified":"2026-04-03T23:37:38","modified_gmt":"2026-04-03T23:37:38","slug":"sheetfusion","status":"publish","type":"plugin","link":"https:\/\/de.wordpress.org\/plugins\/sheetfusion\/","author":23461917,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.1.1","stable_tag":"2.1.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"SheetFusion - Sync Google Sheets Into Tables. No Row Limits, No API Keys.","header_author":"Isomite","header_description":"Display public Google Sheets as interactive tables with sorting, search, pagination, filtering, export, and column visibility \u2014 no API key required.","assets_banners_color":"192426","last_updated":"2026-04-03 23:37:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/isomite.com\/sheetfusion","header_author_uri":"https:\/\/isomite.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":106,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.0":{"tag":"2.1.0","author":"isomite","date":"2026-03-28 18:47:02"},"2.1.1":{"tag":"2.1.1","author":"isomite","date":"2026-04-03 23:37:38"}},"upgrade_notice":{"2.1.1":"<p>Adds native Gutenberg block support. Fully backward-compatible \u2014 all existing shortcodes continue to work without any changes.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3494129,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3494129,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3494129,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3494129,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"sheetfusion\/table":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"sheetfusion\/table","version":"2.1.1","title":"SheetFusion Table","category":"embed","icon":"spreadsheet","description":"Embed a public Google Sheet as an interactive, sortable, searchable table \u2014 no API key required.","keywords":["google sheets","table","spreadsheet","embed","data"],"textdomain":"sheetfusion","attributes":{"id":{"type":"string","default":""},"sheet":{"type":"string","default":""},"caption":{"type":"string","default":""},"theme":{"type":"string","default":"default"},"pageLength":{"type":"integer","default":10},"orderColumn":{"type":"integer","default":1},"orderDir":{"type":"string","default":"asc"},"export":{"type":"string","default":"csv,excel,pdf,print"},"colVisibility":{"type":"boolean","default":true},"filterColumn":{"type":"integer","default":0},"filterValue":{"type":"string","default":""},"filterMode":{"type":"string","default":"exact"},"linkColumns":{"type":"string","default":""},"className":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:..\/..\/assets\/js\/blocks.js","editorStyle":"file:..\/..\/assets\/css\/blocks-editor.css","render":"file:render.php"}},"tagged_versions":["2.1.0","2.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[15862,230,25296,9471,2289],"plugin_category":[56],"plugin_contributors":[258878],"plugin_business_model":[],"class_list":["post-289553","plugin","type-plugin","status-publish","hentry","plugin_tags-data-table","plugin_tags-embed","plugin_tags-google-sheets","plugin_tags-spreadsheet","plugin_tags-table","plugin_category-social-and-sharing","plugin_contributors-isomite","plugin_committers-isomite"],"banners":{"banner":"https:\/\/ps.w.org\/sheetfusion\/assets\/banner-772x250.png?rev=3494129","banner_2x":"https:\/\/ps.w.org\/sheetfusion\/assets\/banner-1544x500.png?rev=3494129","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sheetfusion\/assets\/icon-128x128.png?rev=3494129","icon_2x":"https:\/\/ps.w.org\/sheetfusion\/assets\/icon-256x256.png?rev=3494129","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>SheetFusion turns any publicly published Google Sheet into a fully interactive table on your WordPress site in seconds \u2014 no API key, no OAuth, no complicated setup. Publish your sheet, paste the shortcode or drop in the block, done.<\/p>\n\n<p><strong>No personal visitor data is ever transmitted to external servers.<\/strong><\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li><strong>Gutenberg block<\/strong> \u2014 native block editor support with a full settings sidebar; live server-side preview in the editor canvas<\/li>\n<li><strong>Shortcode<\/strong> \u2014 <code>[sheetfusion]<\/code> continues to work exactly as before; the block and shortcode share the same rendering engine<\/li>\n<li><strong>Client-side search<\/strong> \u2014 full-text search across all columns<\/li>\n<li><strong>Sortable columns<\/strong> \u2014 click any header to sort<\/li>\n<li><strong>Pagination<\/strong> \u2014 configurable rows per page<\/li>\n<li><strong>Export buttons<\/strong> \u2014 CSV, Excel, PDF, and Print<\/li>\n<li><strong>Column visibility toggle<\/strong> \u2014 let readers show\/hide columns<\/li>\n<li><strong>Server-side filtering<\/strong> \u2014 pre-filter rows by any column value<\/li>\n<li><strong>Auto-link columns<\/strong> \u2014 automatically turn bare URLs into clickable links in any column you choose<\/li>\n<li><strong>Row cap<\/strong> \u2014 configurable maximum rows per table prevents memory issues on large sheets<\/li>\n<li><strong>Four visual themes<\/strong> \u2014 Default, Stripe, Minimal, and Dark<\/li>\n<li><strong>Transient caching<\/strong> \u2014 reduces Google requests; configurable duration<\/li>\n<li><strong>Conditional asset loading<\/strong> \u2014 DataTables scripts load only on pages that contain a SheetFusion block or shortcode; zero overhead everywhere else<\/li>\n<li><strong>Admin dashboard<\/strong> \u2014 save and manage all your sheets with one-click shortcode copying<\/li>\n<li><strong>Accessible<\/strong> \u2014 semantic HTML, ARIA attributes, keyboard-navigable tables<\/li>\n<\/ul>\n\n<p><strong>How it works<\/strong><\/p>\n\n<p>SheetFusion fetches your sheet in CSV format via Google's public <code>gviz\/tq<\/code> endpoint. No authentication is required as long as the sheet is published to the web.<\/p>\n\n<p><strong>External Services &amp; Third-Party Libraries<\/strong><\/p>\n\n<p>This plugin connects to the following external service:<\/p>\n\n<ul>\n<li><strong>Google Sheets<\/strong> (<code>docs.google.com<\/code>) \u2014 your WordPress server fetches the sheet data directly using the Sheet ID you provide. No personal visitor data is sent; only the Sheet ID and tab name are included in the request. Please review <a href=\"https:\/\/policies.google.com\/privacy\">Google's Privacy Policy<\/a> and <a href=\"https:\/\/policies.google.com\/terms\">Terms of Service<\/a>.<\/li>\n<\/ul>\n\n<p>The following third-party JavaScript and CSS libraries are <strong>bundled locally<\/strong> within the plugin (no external CDN requests are made to your visitors' browsers):<\/p>\n\n<ul>\n<li><strong>DataTables 1.13.8<\/strong> \u2014 <a href=\"https:\/\/datatables.net\/license\/\">datatables.net<\/a> \u2014 MIT licence<\/li>\n<li><strong>DataTables Buttons 2.4.2<\/strong> \u2014 MIT licence<\/li>\n<li><strong>pdfmake 0.2.7<\/strong> \u2014 <a href=\"http:\/\/pdfmake.org\">pdfmake.org<\/a> \u2014 MIT licence<\/li>\n<li><strong>JSZip 3.10.1<\/strong> \u2014 <a href=\"https:\/\/stuk.github.io\/jszip\/\">stuk.github.io\/jszip<\/a> \u2014 MIT licence<\/li>\n<\/ul>\n\n<p><strong>Support<\/strong><\/p>\n\n<p>Have a question or found a bug? Post in the Support tab above and we'll get back to you.<\/p>\n\n<!--section=installation-->\n<p><strong>Via the WordPress plugin installer (recommended)<\/strong><\/p>\n\n<ol>\n<li>In your WordPress dashboard go to <em>Plugins \u2192 Add New<\/em>.<\/li>\n<li>Search for <strong>SheetFusion<\/strong> and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>SheetFusion \u2192 My Sheets<\/strong> in the admin menu and add your first sheet.<\/li>\n<\/ol>\n\n<p><strong>Manual installation via FTP<\/strong><\/p>\n\n<ol>\n<li>Download the plugin zip and extract it.<\/li>\n<li>Upload the <code>sheetfusion<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate SheetFusion via <em>Plugins \u2192 Installed Plugins<\/em>.<\/li>\n<li>Go to <strong>SheetFusion \u2192 My Sheets<\/strong> in the admin menu and add your first sheet.<\/li>\n<\/ol>\n\n<p><strong>Publish your Google Sheet first<\/strong><\/p>\n\n<p>In Google Sheets: <em>File \u2192 Share \u2192 Publish to the web \u2192 select your sheet tab \u2192 Publish.<\/em><\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20find%20my%20sheet%20id%3F\"><h3>Where do I find my Sheet ID?<\/h3><\/dt>\n<dd><p>It's the long string in your Google Sheets URL between <code>\/d\/<\/code> and <code>\/edit<\/code>:\n    https:\/\/docs.google.com\/spreadsheets\/d\/{SHEET_ID}\/edit<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20a%20sheetfusion%20table%20in%20the%20block%20editor%3F\"><h3>How do I add a SheetFusion table in the block editor?<\/h3><\/dt>\n<dd><p>Click the <strong>+<\/strong> button to add a new block, search for <strong>SheetFusion Table<\/strong>, and insert it. Enter your Sheet ID and Sheet Name in the settings panel on the right. The table will render a live preview directly in the editor.<\/p><\/dd>\n<dt id=\"my%20sheet%20is%20not%20loading%20%E2%80%94%20what%20should%20i%20check%3F\"><h3>My sheet is not loading \u2014 what should I check?<\/h3><\/dt>\n<dd><p>Make sure the sheet is published to the web (File \u2192 Share \u2192 Publish to the web). The plugin cannot access private sheets.<\/p><\/dd>\n<dt id=\"can%20i%20display%20multiple%20sheets%20on%20the%20same%20page%3F\"><h3>Can I display multiple sheets on the same page?<\/h3><\/dt>\n<dd><p>Yes. Each block or shortcode renders a completely independent table with a unique ID.<\/p><\/dd>\n<dt id=\"how%20do%20i%20filter%20rows%20to%20only%20show%20certain%20data%3F\"><h3>How do I filter rows to only show certain data?<\/h3><\/dt>\n<dd><p>Use the <code>filter_column<\/code> and <code>filter_value<\/code> attributes. For example, to show only rows where column 2 contains \"London\":<\/p>\n\n<pre><code>[sheetfusion id=\"...\" sheet=\"Sheet1\" filter_column=\"2\" filter_value=\"London\" filter_mode=\"contains\"]\n<\/code><\/pre>\n\n<p>In the block editor, these options are available in the <strong>Server-Side Filter<\/strong> panel in the block settings sidebar.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20the%20export%20buttons%3F\"><h3>Can I disable the export buttons?<\/h3><\/dt>\n<dd><p>Yes \u2014 set <code>export=\"\"<\/code> to hide all buttons, or pass a specific list: <code>export=\"csv,print\"<\/code>. In the block editor, use the <strong>Export &amp; Buttons<\/strong> panel.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20the%20theme%3F\"><h3>How do I change the theme?<\/h3><\/dt>\n<dd><p>Add <code>theme=\"dark\"<\/code> (or <code>stripe<\/code> \/ <code>minimal<\/code>) to your shortcode. In the block editor, select a theme from the <strong>Display<\/strong> panel. You can also set a site-wide default in SheetFusion \u2192 Settings.<\/p><\/dd>\n<dt id=\"how%20do%20i%20make%20urls%20in%20my%20sheet%20clickable%3F\"><h3>How do I make URLs in my sheet clickable?<\/h3><\/dt>\n<dd><p>Use the <code>link_columns<\/code> attribute with a comma-separated list of 1-based column numbers. For example, to auto-link URLs in columns 1 and 3:<\/p>\n\n<pre><code>[sheetfusion id=\"...\" sheet=\"Sheet1\" link_columns=\"1,3\"]\n<\/code><\/pre>\n\n<p>In the block editor, this option is available in the <strong>Advanced<\/strong> panel.<\/p><\/dd>\n<dt id=\"my%20sheet%20has%20tens%20of%20thousands%20of%20rows%20%E2%80%94%20will%20it%20work%3F\"><h3>My sheet has tens of thousands of rows \u2014 will it work?<\/h3><\/dt>\n<dd><p>SheetFusion renders tables in the browser, so very large sheets can affect page performance. A configurable row cap (default 5,000) is applied to prevent memory issues. Increase or decrease it in SheetFusion \u2192 Settings.<\/p><\/dd>\n<dt id=\"can%20i%20force%20a%20cache%20refresh%3F\"><h3>Can I force a cache refresh?<\/h3><\/dt>\n<dd><p>Yes, but only administrators can do this. Add <code>refresh=\"1\"<\/code> to your shortcode. This bypasses the cache for that render only. (The block always renders from cache in the editor preview \u2014 force-refresh only applies to the shortcode.)<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20collect%20or%20transmit%20visitor%20data%3F\"><h3>Does this plugin collect or transmit visitor data?<\/h3><\/dt>\n<dd><p>No. SheetFusion does not collect, store, or transmit any personal data about your site's visitors. The only external request it makes is from your server to Google to fetch the sheet content \u2014 no visitor IP addresses or identifiers are included.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.1 \u2014 2026-04-03<\/h4>\n\n<ul>\n<li>Feature: native Gutenberg block (<code>sheetfusion\/table<\/code>) \u2014 full block editor support with settings sidebar (Sheet Source, Display, Sorting, Export &amp; Buttons, Server-Side Filter, Advanced panels) and live server-side preview in the editor canvas<\/li>\n<li>Architecture: block and shortcode share a single PHP rendering function (<code>SheetFusion_Shortcode::render()<\/code>) \u2014 no duplication of fetch, parse, HTML build, caching, or DataTables initialisation logic<\/li>\n<li>Asset loading: DataTables scripts continue to load conditionally; the existing <code>mark_assets_needed()<\/code> flag is triggered by the block render path in exactly the same way as the shortcode<\/li>\n<li>Added <code>blocks\/sheetfusion-table\/block.json<\/code>, <code>blocks\/sheetfusion-table\/render.php<\/code>, <code>assets\/js\/blocks.js<\/code>, <code>assets\/css\/blocks-editor.css<\/code><\/li>\n<li>Updated plugin title to \"SheetFusion - Sync Google Sheets Into Tables. No Row Limits, No API Keys.\"<\/li>\n<li>Bumped version to 2.1.1; updated Tested up to: 6.9<\/li>\n<\/ul>\n\n<h4>2.1.0 \u2014 2025-01-01<\/h4>\n\n<ul>\n<li>Security: removed <code>style=<\/code> attribute from <code>wp_kses<\/code> allowlist in cell output \u2014 eliminates a CSS injection vector from sheet data<\/li>\n<li>Performance: DataTables assets now load conditionally only on pages that contain a [sheetfusion] shortcode (zero overhead on all other pages)<\/li>\n<li>Standards: replaced raw inline <code>&lt;script&gt;<\/code> output with <code>wp_add_inline_script()<\/code> \u2014 correct WordPress practice<\/li>\n<li>Standards: wrapped all raw SQL queries in <code>$wpdb-&gt;prepare()<\/code> (deactivation hook and AJAX cache-clear handler)<\/li>\n<li>Standards: replaced deprecated <code>current_time('timestamp')<\/code> with <code>time()<\/code><\/li>\n<li>i18n: moved all user-facing JS strings into <code>wp_localize_script<\/code> so they are translatable<\/li>\n<li>i18n: removed deprecated <code>document.execCommand('copy')<\/code> fallback; Clipboard API used exclusively<\/li>\n<li>Feature: configurable row cap (default 5,000) with admin notice when limit is reached \u2014 prevents memory exhaustion on large sheets<\/li>\n<li>Feature: <code>link_columns<\/code> shortcode attribute lets you specify exactly which columns should auto-link bare URLs (previously hard-coded to column 1 only)<\/li>\n<li>Feature: <code>refresh=\"1\"<\/code> attribute now restricted to administrators to prevent cache-busting by unprivileged users<\/li>\n<li>Maintenance: bumped version to 2.1.0 and updated Tested up to: 6.7<\/li>\n<li>Added <code>uninstall.php<\/code> to clean up all plugin data on deletion<\/li>\n<\/ul>\n\n<h4>2.0.0 \u2014 2024-06-01<\/h4>\n\n<ul>\n<li>Complete rewrite \u2014 proper multi-file plugin structure<\/li>\n<li>Admin dashboard to save and manage sheets<\/li>\n<li>Export buttons: CSV, Excel, PDF, Print (DataTables Buttons extension)<\/li>\n<li>Column visibility toggle<\/li>\n<li>Four visual themes: Default, Stripe, Minimal, Dark<\/li>\n<li>Global settings: cache duration, default page length, default theme<\/li>\n<li>Improved security: nonce verification on all AJAX requests, wp_kses sanitisation on cell output<\/li>\n<li>Unique table IDs using wp_generate_uuid4() \u2014 supports multiple tables per page<\/li>\n<li>HTTP status code check with user-friendly error messaging<\/li>\n<li>Translation-ready (text domain: sheetfusion)<\/li>\n<\/ul>\n\n<h4>1.0.0 \u2014 2024-01-01<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Display any public Google Sheet as an interactive, sortable, searchable table \u2014 no API key required. Zero setup.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/289553","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=289553"}],"author":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/isomite"}],"wp:attachment":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=289553"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=289553"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=289553"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=289553"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=289553"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=289553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}