Skip to content

Repository files navigation

TCOfficeView: a Total Commander Lister Plugin that Previews Microsoft Office Documents

Build GitHub Sponsors Ko-fi Revolut

A Total Commander Lister plugin that previews Microsoft Office documents (Word, Excel, PowerPoint, Outlook MSG, Visio), PDF, and anything else Windows Explorer's preview pane (Alt+P) can show, directly in TC's F3 / Quick View (Ctrl+Q) pane. Whatever Explorer previews on your machine, this plugin previews in the Lister pane.

The plugin displays previews exactly the way Windows Explorer or Outlook do — it does not parse documents itself, nor does it carry a managed runtime. For files it cannot preview (no handler installed for that extension) the plugin steps aside and Total Commander uses your next configured Lister plugin or its built-in viewer, so installing it never takes anything away from you.

What you need on the target computer depends on the file type: MS Office for Word / Excel / PowerPoint / Outlook content; nothing extra for PDF on Windows 10+ (Microsoft Edge ships an in-the-box handler); whatever application installs the handler for everything else.

TCOfficeView shown on Word, Excel and PowerPoint sample files

Project page: https://github.com/michal-ruzicka/TCOfficeView — source code, releases and issue tracker.

Binary releases: https://github.com/michal-ruzicka/TCOfficeView/releases

Support: If you find this plugin useful, consider supporting its development.


Installation

The recommended way is the Total Commander auto-installer:

  1. Download TCOfficeView.vX.Y.Z.zip from the latest release.
  2. In Total Commander, navigate to the ZIP file and press Enter.
  3. TC detects the bundled pluginst.inf and asks whether to install the plugin — confirm.
  4. Press F3 or Ctrl+Q on a .docx / .xlsx / .pptx file to verify.

If you prefer to install manually, unzip the archive into a persistent folder (for example C:\Tools\TCOfficeView\) and add TCOfficeView.wlx (32-bit TC) or TCOfficeView.wlx64 (64-bit TC) under Configuration → Options → Plugins → Lister plugins → Configure → Add.

Upgrading from an earlier version? Total Commander keeps an already-configured detect string when a plugin is replaced, so users coming from v2.1 or earlier won't automatically pick up the new universal file-type support — see Upgrading from an Earlier Version below for how to refresh it.

Verifying Releases

Each release ZIP is accompanied by a detached GPG signature file (TCOfficeView.vX.Y.Z.zip.asc). Before installing, verify that the archive has not been tampered with:

gpg --keyserver keys.openpgp.org --recv-keys 489C5EC80FD62BE89E59B4F719C13E8CE0F5DB61
gpg --verify TCOfficeView.vX.Y.Z.zip.asc TCOfficeView.vX.Y.Z.zip

GPG should report Good signature from "Michal Růžička <ruzicka.mich@gmail.com>". The full fingerprint of the signing key is 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61.

Reproducible Builds

Every release is built from a pinned, identical toolchain, so the same source code always produces byte-for-byte identical binaries. This means you are not just trusting the GPG signature — you can independently confirm that the published binary matches the published source code by building it yourself and comparing the SHA-256 of the ZIP against the released ZIP archive or the CI build log for the release commit.

Full details — how the build achieves this, and how to run a verification build yourself — are in Reproducible Builds in the developer documentation.

Usage

There is no UI to configure at runtime — just press F3 (or use Quick View [Ctrl+Q]) on any supported file. The preview tracks the Lister pane size and selecting a different file in the panel loads it into the same Lister session.

Supported Formats

Whatever Windows Explorer's preview pane (Alt+P) shows on your machine. Common formats you can expect on a typical Windows + Office installation:

Source Extensions
Microsoft Word DOC, DOCX, RTF, ODT, DOT, DOTX
Microsoft Excel XLS, XLSX, XLSB, ODS, XLT, XLTX
Microsoft PowerPoint PPT, PPTX, ODP, PPS, PPSX, POT, POTX
Microsoft Visio VSD, VSDX
Outlook / Windows built-in mail previewer MSG
Microsoft Edge (built-in) / Adobe Acrobat Reader PDF
Adobe Photoshop (if installed) PSD
AutoCAD / DWG TrueView (if installed) DWG, DXF
Sketchup (if installed) SKP

…plus anything else whose installer registers a Windows Preview Handler. There is no list of supported file types to maintain — install or uninstall an application that ships a handler, and TCOfficeView picks that up automatically the next time you use F3 / Ctrl+Q.

Quick previews use a simplified rendering pipeline. Office's built-in preview components — used by Windows Explorer's preview pane and by this plugin in the default mode — render through a reduced pipeline optimised for speed and stability inside a host window, not the full editing UI. For Word this means a flowing Web Layout without page breaks, headers or footers; Excel shows a simplified grid; PowerPoint shows static slides without transitions. An opt-in Full mode that launches the real Word, Excel or PowerPoint application and displays it as an overlay over the Lister pane is available; see Application Render Mode below.

MSG and VSDX caveat. The New Outlook (the modern rewrite) has dropped the classic .msg preview handler, and recent Visio installs sometimes omit the .vsdx handler. If Windows Explorer's own preview pane is also empty for a given file, the plugin falls back to the information panel.

Macro-enabled Office formats (DOCM, XLSM, PPTM, …). Office deliberately does not register a preview handler for any of its macro-enabled formats — DOCM, DOTM, XLSM, XLTM, PPTM, PPSM, POTM — so these files show no preview in Windows Explorer's Alt+P pane either; the plugin steps aside and Total Commander uses its next viewer. This applies in every render mode: without a registered preview handler the plugin never claims the file, so these formats cannot be previewed at all — not even by setting Full mode as the default. Previews never run macros in any case. This matters for the formats that do preview but can still carry macros — XLSB and legacy DOC / XLS / PPT: the quick preview components cannot execute macros, and Full mode explicitly disables them before opening the file. To actually run a document's macros, open the file in the Office application itself.

Configuration

Settings live in TCOfficeView.ini. The plugin reads it from two locations and uses the first one that exists — values are not merged across files:

  1. %APPDATA%\GHISLER\TCOfficeView.ini — per-user override
  2. <plugin install dir>\TCOfficeView.ini — system-wide default, shipped with the plugin

The shipped INI has every option commented out, so all defaults apply. To customise, copy that file to %APPDATA%\GHISLER\TCOfficeView.ini and edit the copy. Environment variables (%TEMP%, %LocalAppData%, %UserProfile%, %APPDATA%, …) are expanded in any value.

Logging

Diagnostic logging is off by default. Turn it on by setting LogPath under [Logging] to a writable file. Missing parent directories are created on first write.

[Logging]
LogPath=%LocalAppData%\TCOfficeView\host.log

Leave the value empty (or comment it out) to disable logging.

Fallback Information Panel

Under [FallbackUI]:

  • FontFamily — exact font name. Leave empty (the default) to auto-pick the first installed font from: Aptos Mono (Microsoft 365 / Office 2024) → Consolas (Windows Vista+) → Cascadia Mono (newer Windows) → Lucida Console (Windows 2000+) → Courier New (guaranteed final fallback).
  • FontSize — font size in points; default 12, clamped to 6..72. The font is scaled to the actual monitor DPI when the panel is created.
[FallbackUI]
FontFamily=Cascadia Code
FontSize=13

Application Render Mode

Four values are accepted per application under [Mode]:

Value Render engine Mode-switch button
quick-switchable (default) Preview Handler shown (→ Full)
quick Preview Handler hidden
full-switchable OLE Automation (real app) shown (→ Quick)
full OLE Automation (real app) hidden

The quick engine is the built-in Office preview component hosted inside the Lister pane. It is fast (~200–800 ms to first display) and memory-light (~30–80 MB), but the rendering pipeline is simplified (Word in Web Layout without page breaks, Excel in a simplified grid, PowerPoint slides without transitions).

The full engine launches the real Word, Excel or PowerPoint application in the background, opens the file read-only, and floats its main window as a borderless overlay over the Lister pane. It is slower (~2–4 s cold start, ~100–300 MB per instance) but renders documents exactly as the full Office application would.

Neither engine ever runs macros. Quick previews cannot execute them by design, and Full mode disables macro execution before opening the file — a macro-carrying XLSB or legacy DOC / XLS / PPT file previews as an ordinary document with its macros inert. (The explicitly macro-enabled formats — DOCM, XLSM, PPTM, … — never preview at all, in either mode; see Supported Formats.) External workbook links are not refreshed either. To run a document's macros, open the file in the Office application itself.

All three applications can be configured independently:

[Mode]
Word=quick-switchable
Excel=quick-switchable
PowerPoint=quick-switchable

The -switchable variants show a persistent overlay button in the top-right corner of every Word / Excel / PowerPoint preview. One click flips the current preview to the other engine without changing your INI default. The switch is per-preview only — selecting another file (or re-opening the same one) returns to the configured default. The button appears on every file type the application can open — including the OpenDocument formats (ODT, ODS, ODP), Office templates (DOT, DOTX, DOTM, XLT, XLTX, XLTM, POT, POTX, POTM) and PowerPoint slideshows (PPS, PPSX, PPSM) — and is hidden for file types that have no full-mode equivalent (.msg, .vsdx) regardless of the setting.

All three apps run in full mode as borderless overlay windows positioned over the Lister pane — not embedded inside it. The overlay is live while Total Commander is the front window; when you switch to another application the pane shows a frozen snapshot of the last state — still readable, just not live — and resumes as soon as you return to TC.

What full mode does for each application:

  • Word — shows the document in Print Layout (page boundaries, headers, footers, page numbers) with the page scaled to the Lister pane width. The zoom re-fits automatically when you resize the pane. Rulers are hidden and the preview is truly read-only (typing in the document is blocked).
  • Excel — opens the workbook read-only with the zoom set to 100%. The preview is interactive: you can scroll, select cells, switch sheet tabs and use the ribbon. The workbook is opened read-only, however — your changes are not saved.
  • PowerPoint — opens the presentation read-only with the slide scaled to fit the Lister pane. The zoom re-fits automatically when you resize the pane. The preview is interactive: you can scroll, change view mode, change text in the slides. The presentation is opened read-only, however — your changes are not saved.

Full mode tradeoffs to be aware of:

  • Cold start ~2–4 s the first time an Office document of a given application is opened. Subsequent documents of the same application within the same Lister window load faster (~0.5–1 s) because the running Office instance is reused. Switching between file types (.docx.xlsx) quits the previous application and spins up the next one, so that switch pays the cold-start cost again. Browsing a folder with the arrow keys won't trigger a cold start for every file — see Full-Mode Load Delay.
  • Live only while Total Commander is the front window. When you switch to another application the pane shows a frozen snapshot of the last state (still readable) and goes live again when you return.
  • Memory ~100–300 MB per running Office instance.
  • Requires a full Microsoft Office installation of the relevant application — not Office Viewer, not LibreOffice.
  • Falls back to quick mode automatically on any failure (Office missing, document password-protected, …), so you always get some preview.
  • No global Office settings are changed. Full mode only touches settings scoped to the open preview window — your standalone Word, Excel and PowerPoint will start up exactly as you left them. The ribbon, for example, stays visible in the preview because hiding it would hijack your global Office settings.

Full-Mode Load Delay

When you navigate to a Word, Excel or PowerPoint file that will open in full mode, the plugin waits a configurable dwell-time before actually launching the Office application. If you move to a different file within that window, the timer resets and the previous file is never loaded. Only the file you actually pause on starts the Office cold-start.

This prevents a wave of expensive Office launches when you browse a folder of Office documents with the arrow keys. The default is 1000 ms (1 second); set it in TCOfficeView.ini:

[Mode]
FullLoadDelayMs=1000   ; delay in ms before starting a full-mode Office load
                       ; 0 = disabled (load immediately)

The delay works differently depending on the configured mode:

  • full / full-switchable: The Office launch is deferred from the moment you navigate to the file. If you move away within the dwell window, the launch is cancelled entirely.

  • quick-switchable (default): Quick mode runs immediately. The delay kicks in only if the quick preview handler fails — which typically happens for documents synced from a non-primary Microsoft 365 tenant (SharePoint cross-tenant). In that case the plugin shows "Preview is loading…" and waits the dwell-time before starting the real Office application. If you move to a different file within that window, the Office launch is cancelled.

    Files that succeed in quick mode are completely unaffected by this setting — they load at full speed with no delay.

The delay does not apply when you click the → Full overlay button — that always loads immediately.

Auto-Fallback for Multi-Tenant SharePoint Documents

Documents synced from a SharePoint site in a Microsoft 365 tenant other than your primary one (for example, an external organisation you collaborate with) often refuse to render in quick mode. You see the fallback panel with an HRESULT such as 0x80004005 (E_FAIL) or 0x80004001 (E_NOTIMPL) and the message "The registered preview handler failed to load it".

This is an Office-side limitation, not a TCOfficeView one. The preview handler runs in a sandboxed Windows surrogate process (prevhost.exe) that does not have the credentials needed to authenticate against the second tenant. The same files therefore also refuse to preview in Windows Explorer's Alt+P / Preview Pane — try it on the same document to confirm.

The full-mode renderer (the real Word / Excel / PowerPoint application launched in the background) runs as your user with full access to your authentication tokens, so it usually succeeds where the preview handler fails.

TCOfficeView can detect this situation and retry the preview in full mode automatically. The feature is controlled per application from the [AutoFallback] section in TCOfficeView.ini:

[AutoFallback]
Word=true        ; default
Excel=true       ; default
PowerPoint=true  ; default

Default behaviour (true for all three) — when the preview handler refuses an Office file:

  1. The plugin silently launches the real Office application.
  2. The document opens in full mode (read-only) and replaces the error panel.
  3. You see a working preview a couple of seconds later instead of an error message.

Auto-fallback only kicks in when all of these hold:

  • The file is a Word, Excel or PowerPoint document.

  • The application's [Mode] is set to quick-switchable (the default). The explicit quick mode is treated as "user wants quick only, period" — the fallback panel is shown without retrying. For full / full-switchable the question does not arise, the preview is already in full mode.

  • The toggle for that application above is true.

  • The file is not marked with Mark-of-the-Web (downloaded from the internet, copied from a network share, or saved from an email attachment). MOTW is by far the most common reason an otherwise- healthy quick-mode handler refuses to render an Office file, and the typical fix is a single click on the Unblock this file button that the fallback panel offers. Once the file is unblocked it usually renders fine in quick mode, which is simpler and lighter than full mode — so we prefer to surface the Unblock button rather than silently flip the document into the real Office application.

    Cross-tenant SharePoint documents that are ALSO marked with MOTW are handled naturally by this design: after the user clicks Unblock, the file is reloaded; quick still fails (the cross- tenant authentication issue is independent of MOTW), and at that point the MOTW guard no longer fires and auto-fallback proceeds to full mode as usual. The Unblock click was technically a wasted step in that case, but the user only pays it once per file.

When the application is explicitly configured for full or full-switchable, the MOTW pre-check does not apply — the document flows directly into the real Office application, which displays its own Protected View (yellow "Enable Editing" banner, content visible in a read-only sandbox). MOTW handling there is left entirely to Office.

Set the toggle to false for an application if you would rather see the explicit fallback panel (with the preview handler's HRESULT for diagnosis) and decide for yourself whether to click → Full to load the file in the real application.

When auto-fallback has loaded a document in full mode and you then click the → Quick overlay button, the click is treated as an explicit "I want quick mode" instruction and auto-fallback does not run again. Without this guard the same click would bounce the document straight back to full mode and the button would appear to do nothing. Instead, the quick fallback panel is shown — explaining why the preview handler refuses the file — and the overlay button flips to → Full so you can return to full mode deliberately.

Preview Handler Overrides

Under [PreviewHandlers] you can override which preview handler is used for a given file extension, or deny an extension entirely so Total Commander routes it to the next configured plugin.

  • Pin a specific handler — when several handlers are installed for the same type (e.g. both Edge and Adobe Reader register a PDF preview handler), write the CLSID you prefer:

    [PreviewHandlers]
    .pdf={3A84F9C2-6164-485C-A7D9-4B27F8AC009E}

    The CLSID must include the braces. You can find the installed handlers and their CLSIDs in the registry under HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers, or enable the discovery report (see below) to get a ready-to-copy list.

  • Deny an extension — write the extension with an empty value so the plugin behaves as if no handler existed for that type. Total Commander then passes the file to the next Lister plugin or its built-in viewer. Useful when another plugin does a better job for a specific format.

    [PreviewHandlers]
    .html=
    .pdf=

    Changes take effect immediately — the INI is re-read on every preview.

  • Discovery report — set ReportPath to a writable file and the host will regenerate it on every start-up, listing every installed handler (with CLSID) and every extension assignment in effect, formatted as commented-out INI lines ready to copy:

    [PreviewHandlers]
    ReportPath=%APPDATA%\GHISLER\TCOfficeView.available-handlers.txt

    Turn it on while configuring overrides, then comment it out again.

When No Preview Handler Is Registered

If your machine has no Preview Handler at all for a given file type, the plugin silently steps aside and Total Commander uses your next configured Lister plugin or its built-in viewer instead. Installing TCOfficeView therefore never takes anything away from you — file types it cannot handle keep working exactly the way they did before.

If a Preview Handler is installed but fails to render the file (corrupt Office installation, broken handler, password-protected document, …), the plugin shows a small information panel with the file's basic details — name, full path, extension, size, and created / modified / last-accessed timestamps — together with a brief note about why the preview did not work. This way the Lister never shows an empty pane when a handler was advertised but couldn't deliver.

Upgrading from an Earlier Version

Total Commander does not update an already-configured detect string when you re-install or upgrade a plugin — it keeps whatever you (or the previous installer) set originally. This is fine for fresh installs (the plugin announces EXT="*" and TC picks it up automatically) but means upgraders from v2.1 or earlier keep their old detect string, which lists only the original Office extensions and never asks the plugin about PDF, HTML, PSD, DWG and the rest.

To pick up the new universal behaviour, do one of the following:

Option 1: Re-register the plugin (simpler)

  1. Open Configuration → Options → Plugins → Lister plugins → Configure.
  2. Select TCOfficeView and click Remove.
  3. Close Total Commander completely and reopen it.
  4. Either re-run the auto-installer (navigate to the release ZIP in TC and press Enter), or add the plugin back manually from the same dialog.

Total Commander will then ask the plugin DLL for its detect string on first use and store the new EXT="*" value.

Option 2: Edit wincmd.ini directly

Total Commander's GUI does not expose a way to edit a Lister plugin's detect string; it has to be changed in the configuration file.

  1. Close Total Commander completely (don't leave it running — TC may overwrite wincmd.ini on exit with its in-memory copy).
  2. Open wincmd.ini in a plain-text editor. To find its location, in TC open Configuration → Options → About. Common locations are the TC install directory or %APPDATA%\GHISLER\wincmd.ini.
  3. Locate the [ListerPlugins] section. You will see entries like:
    [ListerPlugins]
    0=C:\Program Files\Some other plugin\Foo.wlx
    0_detect=EXT="JPG"|EXT="PNG"
    1=C:\Users\<you>\AppData\Roaming\GHISLER\TCOfficeView\TCOfficeView.wlx64
    1_detect=EXT="DOC"|EXT="DOCX"|…|EXT="MSG"
  4. Find the line whose value is the TCOfficeView plugin path (the <N>=… line). Its companion <N>_detect=… line on the next row is the detect string for that plugin.
  5. Replace the detect string value with:
    EXT="*"
    
    …so the line becomes for example 1_detect=EXT="*".
  6. Save the file and reopen Total Commander.

If you would rather keep a stricter, finite set of file types instead of EXT="*", use this as the <N>_detect= value:

EXT="DOC"|EXT="DOCX"|EXT="DOCM"|EXT="RTF"|EXT="ODT"|EXT="DOT"|EXT="DOTX"|EXT="DOTM"|EXT="XLS"|EXT="XLSX"|EXT="XLSM"|EXT="XLSB"|EXT="ODS"|EXT="XLT"|EXT="XLTX"|EXT="XLTM"|EXT="PPT"|EXT="PPTX"|EXT="PPTM"|EXT="ODP"|EXT="PPS"|EXT="PPSX"|EXT="PPSM"|EXT="POT"|EXT="POTX"|EXT="POTM"|EXT="VSD"|EXT="VSDX"|EXT="MSG"|EXT="HTML"|EXT="HTM"|EXT="PDF"

With this list the plugin will be asked only about the common formats; with EXT="*" it gets asked about every file but silently steps aside for any file type Windows has no preview handler for. The practical user experience is the same except for less common formats (PSD, DWG, SKP, …) which only EXT="*" catches.

Troubleshooting

The plugin doesn't seem to do anything — I see TC's built-in viewer instead. Your machine has no Preview Handler for that file type, so the plugin steps aside (this is the intended behaviour, not a bug). Easy way to confirm: open the file in Windows Explorer and press Alt+P — if Explorer's preview pane is also empty, no handler is installed. Install (or repair) the application that owns the file type and the preview will work in both places.

I see the information panel instead of the real preview. A Preview Handler is registered for the file type but it failed to render this specific file. Common causes: corrupted application install (try a repair install), a password-protected document, or an unusual file variant the handler does not support.

TC crashes when previewing. This should not happen thanks to process isolation — the actual preview runs in a separate helper process. If it does happen, the most likely cause is a 32-/64-bit mismatch (for example a 64-bit Office where only a 32-bit Preview Handler is registered). Switch to the other bitness of the plugin.

Need deeper diagnostics? Diagnostic logging can be turned on in TCOfficeView.ini (see Logging above), and developer-level troubleshooting notes — Event Viewer entries, registry keys to check, the helper process name to look for — live in CONTRIBUTING.md.

Contributing

Build instructions, repo layout and architecture notes for developers live in CONTRIBUTING.md.

License

This project is licensed under the Apache License 2.0 — see LICENSE.md for the full text. Source files carry SPDX identifiers (SPDX-License-Identifier: Apache-2.0). Release notes are in CHANGELOG.md.

Releases

Packages

Used by

Contributors

Languages