forked from sheetjs/docs.sheetjs.com
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
<script>
 | 
						||
import { Filesystem, Directory, Encoding } from '@capacitor/filesystem';
 | 
						||
import { onMount } from 'svelte';
 | 
						||
import { read, utils, version, writeXLSX } from 'xlsx';
 | 
						||
 | 
						||
let html = "";
 | 
						||
let tbl;
 | 
						||
 | 
						||
/* Fetch and update the state once */
 | 
						||
onMount(async() => {
 | 
						||
  const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
 | 
						||
  const wb = read(f); // parse the array buffer
 | 
						||
  const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
 | 
						||
  html = utils.sheet_to_html(ws); // generate HTML and update state
 | 
						||
});
 | 
						||
 | 
						||
/* get state data and export to XLSX */
 | 
						||
async function exportFile() {
 | 
						||
  const elt = tbl.getElementsByTagName("TABLE")[0];
 | 
						||
  const wb = utils.table_to_book(elt);
 | 
						||
 | 
						||
  /* export to XLSX encoded in a Base64 string  */
 | 
						||
  const data = writeXLSX(wb, { type: "base64" });
 | 
						||
 | 
						||
  /* `writeFile` cannot overwrite, so try to delete file first */
 | 
						||
  try {
 | 
						||
    await Filesystem.deleteFile({
 | 
						||
      path: "SheetJSCap.xlsx",
 | 
						||
      directory: Directory.Documents
 | 
						||
    });
 | 
						||
  } catch(e) { /* ignore error */ }
 | 
						||
 | 
						||
  /* attempt to write to the device */
 | 
						||
  await Filesystem.writeFile({
 | 
						||
    path: "SheetJSCap.xlsx",
 | 
						||
    data,
 | 
						||
    directory: Directory.Documents
 | 
						||
  });
 | 
						||
  alert(`Exported to ${Directory.Documents}/SheetJSCap.xlsx`);
 | 
						||
}
 | 
						||
 | 
						||
/* show file picker, read file, load table */
 | 
						||
async function importFile(evt) {
 | 
						||
  const f = evt.target.files[0];
 | 
						||
  const wb = read(await f.arrayBuffer());
 | 
						||
  const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
 | 
						||
  html = utils.sheet_to_html(ws); // generate HTML and update state
 | 
						||
}
 | 
						||
</script>
 | 
						||
 | 
						||
<main>
 | 
						||
  <h3>SheetJS × CapacitorJS { version }</h3>
 | 
						||
  <input type="file" on:change={importFile}/>
 | 
						||
  <button on:click={exportFile}>Export XLSX</button>
 | 
						||
  <div bind:this={tbl}>{@html html}</div>
 | 
						||
</main>
 |