How to build a React.js Excel (XLS/XLSX) viewer
This article was first published in November 2023 and was updated in August 2024.
In this blog post, learn how to build a React Excel viewer using the Nutrient Web SDK. You’ll open and view XLS and XLSX files directly in your web browser using client-side processing (no server required).
The image below shows what you’ll be building.
You can check out the demo to see it in action.
Opening and rendering Office documents in the browser
Nutrient Web SDK brings support for Word, Excel, and PowerPoint formats to your application, without you or your users needing any MS Office software, MS Office licenses, or third-party open source software. The technology works by converting an Office document to PDF directly in the browser, and the document is then rendered in our JavaScript viewer.
Unlocking more capabilities with Office-to-PDF conversion
By converting an Office document to PDF using client-side JavaScript, you have the option to support a rich array of additional Office document functionality, such as:
-
Text editing — Edit text directly in the displayed Office document.
-
Page manipulation — Organize documents by adding, removing, or rearranging pages.
-
Annotations — Boost collaboration by adding text highlights, comments, or stamps.
-
Adding signatures — Draw, type, or upload a signature directly to an Office document.
Requirements to get started
To get started, you’ll need:
-
A package manager compatible with npm. This post contains usage examples for Yarn and the npm client (installed with Node.js by default).
Setting up a new React project with Vite
-
To get started, create a new React project using Vite:
# Using Yarn yarn create vite pspdfkit-react-example --template react # Using npm npm create vite@latest pspdfkit-react-example -- --template react
-
Navigate to your project directory:
cd pspdfkit-react-example
Adding Nutrient to Your Project
-
First, install Nutrient as a dependency:
# Using Yarn yarn add pspdfkit # Using npm npm install pspdfkit
-
Next, copy the Nutrient Web library assets to the public directory:
cp -R ./node_modules/pspdfkit/dist/pspdfkit-lib public/pspdfkit-lib
This ensures Nutrient can access its assets from the public/pspdfkit-lib
directory.
Make sure your development server supports the
application/wasm
MIME type. This can be crucial for WebAssembly to function correctly.
Displaying a PDF in your React app
-
Add an Excel (XLS, XLSX) document you want to display to the
public
directory. You can use our demo document as an example. -
Create a new component to handle PDF rendering. In the
src/components/
directory, create a file namedPdfViewerComponent.jsx
with the following content:
import { useEffect, useRef } from 'react'; export default function PdfViewerComponent(props) { const containerRef = useRef(null); useEffect(() => { const container = containerRef.current; let PSPDFKit, instance; (async function () { PSPDFKit = await import('pspdfkit'); PSPDFKit.unload(container); instance = await PSPDFKit.load({ container, document: props.document, baseUrl: `${window.location.protocol}//${ window.location.host }/${import.meta.env.BASE_URL}`, }); })(); return () => PSPDFKit && PSPDFKit.unload(container); }, []); return ( <div ref={containerRef} style={{ width: '100%', height: '100vh' }} /> ); }
-
Integrate this component into your app by updating the
src/App.jsx
file:
import PdfViewerComponent from './components/PdfViewerComponent'; function App() { return ( <div className="App" style={{ width: '100vw' }}> <div className="PDF-viewer"> <PdfViewerComponent document={'chart.xlsx'} /> </div> </div> ); } export default App;
Ensure your project structure looks like this:
pspdfkit-react-example/ ├── public/ │ ├── pspdfkit-lib/ │ └── chart.xlsx ├── src/ │ ├── components/ │ │ └── PdfViewerComponent.jsx │ └── App.jsx ├── package.json └── yarn.lock
-
Start your development server:
# Using Yarn yarn dev # Using npm npm run dev
Once the server is running, you can view and interact with your PDF directly in the browser.
A note about fonts
In client-side web applications for Microsoft Office-to-PDF conversion, Nutrient addresses font licensing constraints through font substitutions, typically replacing unavailable fonts with their equivalents — like Arial with Noto. For precise font matching, you can provide your own fonts, embed them into source files, or designate paths to your .ttf
fonts for custom solutions.
Adding even more capabilities
Once you’ve deployed your viewer, you can start customizing it to meet your specific requirements or easily add more capabilities. To help you get started, here are some of our most popular React.js guides:
- Instant synchronization
- Document assembly
- Page manipulation
- Editor
- Forms
- Signatures
- Redaction
- Document security
Conclusion
In this blog post, you learned how to build an Excel viewer using React.js with the Nutrient SDK.
If you’re looking for a way to render Office documents in your web application, then Nutrient Web SDK is a great option. It’s a powerful and flexible library that can help you provide your users with a seamless and enjoyable experience.
To get started, you can either:
-
Start your free trial to test out the library and see how it works in your application.
-
Launch our demo to see the viewer in action.
FAQ
Here are a few frequently asked questions about building a React Excel viewer.
How can I integrate Nutrient into a React.js project?
To integrate Nutrient, install the pspdfkit
package with npm or Yarn, copy the library assets to your public directory, and create a React component to initialize and configure Nutrient.
How do I display Excel (XLS/XLSX) files using Nutrient in React?
Import the Nutrient library in your React component, provide the path to your Excel document, and use PSPDFKit.load()
to render the document.
Can I customize the Nutrient viewer in my React application?
Yes, you can customize the Nutrient viewer with options for initial view state, annotations, text editing, and additional functionalities.
Where can I find a demo of the React.js Excel viewer with Nutrient?
You can check out a demo of the React.js Excel viewer with Nutrient by visiting the Nutrient demo page.