react antd3 js版本,写一个上传导入Excel文件表单
时间: 2025-06-02 18:36:34 浏览: 17
在React、Ant Design 3.x 和 JavaScript 中创建一个支持Excel文件上传的表单,你可以按照以下步骤操作:
首先,确保已安装必要的依赖。在`package.json`中添加`formik`, `react-file-reader`, 和 `xlsx`库:
```json
{
"dependencies": {
"antd": "^4.20.7", // 可能需要根据实际版本调整
"formik": "^2.2.9",
"react-file-reader": "^6.0.0",
"xlsx": "^0.18.5"
}
}
```
然后,在项目中引入并配置:
```jsx
import React from 'react';
import { Form, Upload } from 'antd';
import { FileReaderOutlined } from '@ant-design/icons';
import * as XLSX from 'xlsx';
const FormItem = Form.Item;
const ExcelUploadForm = () => {
const [fileList, setFileList] = React.useState([]);
const [excelData, setExcelData] = React.useState([]);
const handleUpload = async (info) => {
if (!info.file) return;
const file = info.file;
try {
const result = await file_reader.readAsArrayBuffer(file);
const workbook = XLSX.read(result, { type: 'binary' });
const sheetName = workbook.SheetNames[0];
const data = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]);
setExcelData(data);
} catch (error) {
console.error('Error reading Excel file:', error);
}
setFileList([]);
};
const renderFormItem = ({ field, form }) => (
<FormItem label={field.label} hasFeedback>
<Upload
listType="text"
action="/api/upload" // 这里替换为实际的API地址
onChange={handleUpload}
fileList={fileList}
accept=".xls, .xlsx"
beforeupload={(file) => file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}
>
<Button icon={<FileReaderOutlined />} />
</Upload>
</FormItem>
);
return (
<Form layout="vertical">
{/* 使用FormItem.renderFormItem包裹自定义表单项 */}
{formik.getFieldProps(['yourField']).name && (
<FormItem {...formik.getFieldProps(['yourField'])}>
{renderFormItem}
</FormItem>
)}
<Form.Item wrapperCol={{ offset: 8 }}>
{excelData.map((item, index) => (
<p key={index}>{JSON.stringify(item, null, 2)}</p> // 预览数据,这里只是一个示例
))}
</Form.Item>
</Form>
);
};
export default ExcelUploadForm;
```
在这个例子中,我们使用了`antd`的`Upload`组件处理文件上传,并通过`react-file-reader`库读取Excel文件内容。注意,你需要将`beforeupload`回调和`action`属性根据实际情况进行修改。
阅读全文