簡體   English   中英

我可以通過 ClosedXML 將 EXCEL 工作表保存為 CSV 嗎?

[英]Can I save an EXCEL worksheet as CSV via ClosedXML?

是否可以通過 ClosedXML 將工作簿的工作表保存為 CSV?

例如:

var workbook = new XLWorkbook(fileName);
IXLWorksheet worksheet;
workbook.Worksheets.TryGetWorksheet(sheetName, out worksheet);

如何將其另存為 CSV?

如果單元格具有分隔符,則其他答案將無法生成有效的 CSV,因此這是更好的方法

var lastCellAddress = worksheet.RangeUsed().LastCell().Address;
File.WriteAllLines(csvFileName, worksheet.Rows(1, lastCellAddress.RowNumber)
    .Select(r => string.Join(",", r.Cells(1, lastCellAddress.ColumnNumber)
            .Select(cell =>
        {
            var cellValue = cell.GetValue<string>();
            return cellValue.Contains(",") ? $"\"{cellValue}\"" : cellValue;
        }))));

這是基於@Extragorey的回答

不,不能直接在 ClosedXML 中使用。 您必須使用循環或 LINQ 來構建您自己的 CSV 文件。

例如:

System.IO.File.WriteAllLines(csvFileName,
    worksheet.RowsUsed().Select(row =>
        string.Join(";", row.Cells(1, row.LastCellUsed(false).Address.ColumnNumber)
                            .Select(cell => cell.GetValue<string>()))
 ));

正如@Emanuele 指出的那樣,@Raidri 的答案不會生成正確的 CSV 格式,並且它也完全省略了空白行。 要解決此問題:

var lastCellAddress = worksheet.RangeUsed().LastCell().Address;
System.IO.File.WriteAllLines(csvFileName, worksheet.Rows(1, lastCellAddress.RowNumber)
    .Select(row => String.Join(",", row.Cells(1, lastCellAddress.ColumnNumber)
        .Select(cell => cell.GetValue<string>()))
));

錯在

row.LastCellUsed(false)

這不是 csv 的正確格式。 最后一列將為空而不是獲取相對分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM