diff --git a/README.md b/README.md index 12470c3..3fe1f7a 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,3 @@ -This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). +# SheetJS + React Native Demo -# Getting Started - ->**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding. - -## Step 1: Start the Metro Server - -First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native. - -To start Metro, run the following command from the _root_ of your React Native project: - -```bash -# using npm -npm start - -# OR using Yarn -yarn start -``` - -## Step 2: Start your Application - -Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app: - -### For Android - -```bash -# using npm -npm run android - -# OR using Yarn -yarn android -``` - -### For iOS - -```bash -# using npm -npm run ios - -# OR using Yarn -yarn ios -``` - -If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly. - -This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively. - -## Step 3: Modifying your App - -Now that you have successfully run the app, let's modify it. - -1. Open `App.tsx` in your text editor of choice and edit some lines. -2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes! - - For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes! - -## Congratulations! :tada: - -You've successfully run and modified your React Native App. :partying_face: - -### Now what? - -- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). -- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started). - -# Troubleshooting - -If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. - -# Learn More - -To learn more about React Native, take a look at the following resources: - -- [React Native Website](https://reactnative.dev) - learn more about React Native. -- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. -- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. -- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. -- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. +Complete Reproduction of \ No newline at end of file diff --git a/index.js b/index.js index a850d03..41a3fbc 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,85 @@ -/** - * @format - */ +/* sheetjs (C) 2013-present SheetJS -- https://sheetjs.com */ +import { utils } from 'xlsx'; +import React, { Component } from 'react'; +import { AppRegistry, StyleSheet, Text, Button, Alert, Image, ScrollView } from 'react-native'; +import { Table, Row, Rows, TableWrapper } from 'react-native-table-component'; -import {AppRegistry} from 'react-native'; -import App from './App'; -import {name as appName} from './app.json'; +const make_width = ws => { + const aoa = utils.sheet_to_json(ws, {header:1}), res = []; + aoa.forEach((r) => { r.forEach((c, C) => { res[C] = Math.max(res[C]||60, String(c).length * 10); }); }); + for(let C = 0; C < res.length; ++C) if(!res[C]) res[C] = 60; + return res; +}; -AppRegistry.registerComponent(appName, () => App); +class SheetJSRN extends Component { + constructor(props) { + super(props); + this.state = { + data: ["SheetJS".split(""),[5,4,3,3,7,9,5],[8,6,7,5,3,0,9]], + widthArr: Array.from({length:7}, () => 20) + }; + this.importFile = this.importFile.bind(this); + this.exportFile = this.exportFile.bind(this); + }; + + async importFile() { try { + /* select and parse file */ + const wb = await pickAndParse(); + + /* convert first worksheet to AOA */ + const wsname = wb.SheetNames[0]; + const ws = wb.Sheets[wsname]; + const data = utils.sheet_to_json(ws, {header:1}); + + /* update state */ + this.setState({ data: data, widthArr: make_width(ws) }); + } catch(err) { Alert.alert("importFile Error", "Error " + err.message); }} + + async exportFile() { try { + /* convert AOA back to worksheet */ + const ws = utils.aoa_to_sheet(this.state.data); + + /* build new workbook */ + const wb = utils.book_new(); + utils.book_append_sheet(wb, ws, "SheetJS"); + + /* write file */ + const res = await writeWorkbook(wb); + Alert.alert("exportFile success", "Exported to " + res); + } catch(err) { Alert.alert("exportFile Error", "Error " + err.message); }} + + render() { return ( + + +   SheetJS × React Native +