如何将Excel工作表批量转为保留全小数的独立CSV文件(Linux兼容)
Linux下Excel工作表转高精度CSV的自动化实现方案
一、Python代码实现(可控性强,适合定制需求)
依赖准备
Linux环境下安装跨平台的Excel处理库:
pip install openpyxl
(若需处理.xls格式,需安装旧版xlrd:pip install xlrd==1.2.0)
核心代码
该脚本会遍历Excel工作簿的所有工作表,将每个工作表导出为独立CSV,严格保留数值的所有有效小数位,避免舍入:
import openpyxl import csv from pathlib import Path def excel_to_precise_csv(excel_file_path): # 加载工作簿,仅读取单元格实际值(忽略公式) wb = openpyxl.load_workbook(excel_file_path, data_only=True) file_path = Path(excel_file_path) # 创建输出目录 output_dir = file_path.parent / f"{file_path.stem}_split_csvs" output_dir.mkdir(exist_ok=True) # 遍历每个工作表 for sheet_name in wb.sheetnames: ws = wb[sheet_name] csv_output_path = output_dir / f"{sheet_name}.csv" with open(csv_output_path, 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) for row in ws.iter_rows(values_only=True): processed_row = [] for cell_val in row: # 处理数值型单元格,保留所有有效小数位 if isinstance(cell_val, float): # 先保留15位小数(覆盖Excel双精度存储的最大有效位数),再去除末尾冗余的0和小数点 str_val = f"{cell_val:.15f}".rstrip('0').rstrip('.') if '.' in f"{cell_val:.15f}" else f"{cell_val}" processed_row.append(str_val) else: # 非数值直接保留原始内容 processed_row.append(cell_val) writer.writerow(processed_row) # 替换为你的Excel文件路径 excel_to_precise_csv("your_high_precision_workbook.xlsx")
关键说明
data_only=True:确保读取的是单元格计算后的实际值,而非公式- 数值处理逻辑:避免科学计数法和不必要的舍入,完全保留Excel中存储的有效精度
二、LibreOffice命令行方案(无需编程,快速自动化)
利用Linux下的LibreOffice无界面模式,直接批量转换,适合不需要定制的场景。
安装依赖
Debian/Ubuntu系:
sudo apt update && sudo apt install libreoffice-calc
RHEL/CentOS系:
sudo dnf install libreoffice-calc
转换命令
libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)" --outdir ./output_csvs your_workbook.xlsx
效果说明
- 自动将每个工作表导出为独立CSV文件,命名格式为
[原文件名]_[工作表名].csv - 采用StarCalc的CSV导出规则,默认保留数值的全部精度,不会随意舍入浮点值
方案对比
- Python方案:适合需要额外定制(比如过滤行/列、重命名文件)的场景,精度控制完全自主
- LibreOffice方案:零代码,快速实现批量转换,适合简单的拆分需求
内容的提问来源于stack exchange,提问作者tonytone
相关产品推荐
相关产品推荐

