使用ssconvert将CSV转XLSX时如何保留日期格式
解决ssconvert转换CSV到XLSX时日期格式被修改的问题
ssconvert自动解析CSV中的日期字段并变更格式,且format=preserve选项仅对文本文件生效,以下是几种可行的解决方案:
方案1:强制ssconvert以纯文本导入CSV字段
通过指定CSV导入规则,强制将日期字段当作纯文本处理,避免自动解析:
ssconvert --import-type=Gnumeric_stf:stf_csv -O "type=text" --export-type=Gnumeric_Excel:xlsx test.csv test.xlsx
如果仅需指定特定列为文本(比如第2列是日期),可以用col_types精准控制列类型:
ssconvert --import-type=Gnumeric_stf:stf_csv -O "col_types=text,text,number" --export-type=Gnumeric_Excel:xlsx test.csv test.xlsx
说明:col_types的每个值对应CSV的一列,text表示纯文本,number表示数字类型,按实际列顺序调整即可。
方案2:使用LibreOffice命令行转换(格式控制更可靠)
LibreOffice的命令行工具对CSV转XLSX的格式支持更灵活,可直接指定输入日期格式:
libreoffice --headless --convert-to xlsx --infilter="CSV:44,34,UTF8,1,1,0,false,false,false,1031,1/1/1900,d.m.Y" test.csv
参数说明:
44:CSV分隔符为逗号(ASCII码)34:引号字符为双引号UTF8:文件编码1:第一行是表头(无表头则改为0)d.m.Y:指定输入的日期格式,确保转换后保持该显示格式
方案3:Python脚本精准控制(适合批量/复杂场景)
用pandas结合openpyxl可以完全自定义日期格式,支持两种处理方式:
方式1:将日期保存为纯文本格式
import pandas as pd # 读取CSV,按指定格式解析日期后转成字符串 df = pd.read_csv('test.csv') df['date_column'] = pd.to_datetime(df['date_column'], format='%d.%m.%Y').dt.strftime('%d.%m.%Y') # 保存为XLSX df.to_excel('test.xlsx', index=False)
方式2:保留Excel日期类型,设置显示格式为d.m.Y
import pandas as pd from openpyxl.styles import NamedStyle # 定义自定义日期格式 custom_date_style = NamedStyle(name='d_m_Y', number_format='DD.MM.YYYY') # 读取并解析日期 df = pd.read_csv('test.csv', parse_dates=['date_column'], date_parser=lambda x: pd.to_datetime(x, format='%d.%m.%Y')) # 写入XLSX并应用格式 with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer: df.to_excel(writer, index=False) worksheet = writer.sheets['Sheet1'] # 遍历日期列(假设在B列)应用格式,跳过表头行 for cell in worksheet['B'][1:]: cell.style = custom_date_style
内容的提问来源于stack exchange,提问作者Dominick Makome
相关产品推荐
相关产品推荐

