clipboard
This commit is contained in:
parent
611695c41e
commit
8f216aa501
@ -19,6 +19,17 @@ import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs'
|
||||
|
||||
The `@deno-types` comment instructs Deno to use the type definitions.
|
||||
|
||||
:::warning
|
||||
|
||||
Older releases are technically available on [deno.land/x](https://deno.land/x/)
|
||||
but the Deno registry is out of date.
|
||||
|
||||
[This is a known registry bug](https://github.com/denoland/dotland/issues/2072)
|
||||
|
||||
<https://cdn.sheetjs.com/> is the authoritative source for SheetJS scripts.
|
||||
|
||||
:::
|
||||
|
||||
## XLS Support
|
||||
|
||||
If XLS support is required, `cpexcel.full.mjs` must be manually imported:
|
||||
|
77
docz/docs/04-getting-started/03-demos/06-clipboard.md
Normal file
77
docz/docs/04-getting-started/03-demos/06-clipboard.md
Normal file
@ -0,0 +1,77 @@
|
||||
---
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# Clipboard Data
|
||||
|
||||
Spreadsheet software like Excel typically support copying and pasting cells and
|
||||
data. This is implemented through the Clipboard ("Pasteboard" in OSX parlance).
|
||||
|
||||
When copying a selection of cells, Excel for Windows stores a screenshot of the
|
||||
selected cells as an image. It also creates and stores a number of strings and
|
||||
files for the various formats, including TSV, CSV, HTML, RTF, SYLK, DIF, XLSB,
|
||||
XLS (both '97-2004 and '95), and SpreadsheetML 2003.
|
||||
|
||||
Not all Clipboard APIs offer access to all clipboard types.
|
||||
|
||||
## Browser
|
||||
|
||||
Clipboard data can be read from a `paste` event, accessible from the event
|
||||
`clipboardData` property:
|
||||
|
||||
```js
|
||||
document.onpaste = function(e) {
|
||||
/* get TSV */
|
||||
var str = e.clipboardData.getData('text/html');
|
||||
/* parse */
|
||||
var wb = XLSX.read(str, {type: "string"});
|
||||
/* DO SOMETHING WITH wb HERE */
|
||||
}
|
||||
```
|
||||
|
||||
`getData` accepts one argument: the desired MIME type. Chrome 103 supports:
|
||||
|
||||
| MIME type | Data format |
|
||||
|:-------------|:---------------------------|
|
||||
| `text/plain` | TSV (tab separated values) |
|
||||
| `text/html` | HTML |
|
||||
| `text/rtf` | RTF (rich text format) |
|
||||
|
||||
`getData` returns a string compatible with the `string` type for `XLSX.read`.
|
||||
|
||||
### Live Demo
|
||||
|
||||
Open a file in Excel, copy some cells, then come back to this window. Click on
|
||||
"RESULT" below and paste (Control+V for Windows, Command+V for Mac).
|
||||
|
||||
```jsx live
|
||||
function Clipboard() {
|
||||
const [csvs, setCSVs] = React.useState([ "", "", "" ]);
|
||||
|
||||
/* Set up paste handler */
|
||||
React.useEffect(async() => {
|
||||
document.onpaste = function(e) {
|
||||
/* this demo will read 3 different clipboard data types */
|
||||
var mime_arr = [ 'text/plain', 'text/html', 'text/rtf' ];
|
||||
/* get clipboard data for each type */
|
||||
var data_arr = mime_arr.map(mime => e.clipboardData.getData(mime));
|
||||
/* parse each data string into a workbook */
|
||||
var wb_arr = data_arr.map(str => XLSX.read(str, {type: "string"}));
|
||||
/* get first worksheet from each workbook */
|
||||
var ws_arr = wb_arr.map(wb => wb.Sheets[wb.SheetNames[0]]);
|
||||
/* generate CSV for each "first worksheet" */
|
||||
var result = ws_arr.map(ws => XLSX.utils.sheet_to_csv(ws));
|
||||
setCSVs(result);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
{csvs[0] && (<pre><b>Data from clipboard TSV (text/plain)</b><br/>{csvs[0]}</pre>)}
|
||||
{csvs[1] && (<pre><b>Data from clipboard HTML (text/html)</b><br/>{csvs[1]}</pre>)}
|
||||
{csvs[2] && (<pre><b>Data from clipboard RTF (text/rtf)</b><br/>{csvs[2]}</pre>)}
|
||||
{csvs.every(x => !x) && <b>Copy data in Excel, click here, and paste (Control+V)</b>}
|
||||
</>
|
||||
)
|
||||
}
|
||||
```
|
@ -7,7 +7,13 @@ hide_table_of_contents: true
|
||||
|
||||
The demo projects include small runnable examples and short explainers.
|
||||
|
||||
### Frameworks and APIs
|
||||
### JavaScript APIs
|
||||
|
||||
- [`XMLHttpRequest and fetch`](https://github.com/SheetJS/SheetJS/tree/master/demos/xhr/)
|
||||
- [`Clipboard Data`](./clipboard)
|
||||
- [`Typed Arrays and Math`](https://github.com/SheetJS/SheetJS/tree/master/demos/array/)
|
||||
|
||||
### Frameworks
|
||||
|
||||
- [`Angular.JS`](https://github.com/SheetJS/SheetJS/tree/master/demos/angular/)
|
||||
- [`Angular 2+ and Ionic`](https://github.com/SheetJS/SheetJS/tree/master/demos/angular2/)
|
||||
@ -15,10 +21,6 @@ The demo projects include small runnable examples and short explainers.
|
||||
- [`Meteor`](https://github.com/SheetJS/SheetJS/tree/master/demos/meteor/)
|
||||
- [`React, React Native and NextJS`](https://github.com/SheetJS/SheetJS/tree/master/demos/react/)
|
||||
- [`VueJS, WeeX, and NuxtJS`](https://github.com/SheetJS/SheetJS/tree/master/demos/vue/)
|
||||
- [`XMLHttpRequest and fetch`](https://github.com/SheetJS/SheetJS/tree/master/demos/xhr/)
|
||||
- [`NodeJS Server-Side Processing`](https://github.com/SheetJS/SheetJS/tree/master/demos/server/)
|
||||
- [`Databases and Key/Value Stores`](https://github.com/SheetJS/SheetJS/tree/master/demos/database/)
|
||||
- [`Typed Arrays and Math`](https://github.com/SheetJS/SheetJS/tree/master/demos/array/)
|
||||
|
||||
### Front-End UI Components
|
||||
|
||||
@ -28,6 +30,8 @@ The demo projects include small runnable examples and short explainers.
|
||||
- [`vue3-table-light`](https://github.com/SheetJS/SheetJS/tree/master/demos/vue/modify/)
|
||||
|
||||
### Platforms and Integrations
|
||||
|
||||
- [`NodeJS Server-Side Processing`](https://github.com/SheetJS/SheetJS/tree/master/demos/server/)
|
||||
- [`Deno`](https://github.com/SheetJS/SheetJS/tree/master/demos/deno/)
|
||||
- [`Electron`](https://github.com/SheetJS/SheetJS/tree/master/demos/electron/)
|
||||
- [`NW.js`](https://github.com/SheetJS/SheetJS/tree/master/demos/nwjs/)
|
||||
@ -40,11 +44,12 @@ The demo projects include small runnable examples and short explainers.
|
||||
- [`Headless Browsers`](https://github.com/SheetJS/SheetJS/tree/master/demos/headless/)
|
||||
- [`Other JavaScript Engines`](https://github.com/SheetJS/SheetJS/tree/master/demos/altjs/)
|
||||
- [`"serverless" functions`](https://github.com/SheetJS/SheetJS/tree/master/demos/function/)
|
||||
- [`Databases and Key/Value Stores`](https://github.com/SheetJS/SheetJS/tree/master/demos/database/)
|
||||
- [`Legacy Internet Explorer`](https://github.com/SheetJS/SheetJS/tree/master/demos/oldie/)
|
||||
|
||||
### Bundlers and Tooling
|
||||
|
||||
- [`browserify`](https://github.com/SheetJS/SheetJS/tree/master/demos/browserify/)
|
||||
- [`fusebox`](https://github.com/SheetJS/SheetJS/tree/master/demos/fusebox/)
|
||||
- [`parcel`](https://github.com/SheetJS/SheetJS/tree/master/demos/parcel/)
|
||||
- [`requirejs`](https://github.com/SheetJS/SheetJS/tree/master/demos/requirejs/)
|
||||
- [`rollup`](https://github.com/SheetJS/SheetJS/tree/master/demos/rollup/)
|
||||
|
@ -640,6 +640,32 @@ function process_RS(stream, cb) {
|
||||
}
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="deno" label="Deno">
|
||||
|
||||
In addition to the browser `ReadableStream` API, Deno has its own `Reader`
|
||||
[interface](https://doc.deno.land/deno/stable/~/Deno.Reader).
|
||||
|
||||
For these streams, `std` provides a `readAll` method to collect data into a
|
||||
`Uint8Array`. This example reads from a file using `Deno.open` and prints the
|
||||
worksheet names array:
|
||||
|
||||
<pre><code parentName="pre" {...{"className": "language-ts"}}>{`\
|
||||
// @deno-types="https://cdn.sheetjs.com/xlsx-${current}/package/types/index.d.ts"
|
||||
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs';
|
||||
|
||||
import { readAll } from "https://deno.land/std/streams/conversion.ts";
|
||||
|
||||
/* Simple Deno.Reader from a file */
|
||||
const file = await Deno.open("test.xlsx", {read: true});
|
||||
|
||||
/* \`content\` will be a Uint8Array holding the full contents of the stream */
|
||||
const content = await readAll(file);
|
||||
|
||||
/* Since this is a Uint8Array, \`XLSX.read\` "just works" */
|
||||
const wb = XLSX.read(content);
|
||||
console.log(wb.SheetNames);`}</code></pre>
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
@ -49,7 +49,7 @@ range limits will be silently truncated:
|
||||
|:------------------------------------------|:-----------|---------:|---------:|
|
||||
| Excel 2007+ XML Formats (XLSX/XLSM) | XFD1048576 | 16384 | 1048576 |
|
||||
| Excel 2007+ Binary Format (XLSB BIFF12) | XFD1048576 | 16384 | 1048576 |
|
||||
| Numbers 12.0 (NUMBERS) | ALL1000000 | 1000 | 1000000 |
|
||||
| Numbers 12.1 (NUMBERS) | ALL1000000 | 1000 | 1000000 |
|
||||
| Quattro Pro 9+ (QPW) | IV1000000 | 256 | 1000000 |
|
||||
| Excel 97-2004 (XLS BIFF8) | IV65536 | 256 | 65536 |
|
||||
| Excel 5.0/95 (XLS BIFF5) | IV16384 | 256 | 16384 |
|
||||
@ -172,7 +172,8 @@ XLR also includes a `WksSSWorkBook` stream similar to Lotus FM3/FMT files.
|
||||
|
||||
iWork 2013 (Numbers 3.0 / Pages 5.0 / Keynote 6.0) switched from a proprietary
|
||||
XML-based format to the current file format based on the iWork Archive (IWA).
|
||||
This format has been used up through the current release (Numbers 11.2).
|
||||
This format has been used up through the current release (Numbers 12.1) as well
|
||||
as the iCloud.com web interface to Numbers.
|
||||
|
||||
The parser focuses on extracting raw data from tables. Numbers technically
|
||||
supports multiple tables in a logical worksheet, including custom titles. This
|
||||
|
Loading…
Reference in New Issue
Block a user