当前位置: 首页 > news >正文

reactNative导入excel文件

组件内导入

import {TouchableOpacity,PermissionsAndroid} from 'react-native';
import RNFS from 'react-native-fs';
import XLSX from 'xlsx';
import DocumentPicker from 'react-native-document-picker';
import {Buffer} from 'buffer';// 需要安装一下三个,Buffer和react-native无需安装"xlsx": "^0.18.5""react-native-fs": "^2.20.0","react-native-document-picker": "^9.0.1",

下面是逻辑代码

// 导入设备代码function importdevice() {console.log('导入设备');requestFileAccessPermission(async state => {if (state) {openDocumentPicker();} else {ToastAndroid.show('权限获取失败', 1500);}});}function parseDataArray(data) {// 第一行为表头,从第二行开始为数据行const header = ['name', 'gender', 'birthday', 'height', 'weight'];const dataArray = [];for (let i = 1; i < data.length; i++) {const row = data[i];const rowData = {};// 将表头与数据行的每个数据项组装成键值对for (let j = 0; j < header.length; j++) {rowData[header[j]] = row[j];}dataArray.push(rowData);}return dataArray;}async function openDocumentPicker() {try {const result = await DocumentPicker.pick({type: [DocumentPicker.types.allFiles], // 允许用户选择所有类型的文件});// 使用RNFS模块来读取文件内容const fileContents = await RNFS.readFile(result[0].uri, 'base64');const binaryData = Buffer.from(fileContents, 'base64');const workbook = XLSX.read(binaryData, {type: 'buffer'});const sheetNameList = workbook.SheetNames;const firstSheetName = sheetNameList[0];const worksheet = workbook.Sheets[firstSheetName];const data = XLSX.utils.sheet_to_json(worksheet, {header: 1});const members = parseDataArray(data);console.log('members',members);  // 这里就是excel文档数据,以数组格式展开} catch (error) {ToastAndroid.show('导入失败', 1500);if (DocumentPicker.isCancel(error)) {console.log('User cancelled the document picker.');} else {console.log('Error while picking the document:', error);}}}// 定义一个异步函数,用于请求文件访问权限async function requestFileAccessPermission(callBack) {try {const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,{title: 'File Access Permission',message: 'This app needs access to your files.',buttonPositive: 'OK',},);if (granted === PermissionsAndroid.RESULTS.GRANTED) {console.log('File access permission granted.');callBack(true);} else {callBack(false);console.log('File access permission denied.');}} catch (error) {console.log('Error while requesting file access permission:', error);}}

触发导入的按钮

		  <TouchableOpacitystyle={[styles.beginSession]}onPress={importdevice}><Text style={styles.buttonTitle}>批量导入</Text></TouchableOpacity>

如下所示文档

在这里插入图片描述
打印结果如下

在这里插入图片描述

http://www.lryc.cn/news/206010.html

相关文章:

  • mysql 命令行安装
  • JAVA基础知识Fundamental
  • 民宿如何经营与管理?【民宿小程序】
  • 用 Rust 和 cURL 库制作一个有趣的爬虫
  • 华为OD 走方格的方案数(100分)【java】A卷+B卷
  • postgresql|数据库|序列Sequence的创建和管理
  • (完全解决)如何输入一个图的邻接矩阵(每两个点的亲密度矩阵affinity),然后使用sklearn进行谱聚类
  • Unity中Shader的ShaderLOD
  • 图像压缩(4)《数字图像处理》第八章 8.3节 数字图像水印
  • C++之lambda匿名函数总结(二百四十五)
  • STM32F103单片机内部RTC实时时钟驱动程序
  • ChinaSoft 论坛巡礼 | 开源软件生态健康度量论坛
  • Leetcode.2698 求一个整数的惩罚数
  • 大数据Flink(一百零二):SQL 聚合函数(Aggregate Function)
  • 因mapjoin加载内存溢出而导致return code 3
  • pip 指定源
  • 嵌入式中的MCU、ARM、DSP、FPGA
  • 二、PHP基础学习[变量]
  • k8s kubeadm配置
  • B-3:Web安全之综合渗透测试
  • 设计模式—设计模式总览
  • C++ 流程控制(分支、循环、跳转)
  • 【网络协议】聊聊TCP的三挥四握
  • Docker镜像仓库
  • 跨界技术:SOCKS5代理在电商、爬虫与游戏领域的应用
  • LeetCode--快速排序
  • 2023年CSP-S赛后总结(2023CSP-S题解)
  • Django viewsets 视图集与 router 路由实现评论接口开发
  • RCE 远程代码执行漏洞分析
  • JDK8新特性:Stream流