python fastapi 上传一个excel文件给服务器并保存,将excel文件Sheet1表格内容在页面上显示,用户可以编辑修改表格内容,点击保存后,更改后内容同步到excel文件中
时间: 2024-09-28 19:08:57 浏览: 17
在Python FastAPI应用中,处理Excel文件上传、编辑和保存通常涉及到两个主要步骤:接收文件上传和读取编辑数据,以及更新文件内容。以下是简化的流程:
1. **文件上传**:
- 使用FastAPI的`FileUpload`功能接收文件,例如在`@router.post("/upload_excel")`路由下:
```python
from fastapi import File, UploadFile
@app.post("/upload_excel")
async def upload_excel(file: UploadFile = File(...)):
# 将文件保存到临时目录
temp_file_path = os.path.join(tempfile.gettempdir(), file.filename)
with open(temp_file_path, "wb") as f:
shutil.copyfileobj(file.file, f)
return {"message": f"文件'{file.filename}'已上传"}
```
2. **读取和显示Excel内容**:
- 可以使用pandas库加载Excel文件,并选择Sheet1的数据:
```python
import pandas as pd
@app.get("/sheet1_data")
async def get_sheet1_data():
data = pd.read_excel(temp_file_path, sheet_name=0) # 假设Sheet1是索引0
# 显示DataFrame,可以转化为HTML或其他格式供前端展示
return HTML(data.to_html(index=False))
```
3. **前端交互编辑**:
- 前端可以使用React.js或Vue.js等框架,通过AJAX请求获取数据并在表格组件中编辑。例如,假设使用Vue.js,你可以创建一个`EditTable`组件:
```html
<template>
<!-- 你的表格组件 -->
<edit-table :data="sheet1Data"></edit-table>
</template>
<script>
export default {
props: ['data'],
// ...
}
</script>
```
4. **保存更改**:
- 当用户点击“保存”按钮时,发送POST请求更新数据:
```javascript
methods: {
saveChanges() {
fetch('/update_excel', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ editedData: this.editedData }),
})
.then(response => response.json())
.then(() => alert('保存成功'))
.catch(error => console.error(error));
},
}
```
5. **更新Excel文件**:
- 更新后的内容需要写回原文件。你可以使用`openpyxl`或其他库:
```python
from openpyxl import load_workbook, Workbook
@app.put("/update_excel")
async def update_excel(edited_data: dict):
wb = load_workbook(temp_file_path)
ws = wb.active
ws.data = edited_data['sheet1_data'] # 假设'data'键包含更新后的数据
wb.save(temp_file_path)
return {"message": "文件已更新"}
```
记得安装必要的依赖,如`fastapi`, `uvicorn`, `pandas`, `openpyxl`等。