openpyxl写出xlsx时莫名丢失掉多列数据(变为nan)

乌秃头
• 阅读 276

后来发现:其实并不是莫名丢失,而是里面包含excel函数,比如

  =LEFT("1981-12-03",19)

这样的,所以,把LEFT内部数据用re解析一编再设置到表格里输出就好了。

LEFT_FORMULA = r"^=LEFT\s*[(]\s*\"(.+)\"\s*,\s*(\d+)\s*[)]$"

def parsingFormulas(wb):
    sheetnames = wb.sheetnames
    for sheet_name in sheetnames:
        sheet = wb[sheet_name]
        rowc = sheet.max_row
        colc = sheet.max_column
        for rowi in range(rowc):
            for coli in range(colc):  # 这里的code是字典的key
                # val = sheet.cell(row=rowi+1, column=coli+1).value
                val = sheet.cell(row=rowi+1, column=coli+1).value
                if type(val)==str and re.match(LEFT_FORMULA, val):
                    vals = re.match(LEFT_FORMULA, val).groups()
                    sheet.cell(row=rowi+1, column=coli+1).value = vals[0][0:int(vals[1])]
点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
皕杰报表(关于日期时间时分秒显示不出来)
在使用皕杰报表设计器时,数据据里面是日期型,但当你web预览时候,发现有日期时间类型的数据时分秒显示不出来,只有年月日能显示出来,时分秒显示为0:00:00。1.可以使用tochar解决,数据集用selecttochar(flowdate,"yyyyMMddHH:mm:ss")fromtablename2.也可以把数据库日期类型date改成timestamp
kenx kenx
3年前
MySQL查询结果集字符串操作之多行合并与单行分割
前言我们在做项目写sql语句的时候,是否会遇到这样的场景,就是需要把查询出来的多列,按照字符串分割合并成一列显示,或者把存在数据库里面用逗号分隔的一列,查询分成多列呢,常见场景有,文章标签,需要吧查询多个标签合并成一列,等,需要怎么去实现呢,这就涉及到MySQL的字符串操作groupconcat场景再现我想把查询多列数据合并成一列显示用逗号分隔
Wesley13 Wesley13
3年前
mysql主从检测状态命令
开启:binlog1,另外注意选择行,列,还是混合模式1)salve:mysqldserverid2relaylogindexslaverelaybin.indexrelaylogslaverelaybin//设置哪些数据库和表需要同步,多个库和表多写几次re
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
R语言的xtabs函数
今天在做一个列联表独立性检验的时候,总是无法处理好要求的数据类型,偶然的机会,看到了xtabs()函数,感觉很适合用来做列联表,适合将一列数据转换成列联表。shifou<c("yes","yes","no","no")xinbie<c("nan","nv","nan","nv")freq<c(34,38,28
Wesley13 Wesley13
3年前
oracle查询表数据并重新插入到本表
oracle查询表数据并重新插入到本表CreateTime2018年5月17日10:30:10Author:Marydon1.情景描述查询表中数据SELECTFROMat_aut
Wesley13 Wesley13
3年前
MySQL清空表漏洞!
MySQL有一个特点,当某个字段是字符串时,如果你的sql传数字它会尝试把这一列所有值转换成数字进行匹配,如果不是数字则会转换为0.创建表test,并插入测试数据CREATETABLEtest(idvarchar(10)NOTNULL,PRIMARYKEY(id));
Stella981 Stella981
3年前
Python的面试题
(1)怎么把一个字符串转换成整型?   可以使用int函数 如int('3')  结果由字符串'3'变为整型3(2)python内建数据类型有哪些?   int、bool、str、list、ruple、dict(3)怎么把一个数字格式化输出为10位宽度,不足前面补零?   可以用'%0
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
乌秃头
乌秃头
Lv1
乌秃头,把恰峠。
文章
2
粉丝
0
获赞
0