2014-11-24 19 views

Odpowiedz

4

Nie, to nie jest możliwe bezpośrednio w ClosedXML. Musisz użyć pętli lub LINQ, aby zbudować własny plik CSV.

Na przykład:

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

Wszystkie kolumny są zapisywane jako pojedyncza kolumna. –

0

źle w

row.LastCellUsed(false) 

to nie jest poprawny format csv. Ostatnie kolumny będą puste zamiast separatora względnego.

0

Jak zaznacza @Emanuele, odpowiedź @Raidriego nie generuje prawidłowego formatu CSV, a także całkowicie pustych wierszy. Aby rozwiązać ten problem:

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>())) 
)); 
2

Inne odpowiedzi nie wygeneruje poprawny CSV jeśli komórki mają separator więc tutaj jest lepszy sposób

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; 
     })))); 

ta opiera się na @Extragorey „s odpowiedź

+0

to działa z poprawnym formatem –

Powiązane problemy