{"id":296320,"date":"2026-04-07T11:33:11","date_gmt":"2026-04-07T11:33:11","guid":{"rendered":"https:\/\/ja.wordpress.org\/plugins\/sheetmirror-for-google-sheets\/"},"modified":"2026-04-07T13:06:14","modified_gmt":"2026-04-07T13:06:14","slug":"sheetmirror-for-google-sheets","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/sheetmirror-for-google-sheets\/","author":23346985,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"SheetMirror for Google Sheets","header_author":"Kasuga","header_description":"Mirror your Google Sheets spreadsheet directly into any post or page as a fully formatted table \u2014 colours, borders, fonts, merged cells and more, via a simple shortcode.","assets_banners_color":"66a498","last_updated":"2026-04-07 13:06:14","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.me\/kasuga16","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":25,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kasuga16","date":"2026-04-07 13:06:14"}},"upgrade_notice":{"1.0.0":"<p>Initial release - no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3500664,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3500664,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544\u00d7500.png":{"filename":"banner-1544\u00d7500.png","revision":3500664,"resolution":"1544x500","location":"assets","locale":""},"banner-772\u00d7250.png":{"filename":"banner-772\u00d7250.png","revision":3500664,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-4.png":{"filename":"screenshot-4.png","revision":3500763,"resolution":"4","location":"plugin"},"screenshot-1.png":{"filename":"screenshot-1.png","revision":3500763,"resolution":"1","location":"plugin"},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3500763,"resolution":"2","location":"plugin"},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3500763,"resolution":"3","location":"plugin"}},"screenshots":{"1":"Step 1: Format your Google spreadsheet (colors, fonts, and merged cells).","2":"Step 2: Register tables and manage your API key in the SheetMirror settings.","3":"Step 3: Insert the [shortcode] into any page or post.","4":"Step 4: View your spreadsheet faithfully rendered as an HTML table."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[230,25296,80,9471,2289],"plugin_category":[43,56],"plugin_contributors":[246687],"plugin_business_model":[],"class_list":["post-296320","plugin","type-plugin","status-publish","hentry","plugin_tags-embed","plugin_tags-google-sheets","plugin_tags-shortcode","plugin_tags-spreadsheet","plugin_tags-table","plugin_category-customization","plugin_category-social-and-sharing","plugin_contributors-kasuga16","plugin_committers-kasuga16"],"banners":{"banner":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/assets\/banner-772\u00d7250.png?rev=3500664","banner_2x":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/assets\/banner-1544\u00d7500.png?rev=3500664","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/assets\/icon-128x128.png?rev=3500664","icon_2x":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/assets\/icon-256x256.png?rev=3500664","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/trunk\/screenshot-1.png?rev=3500763","caption":"Step 1: Format your Google spreadsheet (colors, fonts, and merged cells)."},{"src":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/trunk\/screenshot-2.png?rev=3500763","caption":"Step 2: Register tables and manage your API key in the SheetMirror settings."},{"src":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/trunk\/screenshot-3.png?rev=3500763","caption":"Step 3: Insert the [shortcode] into any page or post."},{"src":"https:\/\/ps.w.org\/sheetmirror-for-google-sheets\/trunk\/screenshot-4.png?rev=3500763","caption":"Step 4: View your spreadsheet faithfully rendered as an HTML table."}],"raw_content":"<!--section=description-->\n<p>SheetMirror embeds a live Google Sheets spreadsheet into any WordPress post or page using a simple shortcode. Unlike basic CSV importers, SheetMirror can connect to the <strong>Google Sheets API v4<\/strong> to retrieve not just your data, but the full visual formatting of every cell - giving your readers a table that looks exactly like the one you designed in Google Sheets.<\/p>\n\n<h4>Why SheetMirror ?<\/h4>\n\n<p>Spreadsheet data on the web is often reduced to a bland, unstyled grid. The formatting you spent time on - the bold headers, the colour-coded rows, the carefully aligned columns - disappears entirely. SheetMirror solves this by faithfully translating your Google Sheets formatting into standard HTML and inline CSS, so the table your readers see on your site is a true reflection of the original.<\/p>\n\n<h4>Two Fetch Modes<\/h4>\n\n<p><strong>API Mode (recommended)<\/strong>\nUses the Google Sheets API v4 to retrieve both cell values and full formatting metadata. A Google Cloud API key is required. This is the mode that enables all the rich formatting features described below.<\/p>\n\n<p><strong>CSV Mode (no API key needed)<\/strong>\nFetches data via Google's public CSV export URL. No API key or account is required - just share your sheet as \"Anyone with the link can view.\" Cell values are displayed in a clean, readable table, without formatting. Ideal for simple data tables where styling is not a priority.<\/p>\n\n<h4>Formatting Reproduced via the API<\/h4>\n\n<p>When API Mode is enabled, SheetMirror retrieves and applies the following formatting properties from your spreadsheet:<\/p>\n\n<ul>\n<li><strong>Horizontal alignment<\/strong> - Left, Centre, Right, and Justify, applied per cell.<\/li>\n<li><strong>Vertical alignment<\/strong> - Top, Middle, and Bottom.<\/li>\n<li><strong>Text decoration<\/strong> - Bold (<code>&lt;strong&gt;<\/code>), italic (<code>&lt;em&gt;<\/code>), underline (<code>&lt;u&gt;<\/code>), and strikethrough (<code>&lt;s&gt;<\/code>) are each rendered using the appropriate semantic HTML element.<\/li>\n<li><strong>Font family<\/strong> - The typeface specified in the spreadsheet is passed through as a CSS <code>font-family<\/code> value.<\/li>\n<li><strong>Font size<\/strong> - Rendered as <code>pt<\/code> values, matching the size as set in Google Sheets.<\/li>\n<li><strong>Font colour<\/strong> - Foreground text colour is reproduced as a CSS <code>color<\/code> value.<\/li>\n<li><strong>Cell background colour<\/strong> - Background fill colours are rendered as CSS <code>background-color<\/code> values. White and black (the default colours) are suppressed to avoid overriding your theme's own styling.<\/li>\n<li><strong>Merged cells<\/strong> - Merge regions are faithfully reproduced using HTML <code>rowspan<\/code> and <code>colspan<\/code> attributes.<\/li>\n<li><strong>Cell borders<\/strong> - Per-cell border styles (solid, dashed, dotted, double) and weights (1 px, 2 px, 3 px) are applied as individual CSS <code>border-{side}<\/code> declarations.<\/li>\n<li><strong>Text wrap strategy<\/strong> - Wrap and Clip modes are translated to the appropriate CSS <code>white-space<\/code> and <code>overflow<\/code> rules. The Overflow mode (content spilling into adjacent cells) is a layout behaviour specific to Google Sheets and cannot be reproduced in an HTML table.<\/li>\n<li><strong>Text direction<\/strong> - Right-to-left text is reproduced with CSS <code>direction: rtl<\/code>.<\/li>\n<li><strong>Hyperlinks<\/strong> - Both cell-level hyperlinks and links set via the Google Sheets link format are rendered as <code>&lt;a&gt;<\/code> tags with <code>target=\"_blank\" rel=\"noopener noreferrer\"<\/code>.<\/li>\n<li><strong>Column widths<\/strong> - Each column's pixel width is retrieved from the spreadsheet and applied via <code>&lt;colgroup&gt;<\/code> elements, reproducing the exact column proportions of the original. Active when the \"Auto column width\" option is off (the default).<\/li>\n<li><strong>Row heights<\/strong> - Each row's pixel height is retrieved and applied as an inline <code>height<\/code> style on the <code>&lt;tr&gt;<\/code> element, preserving the vertical spacing of the original spreadsheet. Active when the \"Auto column width\" option is off (the default).<\/li>\n<\/ul>\n\n<h4>Table Display Options<\/h4>\n\n<p>Each registered table can be configured independently with the following options:<\/p>\n\n<ul>\n<li><strong>Use Google Sheets API<\/strong> - Toggle between API Mode (full formatting) and CSV Mode (values only).<\/li>\n<li><strong>Treat first row as header<\/strong> - Renders the first row inside a <code>&lt;thead&gt;<\/code> element using <code>&lt;th&gt;<\/code> cells with <code>scope=\"col\"<\/code>, improving accessibility and allowing header-specific styling.<\/li>\n<li><strong>Auto column width<\/strong> - When off (default), column widths are taken directly from the spreadsheet's pixel dimensions via the API, reproducing the layout as designed in Google Sheets. When on, each column shrinks to fit its content (<code>table-layout: auto<\/code>). The \"Auto\" badge is shown in the table list only when this option is enabled.<\/li>\n<li><strong>Borderless<\/strong> - Hides all cell borders for a cleaner, minimal presentation. When off, a standard 1 px grid is shown as a fallback, with per-cell API borders taking priority where available.<\/li>\n<\/ul>\n\n<h4>Caching<\/h4>\n\n<p>All API and CSV responses are cached using WordPress transients for 5 minutes, keeping your page loads fast and your API quota usage low. A \"Clear Cache\" button is available for every registered table so you can force a refresh immediately after updating your spreadsheet.<\/p>\n\n<h4>Shortcode Usage<\/h4>\n\n<p>After registering a table in <strong>Settings \u2192 SheetMirror<\/strong>, embed it anywhere using its tag name as a shortcode:<\/p>\n\n<pre><code>[your_tag_name]\n<\/code><\/pre>\n\n<p>For example, if you registered a table with the tag <code>sales_2026<\/code>, place <code>[sales_2026]<\/code> in any post, page, or widget area.<\/p>\n\n<p><strong>Scaling the table<\/strong><\/p>\n\n<p>An optional <code>scale<\/code> attribute lets you render the table at a percentage of its original size. Accepted values are integers between 10 and 200.<\/p>\n\n<pre><code>[sales_2026 scale=\"50\"]\n<\/code><\/pre>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A Google Sheets spreadsheet shared as \"Anyone with the link can view.\"<\/li>\n<li>For API Mode: a Google Cloud API key with the Google Sheets API enabled.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to external services operated by Google. Depending on the fetch mode you choose, one or both of the following connections will be made.<\/p>\n\n<h4>Google Sheets API v4 (API Mode)<\/h4>\n\n<p>When API Mode is enabled, this plugin sends requests to the Google Sheets API v4 to retrieve cell values and formatting metadata from your spreadsheet.<\/p>\n\n<ul>\n<li><strong>Service:<\/strong> Google Sheets API v4, provided by Google LLC.<\/li>\n<li><strong>Data sent:<\/strong> The Spreadsheet ID and cell range you registered, together with your Google Cloud API key. No personal data of your site's visitors is transmitted.<\/li>\n<li><strong>When:<\/strong> Every time a page containing the shortcode is loaded and no valid cached response exists (cache duration: 5 minutes). A request is also made when you use the connection-test button in the settings page.<\/li>\n<li><strong>Terms of Service:<\/strong> https:\/\/developers.google.com\/terms<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Google Sheets CSV Export (CSV Mode)<\/h4>\n\n<p>When CSV Mode is enabled, this plugin fetches data from Google's public CSV export URL for your spreadsheet.<\/p>\n\n<ul>\n<li><strong>Service:<\/strong> Google Sheets public CSV export (<code>\/export?format=csv<\/code>), provided by Google LLC.<\/li>\n<li><strong>Data sent:<\/strong> The Spreadsheet ID and numeric sheet identifier (gid). No API key or visitor data is transmitted.<\/li>\n<li><strong>When:<\/strong> Every time a page containing the shortcode is loaded and no valid cached response exists (cache duration: 5 minutes).<\/li>\n<li><strong>Terms of Service:<\/strong> https:\/\/policies.google.com\/terms<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Google Sheets Sheet List (CSV Mode - sheet name resolution)<\/h4>\n\n<p>When CSV Mode is enabled and a sheet name is specified in the cell range, this plugin fetches the spreadsheet's HTML view page in order to resolve the sheet name to its numeric identifier (gid). This request is made once per spreadsheet and the result is cached together with the table data.<\/p>\n\n<ul>\n<li><strong>Service:<\/strong> Google Sheets HTML view page (<code>\/htmlview<\/code>), provided by Google LLC.<\/li>\n<li><strong>Data sent:<\/strong> The Spreadsheet ID only. No API key or visitor data is transmitted.<\/li>\n<li><strong>When:<\/strong> On the first load of a page containing a CSV Mode shortcode that specifies a sheet name, when no valid cached response exists. Not used when a gid is available directly from the registered URL, or when API Mode is enabled.<\/li>\n<li><strong>Terms of Service:<\/strong> https:\/\/policies.google.com\/terms<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h3>Donate<\/h3>\n\n<p>If you find this plugin useful and would like to support its development,\nyou can make a voluntary donation via PayPal.<\/p>\n\n<p>Your support helps keep this plugin maintained and improved.\nThank you!<\/p>\n\n<p>PayPal: https:\/\/www.paypal.me\/Kasuga16<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin dashboard, go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Click <strong>Upload Plugin<\/strong>, choose the <code>sheetmirror-for-google-sheets.zip<\/code> file, and click <strong>Install Now<\/strong>.<\/li>\n<li>After installation, click <strong>Activate Plugin<\/strong>.<\/li>\n<li>Navigate to <strong>Settings \u2192 SheetMirror<\/strong>.<\/li>\n<li><em>(API Mode only)<\/em> Enter your Google Cloud API key and click <strong>Save<\/strong>.<\/li>\n<li>Click <strong>Register New Table<\/strong>, fill in the tag name, spreadsheet URL, and cell range, then click <strong>Register<\/strong>.<\/li>\n<li>Place the shortcode <code>[your_tag_name]<\/code> in any post or page.\n\u3000<\/li>\n<\/ol>\n\n<h4>Getting a Google Cloud API Key<\/h4>\n\n<ol>\n<li>Open the <a href=\"https:\/\/console.cloud.google.com\/apis\/credentials\">Google Cloud Console<\/a>.<\/li>\n<li>Create a new project (or select an existing one).<\/li>\n<li>Go to <strong>APIs &amp; Services \u2192 Library<\/strong> and enable the <strong>Google Sheets API<\/strong>.<\/li>\n<li>Go to <strong>APIs &amp; Services \u2192 Credentials<\/strong> and click <strong>Create Credentials \u2192 API Key<\/strong>.<\/li>\n<li>Copy the key and paste it into <strong>Settings \u2192 SheetMirror \u2192 API Key<\/strong>.<\/li>\n<\/ol>\n\n<p>For security, it is recommended to restrict your API key to the Google Sheets API and to your site's server IP address in the Google Cloud Console.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%20to%20use%20this%20plugin%3F\"><h3>Do I need an API key to use this plugin?<\/h3><\/dt>\n<dd><p>No. CSV Mode works without any API key - just share your spreadsheet as \"Anyone with the link can view\" and register the table with the \"Use Google Sheets API\" option turned off. Cell values will be displayed without formatting.<\/p><\/dd>\n<dt id=\"why%20does%20my%20table%20look%20different%20from%20the%20one%20in%20google%20sheets%3F\"><h3>Why does my table look different from the one in Google Sheets?<\/h3><\/dt>\n<dd><p>SheetMirror reproduces all formatting that is exposed by the Google Sheets API v4. Some visual elements - such as conditional formatting rules and sparklines - are not part of the cell-level formatting data returned by the API and therefore cannot be replicated.<\/p>\n\n<p>Also note that font families specified in your spreadsheet may not be available on your visitors' devices. In that case the browser will fall back to the sans-serif system font.<\/p><\/dd>\n<dt id=\"can%20i%20register%20more%20than%20one%20table%3F\"><h3>Can I register more than one table?<\/h3><\/dt>\n<dd><p>Yes. You can register as many tables as you like, each with its own tag, URL, range, and display options. Every table gets its own shortcode.<\/p><\/dd>\n<dt id=\"what%20cell%20range%20format%20should%20i%20use%3F\"><h3>What cell range format should I use?<\/h3><\/dt>\n<dd><p>Standard A1 notation is supported. Examples:<\/p>\n\n<ul>\n<li><code>A1:D10<\/code> - a range on the default sheet<\/li>\n<li><code>Sheet1!B2:E20<\/code> - a range on a named sheet<\/li>\n<\/ul><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20the%20block%20editor%20%28gutenberg%29%3F\"><h3>Is the plugin compatible with the Block Editor (Gutenberg)?<\/h3><\/dt>\n<dd><p>Yes. Place the shortcode inside a <strong>Shortcode<\/strong> block, or use it in the Classic block. The table will render on the front end exactly as configured.<\/p><\/dd>\n<dt id=\"my%20spreadsheet%20contains%20sensitive%20data.%20is%20it%20safe%20to%20use%20csv%20mode%3F\"><h3>My spreadsheet contains sensitive data. Is it safe to use CSV Mode?<\/h3><\/dt>\n<dd><p>CSV Mode fetches data from Google's public export URL, which means anyone with the spreadsheet URL can view the data. Only use CSV Mode (or API Mode) with spreadsheets you are comfortable making publicly readable. Always use the \"Anyone with the link can view\" sharing permission rather than \"Public on the web\" where possible.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Added optional <code>scale<\/code> shortcode attribute (10\u2013200) to resize a table without affecting the surrounding page layout.<\/li>\n<li>API Mode: full cell formatting via Google Sheets API v4.<\/li>\n<li>CSV Mode: value-only fetch with no API key required.<\/li>\n<li>Supports alignment, text decoration, font family\/size, colours, merged cells, borders, text wrap (Wrap &amp; Clip), RTL text, and hyperlinks.<\/li>\n<li>Per-table options: header row, auto\/fixed column width, borderless mode.<\/li>\n<li>Column widths and row heights reproduced from spreadsheet pixel dimensions in fixed (default) mode.<\/li>\n<li>WordPress transient caching with manual clear-cache button.<\/li>\n<li>AJAX connection test for API key and range validation.<\/li>\n<li>Live shortcode tag preview in the registration form.<\/li>\n<\/ul>","raw_excerpt":"Mirror your Google Sheets spreadsheet directly into any post or page as a fully formatted HTML table - colours, borders, fonts, merged cells and more.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/296320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=296320"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kasuga16"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=296320"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=296320"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=296320"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=296320"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=296320"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=296320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}