【问题标题】:Can I save an EXCEL worksheet as CSV via ClosedXML?我可以通过 ClosedXML 将 EXCEL 工作表保存为 CSV 吗?
【发布时间】:2015-01-22 01:13:38
【问题描述】:

是否可以通过 ClosedXML 将工作簿的工作表保存为 CSV?

例如:

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

如何将其保存为 CSV?

【问题讨论】:

    标签: c# .net excel closedxml


    【解决方案1】:

    如果单元格有分隔符,其他答案将无法生成有效的 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的回答

    【讨论】:

      【解决方案2】:

      正如@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>()))
      ));
      

      【讨论】:

        【解决方案3】:

        错了

        row.LastCellUsed(false)
        

        这不是 csv 的正确格式。最后一列将为空而不是获取相对分隔符。

        【讨论】:

          【解决方案4】:

          不,直接在 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>()))
           ));
          

          【讨论】:

          • 所有列都写成单列。
          • 你改变了“;”到“,”当你这样做时它对我有用。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-21
          • 2019-08-06
          • 2012-03-18
          • 2021-08-31
          • 1970-01-01
          • 1970-01-01
          • 2012-06-03
          相关资源
          最近更新 更多