Hi,
Thank you for the detailed description of what you’re seeing.
The Core Principle: SpreadJS Delegates Font Rendering to the Browser
SpreadJS uses a declarative font system — it assigns the font name to the cell and the browser’s own rendering policy determines whether and how that font is displayed. SpreadJS does not bundle, manage, or validate font availability. This single principle explains all three of your cases.
Case 1: Webdings — Why It Works
When you paste a cell with Webdings from Excel, SpreadJS records the font name and passes it directly to Chrome. Since Webdings ships pre-installed with Windows, Chrome resolves and renders it without issue. The fact that it doesn’t appear in the font dropdown is irrelevant — any font the browser can find will render correctly, regardless of whether it’s listed in the UI. Your assumption was exactly right.
Case 2: Aptos Black Appears as Regular Aptos
When pasting from Excel, SpreadJS correctly captures and passes the “Aptos Black” font name to Chrome. However, since the Aptos Black font file is not installed on the system, Chrome cannot find it and silently falls back to whichever Aptos variant it can resolve — typically the regular weight. You can register the Aptos-Black.ttf file as a web font in your application before SpreadJS initializes, and pasted cells will render exactly as expected.
You can see this working in the following sample, which loads Aptos Black and correctly applies it on paste from Excel:
Aptos Black Font Sample: https://jscodemine.mescius.io/share/4rfilplkfkmrufo9tieg-w/?IsEmbed=false&Theme=Unset&PreviewDirection=0&IsEditorShow=true&IsExplorerShow=true&IsPreviewShow=true&IsConsoleShow=true&IsRunBTNShow=false&IsResetBTNShow=false&IsOpenInCodemineBTNShow=false&PanelWidth=20&PanelWidth=50&PanelWidth=30&defaultOpen={"OpenedFileName"%3A["%2Findex.html"%2C"%2Fpackage.json"%2C"%2Fsrc%2Fapp.js"%2C"%2FFonts%2FAptos-Black.ttf"]%2C"ActiveFile"%3A"%2Findex.html"}
Case 3: Wandohope Falls Back to Times New Roman
Two separate reasons explain this:
Aptos variants: Unlike Calibri, which ships with Windows as a system font, Aptos is delivered exclusively through the Microsoft 365 Office application and is never installed into the OS itself. When Chrome encounters an Aptos font name it cannot locate, it falls back to the browser’s default serif font — typically Times New Roman.
Wandohope and other cloud fonts: Any font displaying a cloud icon in Excel is a Microsoft 365 cloud-streamed font. Excel downloads and renders these on demand from Microsoft’s servers, but they are never installed locally on your machine. Chrome has no way to access them, so the same browser fallback applies.
Why Times New Roman Instead of Your Calibri Default?
Your spreadsheet’s default font (Calibri 11) is a SpreadJS application-level setting that applies only to cells with no explicit font assigned. Pasted cells from Excel already carry an explicit font assignment (Aptos, Wandohope, etc.), so SpreadJS correctly stores and applies those names. When the browser cannot resolve them, it applies its own internal fallback — the generic serif font, which in Chrome is Times New Roman. SpreadJS’s default font setting has no influence over this browser-level fallback chain.
The Workaround: Register Missing Fonts as Web Fonts
The solution is to host the required .ttf files and register them using @font-face in your application so the browser can find them. The sample linked above in Case 2 demonstrates the complete approach for Aptos Black and can be adapted for any other font using the same pattern.
Kind regards,
Priyam