Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Thao tác với Excel trong C#

14:33 12-08-2022 1.031 lượt xem 0 bình luận 14:38 12-08-2022

Chào anh Long và mọi người, em đang làm 1 phần mềm quản lý quán cafe bằng WPF+MVVM, em làm đến phần xuất excel, em có tham khảo trên howkteam và làm thử, khi em chạy thì báo lỗi như thế này:

Đoạn code của em là:

 string filePath = "";
            // tạo SaveFileDialog để lưu file excel
            SaveFileDialog dialog = new SaveFileDialog();

            // chỉ lọc ra các file có định dạng Excel
            dialog.Filter = "Excel 2016 | *.xls";

            // Nếu mở file và chọn nơi lưu file thành công sẽ lưu đường dẫn lại dùng
            if (dialog.ShowDialog() == true)
            {
                filePath = dialog.FileName;
            }

            // nếu đường dẫn null hoặc rỗng thì báo không hợp lệ và return hàm
            if (string.IsNullOrEmpty(filePath))
            {
                MessageBox.Show("Đường dẫn báo cáo không hợp lệ");
                return;
            }

            try
            {
                using (ExcelPackage x = new ExcelPackage())
                {
                    // đặt tên người tạo file
                    x.Workbook.Properties.Author = "Nhóm sinh viên trường Đại Học Công Nghiệp Thực Phẩm TPHCM";
                    // đặt tiêu đề cho file
                    x.Workbook.Properties.Title = "Phiếu nhập kho";

                    //Tạo một sheet để làm việc trên đó
                    x.Workbook.Worksheets.Add("Kteam sheet");
                    // lấy sheet vừa add ra để thao tác
                    ExcelWorksheet ws = x.Workbook.Worksheets[1];

                    // đặt tên cho sheet
                    ws.Name = "Phiếu nhập kho";
                    // fontsize mặc định cho cả sheet
                    ws.Cells.Style.Font.Size = 14;
                    // font family mặc định cho cả sheet
                    ws.Cells.Style.Font.Name = "Times New Roman";

                    // Tạo danh sách các column header
                    string[] arrColumnHeader = {
                                               "STT",
                                               "Tên thức ăn",
                                               "Tên nhà cung cấp",
                                               "Ngày nhập",
                                               "Số lượng",
                                               "Giá nhập",
                                               "Thành tiền nhập",
                                               "Giá xuất",
                                               "Trạng thái nhập",
                                               "Nhân viên nhập kho"
                };

                    // lấy ra số lượng cột cần dùng dựa vào số lượng header
                    var countColHeader = arrColumnHeader.Count();

                    // merge các column lại từ column 1 đến số column header
                    // gán giá trị cho cell vừa merge là Thống kê thông tni User Kteam
                    ws.Cells[1, 1].Value = "Thống kê thông tin User Kteam";
                    ws.Cells[1, 1, 1, countColHeader].Merge = true;
                    // in đậm
                    ws.Cells[1, 1, 1, countColHeader].Style.Font.Bold = true;
                    // căn giữa
                    ws.Cells[1, 1, 1, countColHeader].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

                    int colIndex = 1;
                    int rowIndex = 2;

                    //tạo các header từ column header đã tạo từ bên trên
                    foreach (var item in arrColumnHeader)
                    {
                        var cell = ws.Cells[rowIndex, colIndex];

                        //set màu thành gray
                        var fill = cell.Style.Fill;
                        fill.PatternType = ExcelFillStyle.Solid;
                        fill.BackgroundColor.SetColor(System.Drawing.Color.LightBlue);

                        //căn chỉnh các border
                        var border = cell.Style.Border;
                        border.Bottom.Style =
                            border.Top.Style =
                            border.Left.Style =
                            border.Right.Style = ExcelBorderStyle.Thin;

                        //gán giá trị
                        cell.Value = item;

                        colIndex++;
                    }

                    // lấy ra danh sách UserInfo từ ItemSource của DataGrid
                    //List<InputInfo> userList = lvInput.ItemsSource.Cast<InputInfo>().ToList();

                    // với mỗi item trong danh sách sẽ ghi trên 1 dòng
                    foreach (var item in List)
                    {
                        // bắt đầu ghi từ cột 1. Excel bắt đầu từ 1 không phải từ 0
                        colIndex = 1;

                        // rowIndex tương ứng từng dòng dữ liệu
                        rowIndex++;

                        //gán giá trị cho từng cell                      
                        ws.Cells[rowIndex, colIndex++].Value =item.Id;
                        ws.Cells[rowIndex, colIndex++].Value = item.Food.Name;
                        ws.Cells[rowIndex, colIndex++].Value = item.Suplier.DisplayName;
                        //ws.Cells[rowIndex, colIndex++].Value = item.Input.DateInput;
                        ws.Cells[rowIndex, colIndex++].Value = item.Count;
                        ws.Cells[rowIndex, colIndex++].Value = item.InputPrice;
                        ws.Cells[rowIndex, colIndex++].Value = item.TotalInputPrice;
                        ws.Cells[rowIndex, colIndex++].Value = item.OutputPrice;
                        ws.Cells[rowIndex, colIndex++].Value = item.Status;
                        ws.Cells[rowIndex, colIndex++].Value = item.Employee.Name;
                        // lưu ý phải .ToShortDateString để dữ liệu khi in ra Excel là ngày như ta vẫn thấy.Nếu không sẽ ra tổng số :v
                        ws.Cells[rowIndex, colIndex++].Value = Convert.ToDateTime(item.Input.DateInput.ToString());

                    }

                    //Lưu file lại
                    Byte[] bin = x.GetAsByteArray();
                    File.WriteAllBytes(filePath, bin);
                }
                MessageBox.Show("Xuất excel thành công!");
            }
            catch (Exception EE)
            {
                MessageBox.Show("Có lỗi khi lưu file!"+"\n"+EE.ToString());
            }

Em không hiểu lỗi này là lỗi này. Mong anh Long và mọi người có thể giúp đỡ em. Em cảm ơn

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất