You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibreOffice转XLSX为CSV:日期统一格式与指定工作表方法咨询

LibreOffice 转换XLSX到CSV的问题解决

问题1:统一转换带月份缩写的日期格式

31/Dec/2022这类带月份缩写的内容,大概率被LibreOffice识别为文本类型而非日期值,所以直接用命令行转换不会自动处理。可以通过以下两种方式解决:

方案1:宏脚本批量转换文本日期

编写LibreOffice Basic宏,遍历单元格识别文本格式的日期,转为标准日期值并设置统一格式,再导出CSV。示例宏代码:

Sub ConvertDatesAndExport
    Dim oDoc As Object, oSheet As Object, oCell As Object
    Dim i As Integer, j As Integer
    oDoc = ThisComponent
    ' 遍历所有工作表
    For Each oSheet In oDoc.Sheets
        For i = 0 To oSheet.Rows.Count - 1
            For j = 0 To oSheet.Columns.Count - 1
                oCell = oSheet.getCellByPosition(j, i)
                ' 仅处理文本类型单元格
                If oCell.Type = com.sun.star.table.CellContentType.TEXT Then
                    On Error Resume Next
                    Dim dateVal As Date
                    dateVal = CDate(oCell.String)
                    ' 转换成功则设置为日期值和指定格式
                    If Err = 0 Then
                        oCell.setValue(dateVal)
                        oCell.NumberFormat = oDoc.NumberFormats.getFormat("YYYY/MM/DD")
                    End If
                    On Error GoTo 0
                End If
            Next j
        Next i
    Next oSheet
    ' 执行导出(可结合原有命令行参数调整)
End Sub

调用宏的命令行:

libreoffice --headless --macro ConvertDatesAndExport --convert-to csv:"Text - txt - csv (StarCalc)":44,34,UTF8,1,,0,false,true,false,false,false,-1 date.xlsx

方案2:预先手动处理(适合少量文件)

打开XLSX文件,用DATEVALUE函数将文本日期转为日期值,批量设置单元格格式为YYYY/MM/DD,再用原有命令行导出。


问题2:指定单个工作表转换

LibreOffice原生命令行不支持直接指定工作表,可通过以下两种方式实现:

方案1:使用unoconv工具

unoconv是LibreOffice的命令行封装工具,支持指定工作表导出,命令示例:

unoconv -f csv -e "Sheet=Sheet1" date.xlsx

(需提前安装unoconv,如apt install unoconv或brew install unoconv)

方案2:宏脚本指定工作表导出

编写宏仅处理目标工作表并导出为CSV,示例代码:

Sub ExportSpecificSheet
    Dim oDoc As Object, oSheet As Object, oExportOpts As Object
    oDoc = ThisComponent
    ' 指定要导出的工作表名称
    oSheet = oDoc.Sheets.getByName("Sheet1")
    oDoc.CurrentController.ActiveSheet = oSheet
    
    ' 配置导出参数(对应原有命令的CSV格式设置)
    Dim oFilterData(10) As New com.sun.star.beans.PropertyValue
    oFilterData(0).Name = "FieldSeparator" : oFilterData(0).Value = ","
    oFilterData(1).Name = "TextDelimiter" : oFilterData(1).Value = """"
    oFilterData(2).Name = "CharacterSet" : oFilterData(2).Value = "UTF8"
    oFilterData(3).Name = "RowNumber" : oFilterData(3).Value = 1
    oFilterData(4).Name = "ExportFormula" : oFilterData(4).Value = False
    oFilterData(5).Name = "ExportCellFormat" : oFilterData(5).Value = True
    oFilterData(6).Name = "QuoteAllText" : oFilterData(6).Value = False
    oFilterData(7).Name = "FixedColumnWidth" : oFilterData(7).Value = False
    oFilterData(8).Name = "SaveCellStyles" : oFilterData(8).Value = False
    oFilterData(9).Name = "SaveDocumentProperties" : oFilterData(9).Value = False
    oFilterData(10).Name = "ExportHiddenRows" : oFilterData(10).Value = -1
    
    oExportOpts = CreateUnoStruct("com.sun.star.beans.PropertyValue")
    oExportOpts.Name = "FilterName"
    oExportOpts.Value = "Text - txt - csv (StarCalc)"
    
    ' 导出CSV,替换为你的目标路径
    oDoc.storeToURL("file:///home/user/Sheet1.csv", Array(oExportOpts, CreateUnoStruct("com.sun.star.beans.PropertyValue", "FilterData", 0, oFilterData)))
End Sub

调用宏的命令行:

libreoffice --headless --macro ExportSpecificSheet date.xlsx

内容的提问来源于stack exchange,提问作者Philippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:05:35