2014-11-24 17 views

Trả lời

4

Không, nó không phải là có thể trực tiếp trong ClosedXML. Bạn phải sử dụng vòng lặp hoặc LINQ để tạo tệp CSV của riêng bạn.

Ví dụ:

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

Tất cả các cột được viết dưới dạng cột đơn. –

0

sai trong

row.LastCellUsed(false) 

nó không phải là một định dạng chính xác cho csv. Các cột cuối cùng sẽ trống rỗng thay vì lấy dấu phân cách tương đối.

0

Khi @Emanuele chỉ ra, câu trả lời của @ Raidri sẽ không tạo ra định dạng CSV phù hợp và cũng bỏ qua hàng trống hoàn toàn. Để sửa lỗi này:

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

câu trả lời khác sẽ thất bại trong việc tạo ra một CSV hợp lệ nếu các tế bào có dấu phân cách vì vậy đây là một cách tốt hơn

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

này được dựa trên @Extragorey 's câu trả lời

+0

tính năng này hoạt động với định dạng đúng –

Các vấn đề liên quan