Đọc và ghi tệp Excel bằng C#, không cần cài Excel

WorkbookEditor đọc và ghi tệp XLSX từ .NET mà không cần cài Excel. Bài này nói về giá trị ô, tệp tải lên chưa biết cấu trúc, công thức và định dạng, cùng giới hạn của phần định dạng.

byte[] xlsx = WorkbookEditor.Create("Sales", new object?[][]
{
    new object?[] { "Region", "Total" },
    new object?[] { "North",  1200 },
    new object?[] { "South",  950 },
});

string before = WorkbookEditor.ReadCell(xlsx, "Sales", "B2");
byte[] updated = WorkbookEditor.SetCell(xlsx, "Sales", "B2", 1500);
string after = WorkbookEditor.ReadCell(updated, "Sales", "B2");

Số vẫn là số

  • WorkbookEditor xử lý XLSX. Không cần Excel.
  • Giá trị ô có kiểu object?. Số được ghi là số và chuỗi được ghi là chuỗi, nên một cột tổng cộng có thể cộng được trong Excel.
  • ReadCell trả về giá trị của ô dưới dạng văn bản, không phải cách Excel hiển thị ô.
  • Ô chứa 1200 với định dạng số #,##0.00 được đọc lại là 1200, không phải 1,200.00.

Đọc tệp bạn được giao

  • Bạn không cần biết trước cấu trúc của workbook.
  • SheetNames cho biết trong tệp có những sheet nào, còn ReadSheet trả về vùng đã dùng dưới dạng các dòng chuỗi.
  • Hai hàm này đủ để duyệt một tệp tải lên mà bạn chưa từng thấy.

Công thức

  • Ô chứa XlsxFormula được ghi là công thức, không phải văn bản bắt đầu bằng =.
  • Hãy ghi không có dấu = ở đầu, như XlsxFormula.From("SUM(Q1!B2:B4)"). Trình ghi sẽ tự thêm =.
  • Đọc lại qua DocToolkit, công thức cho ra giá trị đã tính.
  • Trình đọc chỉ đọc giá trị đã lưu sẵn sẽ thấy một ô trống, cho đến khi Excel mở và lưu tệp.

Cho sheet trông như một báo cáo

  • XlsxFormat.Report là bộ cài đặt sẵn thường dùng: tiêu đề in đậm, cố định hàng tiêu đề và tự khớp độ rộng cột.
  • Format là một lời gọi riêng nhận workbook và tên sheet, nên dùng được trên sheet đã có.
  • Tự khớp độ rộng cột chỉnh cột theo nội dung. Với giá trị ngắn, cột sẽ hẹp hơn mặc định 8,43 ký tự của Excel.

Những điều nó không làm

  • Bộ định dạng là một tập đóng: sáu điều kiện quy tắc, năm kiểu kiểm tra dữ liệu và bốn kiểu tô nổi. Cần phông chữ, đường viền hay thang màu tùy ý thì dùng thẳng ClosedXML.
  • WithTable và WithAutoFilter không được áp lên các vùng chồng nhau. Dùng cả hai trên cùng các ô sẽ ném DocumentConversionException.
  • WithTable không làm AppendRows cập nhật bảng. Dòng mới nằm cạnh bảng chứ không nằm trong bảng.