x-spreadsheet学习01

本文介绍了如何在Flask项目中使用x-spreadsheet库,从数据库读取数据并转换为表格格式,同时探讨了在Windows环境下解决引用问题的方法。文章详细阐述了将DataFrame转换为x-spreadsheet兼容的JSON格式,并展示了在Flask应用中创建、加载和渲染大型数据集的流程。最后,作者提到了x-spreadsheet的编辑功能以及后续的保存数据研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


项目地址; link

使用

一个最简单的demo,只用一个html,不需要任何其它配置

<link rel="stylesheet" href="https://unpkg.com/x-data-spreadsheet@1.1.1/dist/xspreadsheet.css">
<script src="https://unpkg.com/x-data-spreadsheet@1.1.1/dist/xspreadsheet.js"></script>
<script src="https://unpkg.com/x-data-spreadsheet@1.1.1/dist/locale/zh-cn.js"></script>
<div id="x-spreadsheet-demo">
  <script>
    x_spreadsheet.locale('zh-cn');  //中文
    var htmlout = document.getElementById('x-spreadsheet-demo')
    var xs = x_spreadsheet(htmlout
  </script>
</body>
</div>

现在的问题是如何把插件加载json数据,以及处理保存的问题。数据导出成excel应该没问题。

在npm中使用

作者说不推荐,放弃

导入和导出

作者给的例子是另一个项目里的:link

这个例子下载后在win上有bug:

  1. index.html第45,46行,引用的两个文件是链接,在win是不生效的,手动下载这两个文件
  2. index.html 第55行,var xspr = x.spreadsheet(HTMLOUT),变量x未定义,改成x_spreadsheet(HTMLOUT)

改了之后就,浏览器打开index.html后就可以使用了,效果还不错。导出之后会丢失所有格式。

从数据库读取数据解析为表格

先看一个加载json的例子

<link rel="stylesheet"
    href="https://unpkg.com/x-data-spreadsheet@1.1.1/dist/xspreadsheet.css">
<script src="https://unpkg.com/x-data-spreadsheet@1.1.1/dist/xspreadsheet.js"></script>
<script src="https://unpkg.com/x-data-spreadsheet@1.1.1/dist/locale/zh-cn.js"></script>
<div id="x-spreadsheet-demo">
    <script>
        x_spreadsheet.locale('zh-cn');  //中文
        var htmlout = document.getElementById('x-spreadsheet-demo')
        data = [{
    "name":"Sheet1","freeze":"A1","styles":[],"merges":[],
        "rows":{
    
            "0":{
    "cells":{
    "0":{
    "text":"id"},"1":{
    "text":"name"}}},
            "1":{
    "cells":{
    "0":{
    "text":"1"},"1":{
    "text":"Tom"}}},
            "2":{
    "cells":{
    "0":{
    "text":"2"},"1":{
    "text":"Hall"}}},
            "3":{
    "cells":{
    "0":{
    "text":"3"},"1":{
    "text":"Sure"}}},
            "len":5},
            "cols":{
    "len":6},
            "validations":[],
            "autofilter":{
    }}]
        var xs = x_spreadsheet(htmlout).loadData(data)
        console.log("表格返回的数据为:\n", xs.getData())  // getData得到一个object对象,要把它转为json用JSON.stringify()
        console.log("json字符串格式为:\n", JSON.stringify(xs.getData()))
    </script>
</div>

上面的例子中,各出的json格式和从数据库拿到的不一样,所以我们如果想把从数据库拿出的直接json样式展示出来,需要自己写一个转换函数。这个在后端还是前端都可以,我们就在后端完成这个工作。

假设由数据库得到一个df对象,现在把它拼接成这种形式的json字符串。

  • 我们发现json中指定的行和列,如果新增行列是在前面加,所以指定的时候就比数据库的数据多一行一列。

现在用 python 来实现格式转换:
dataframe -> dict -> dict2 -> list
dict2的格式在这里插入图片描述
这是一个四维字典,用

dict2['0']['cells']['0']['text']

可以访问到 第一个数据,这里就是 id, 但实际上数据是二维的,二四维是固定的‘cells’和’text’。

方案一:直接用字符串拼接

def df2xspreadsheetjson(df) -> str:
    '''
    df对象转为 x-spreadsheet格式的json字符串
    :param df: 从数据库得到的dataframe
    :return: str
    '''
    cols = []
    # 重命名标题行,主要考虑标题行空等情况
    for col in df.columns:
        if col == "":
            cols.append("N/A")  # 标题行空,一般不可能
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值