批量转换LabVIEW生成的.xlsx为.csv报openpyxl相关TypeError如何解决
问题原因分析
- 报错
TypeError: expected <class 'openpyxl.styles.fills.Fill'>本质是openpyxl读取文件时检测到不符合规范的样式定义,LabVIEW导出的xlsx文件通常会携带非标准的填充样式配置,触发该校验错误。 - 单文件转换正常是因为你手动指定了有效正常的xlsx文件,批量遍历时
glob会匹配到目录下所有后缀为.xlsx的文件,包括Office/LabVIEW运行时生成的~$开头的临时隐藏文件,这类文件本身结构异常,读取时会触发报错。
修复后的批量转换代码
import pandas as pd import os from glob import glob # 替换为你的目标文件夹路径 target_dir = r"C:\path..." for xlsx_file in glob(os.path.join(target_dir, "*.xlsx")): # 跳过临时隐藏文件 if os.path.basename(xlsx_file).startswith("~$"): continue try: # 仅读取单元格数值,跳过样式、公式等非必要内容,规避样式校验报错 df = pd.read_excel(xlsx_file, engine="openpyxl", data_only=True) csv_file = os.path.splitext(xlsx_file)[0] + ".csv" # utf-8-sig编码适配中文内容不出现乱码,不需要可删除该参数 df.to_csv(csv_file, index=None, header=True, encoding="utf-8-sig") print(f"转换成功:{os.path.basename(xlsx_file)}") except Exception as e: print(f"转换失败:{os.path.basename(xlsx_file)},错误信息:{str(e)}")
补充说明
- 若仍有个别文件转换失败,可手动打开对应文件确认是否损坏,若出现中文乱码可将
to_csv的encoding参数调整为gbk适配Windows系统默认编码。 - 不要在LabVIEW仍处于写入xlsx文件的状态下执行脚本,避免读取到未完成写入的半损坏文件。
内容的提问来源于stack exchange,提问作者R_Dax
相关产品推荐
相关产品推荐

