forked from sheetjs/docs.sheetjs.com
		
	ionic
This commit is contained in:
		
							parent
							
								
									61650b6c67
								
							
						
					
					
						commit
						3581f33075
					
				| @ -10,6 +10,17 @@ sidebar_custom_props: | ||||
| The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported | ||||
| from the main entrypoint or any script in the project. | ||||
| 
 | ||||
| The "Complete Example" creates an app that looks like the screenshots below: | ||||
| 
 | ||||
| <table><thead><tr> | ||||
|   <th><a href="#demo">iOS</a></th> | ||||
| </tr></thead><tbody><tr><td> | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| </td></tr></tbody></table> | ||||
| 
 | ||||
| 
 | ||||
| :::warning Telemetry | ||||
| 
 | ||||
| Before starting this demo, manually disable telemetry.  On Linux and MacOS: | ||||
| @ -36,7 +47,7 @@ npx @capacitor/cli telemetry | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## Cordova | ||||
| ## Integration Details | ||||
| 
 | ||||
| :::caution | ||||
| 
 | ||||
| @ -44,6 +55,8 @@ The latest version of Ionic uses CapacitorJS. These notes are for Cordova apps. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ### Angular | ||||
| 
 | ||||
| `Array<Array<any>>` neatly maps to a table with `ngFor`: | ||||
| 
 | ||||
| ```html | ||||
| @ -56,15 +69,26 @@ The latest version of Ionic uses CapacitorJS. These notes are for Cordova apps. | ||||
| </ion-grid> | ||||
| ``` | ||||
| 
 | ||||
| `@ionic-native/file` reads and writes files on devices. `readAsArrayBuffer` | ||||
| returns `ArrayBuffer` objects suitable for `array` type, and `array` type can | ||||
| be converted to blobs that can be exported with `writeFile`: | ||||
| ### Cordova | ||||
| 
 | ||||
| `@ionic-native/file` reads and writes files on devices. | ||||
| 
 | ||||
| _Reading Files_ | ||||
| 
 | ||||
| `readAsArrayBuffer` returns `ArrayBuffer` objects suitable for `array` type: | ||||
| 
 | ||||
| ```ts | ||||
| /* read a workbook */ | ||||
| const ab: ArrayBuffer = await this.file.readAsArrayBuffer(url, filename); | ||||
| const wb: XLSX.WorkBook = XLSX.read(bstr, {type: 'array'}); | ||||
| const wb: XLSX.WorkBook = XLSX.read(ab, {type: 'array'}); | ||||
| ``` | ||||
| 
 | ||||
| _Writing Files_ | ||||
| 
 | ||||
| `array` type can be converted to blobs that can be exported with `writeFile`: | ||||
| 
 | ||||
| 
 | ||||
| ```ts | ||||
| /* write a workbook */ | ||||
| const wbout: ArrayBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); | ||||
| let blob = new Blob([wbout], {type: 'application/octet-stream'}); | ||||
| @ -75,15 +99,13 @@ this.file.writeFile(url, filename, blob, {replace: true}); | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was tested on an Intel Mac on 2022 August 18 with Cordova. | ||||
| This demo was tested on an Intel Mac on 2023 March 19 with Cordova. | ||||
| The file integration uses `@ionic-native/file` version `5.36.0`. | ||||
| 
 | ||||
| The iOS simulator runs iOS 15.5 on an iPod Touch 7th Gen. | ||||
| The iOS simulator runs iOS 16.5 on an iPhone SE (3rd Generation). | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| 0) Disable telemetry as noted in the warning. | ||||
| 
 | ||||
| Install required global dependencies: | ||||
| @ -92,7 +114,7 @@ Install required global dependencies: | ||||
| npm i -g cordova-res @angular/cli native-run | ||||
| ``` | ||||
| 
 | ||||
| Follow the [React Native demo](#demo) to ensure iOS and Android sims are ready. | ||||
| Follow the [React Native demo](/docs/demos/mobile/reactnative) to ensure iOS and Android sims are ready. | ||||
| 
 | ||||
| 
 | ||||
| 1) Create a new project: | ||||
| @ -101,18 +123,36 @@ Follow the [React Native demo](#demo) to ensure iOS and Android sims are ready. | ||||
| npx @ionic/cli start SheetJSIonic blank --type angular --cordova --quiet --no-git --no-link --confirm | ||||
| ``` | ||||
| 
 | ||||
| If a prompt discusses Cordova and Capacitor, enter `Yes` to continue. | ||||
| If a prompt asks to confirm Cordova use, enter `Yes` to continue. | ||||
| 
 | ||||
| If a prompt asks about creating an Ionic account, enter `N` to opt out. | ||||
| 
 | ||||
| 2) Set up Cordova: | ||||
| 
 | ||||
| ```bash | ||||
| cd SheetJSIonic | ||||
| npx @ionic/cli cordova platform add ios --confirm | ||||
| npx @ionic/cli cordova plugin add cordova-plugin-file | ||||
| npm install --save @ionic-native/core @ionic-native/file @ionic/cordova-builders | ||||
| ``` | ||||
| 
 | ||||
| :::caution | ||||
| 
 | ||||
| In some test runs, the `plugin add cordova-plugin-file` step reported an error: | ||||
| 
 | ||||
| ``` | ||||
| CordovaError: Could not load API for ios project | ||||
| ``` | ||||
| 
 | ||||
| This was resolved by removing and reinstalling the `ios` platform: | ||||
| 
 | ||||
| ```bash | ||||
| npx @ionic/cli cordova platform rm ios | ||||
| npx @ionic/cli cordova platform add ios --confirm | ||||
| ``` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 3) Install dependencies: | ||||
| 
 | ||||
| ```bash | ||||
| @ -145,11 +185,25 @@ export class AppModule {} | ||||
| curl -o src/app/home/home.page.ts -L https://docs.sheetjs.com/ionic/home.page.ts | ||||
| ``` | ||||
| 
 | ||||
| 6) Test the app: | ||||
| **iOS Testing** | ||||
| 
 | ||||
| ```bash | ||||
| npx @ionic/cli cordova emulate ios | ||||
| ``` | ||||
| 
 | ||||
| </details> | ||||
| :::caution | ||||
| 
 | ||||
| In some test runs, the `cordova build ios --emulator` step failed with error: | ||||
| 
 | ||||
| ``` | ||||
| > cordova build ios --emulator | ||||
| Could not load API for ios project | ||||
| ``` | ||||
| 
 | ||||
| This was resolved by forcefully installing `cordova-ios`: | ||||
| 
 | ||||
| ```bash | ||||
| npm i --save cordova-ios | ||||
| ``` | ||||
| 
 | ||||
| ::: | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| /* sheetjs (C) 2013-present SheetJS -- https://sheetjs.com */ | ||||
| /* vim: set ts=2: */ | ||||
| import { Component } from '@angular/core'; | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { File } from '@ionic-native/file/ngx'; | ||||
| import * as XLSX from 'xlsx'; | ||||
| 
 | ||||
| @ -41,10 +41,16 @@ type AOA = any[][]; | ||||
| ` | ||||
| }) | ||||
| 
 | ||||
| export class HomePage { | ||||
| export class HomePage implements OnInit { | ||||
|   data: any[][] = [[1,2,3],[4,5,6]]; | ||||
|   constructor(public file: File) {} | ||||
| 
 | ||||
|   async ngOnInit(): Promise<void> { | ||||
|     const res: Response = await fetch("https://sheetjs.com/pres.numbers"); | ||||
|     const ab: ArrayBuffer = await res.arrayBuffer(); | ||||
|     this.read(ab); | ||||
|   } | ||||
| 
 | ||||
|   read(ab: ArrayBuffer) { | ||||
|     /* read workbook */ | ||||
|     const wb: XLSX.WorkBook = XLSX.read(new Uint8Array(ab), {type: 'array'}); | ||||
| @ -91,7 +97,7 @@ export class HomePage { | ||||
|       const ab: ArrayBuffer = await this.file.readAsArrayBuffer(url, 'SheetJSIonic.xlsx'); | ||||
|       this.read(ab); | ||||
|     } catch(e) { | ||||
|       const m: string = e.message; | ||||
|       const m: string = (e as Error).message; | ||||
|       alert(m.match(/It was determined/) ? 'Use File Input control' : `Error: ${m}`); | ||||
|     } | ||||
|   }; | ||||
| @ -113,11 +119,11 @@ export class HomePage { | ||||
|       await this.file.writeFile(url, filename, wbout, {replace: true}); | ||||
|       alert(`Wrote to SheetJSIonic.xlsx in ${url}`); | ||||
|     } catch(e) { | ||||
|       if(e.message.match(/It was determined/)) { | ||||
|       if((e as Error).message.match(/It was determined/)) { | ||||
|         /* in the browser, use writeFile */ | ||||
|         XLSX.writeFile(wb, filename); | ||||
|       } else { | ||||
|         alert(`Error: ${e.message}`); | ||||
|         alert(`Error: ${(e as Error).message}`); | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								docz/static/ionic/ios.png
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/ionic/ios.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 64 KiB | 
		Loading…
	
		Reference in New Issue
	
	Block a user