• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Đóng File excel vừa Output ra

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

hongcfc
Thành viên chính thức
Thành viên chính thức
Bài viết: 25
Ngày tham gia: T.Năm 03/07/2008 10:34 am

Đóng File excel vừa Output ra

Gửi bàigửi bởi hongcfc » T.Hai 20/11/2017 2:26 pm

Yêu cầu của mình như sau:
1. Tính toán dữ liệu và xuất ra file excel.
2. Tự động gửi file vừa xuất qua email
Mình đã code để xuất ra file excel thành công nhưng không thể TỰ ĐỘNG save dữ liệu và đóng file lại ngay để gửi email nên đến dòng lệnh Attatch sẽ báo lỗi "File đang mở, ko thể attach được"
Các bạn xem bổ sung code vào cho mình với

Mã: Chọn hết

 Dim i As Integer = 0
        If grdDATA.Rows.Count = 0 Then
            MsgBox("Empty datat!", vbCritical)
        Else
            Dim oExcel As Object = CreateObject("Excel.Application")
            Try
                Dim oBook As Object
                Dim oSheet As Object
                oBook = oExcel.Workbooks.open(sOutputPath)

                oSheet = oBook.Worksheets(1)
                '==========
                For i = 0 To grdDATA.Rows.Count - 1
                    With oSheet
                       'Truyền dl qua
                    End With
                Next
                i = i + 1
                oSheet = Nothing
                oBook = Nothing
                MsgBox("File is openning", vbExclamation, "Excel Export success")
                oExcel.Visible = True 'KỂ CẢ CHUYÊN THÀNH FALSE THÌ FILE KO HIEN RA NHƯNG VẪN CHẠY NGẦM
                oExcel = Nothing
                Try
                    oExcel.Workbooks.save()
                    oExcel.Workbooks.close()
                    oExcel.close()
                    oExcel.quit()
                Catch ex As Exception
                    MsgBox("File is closing", vbExclamation, "Excel Export success")
                End Try
            Catch ex As Exception
            End Try
        End If
    End Sub
   


Đến Sub SendMail sẽ báo lỗi File is opending ở dòng này
MyMailMessage.Attachments.Add(New Attachment(sOutputPath))=> đúng file mới tạo ra đang mở
Khi chạy Task Manager thì chr thấy báo Excel.Exe đang mở

Các bạn giúp mình lệnh save và đóng toàn bộ file output lại với
Thanks



Hình đại diện của người dùng
nhatlinh0207
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 389
Ngày tham gia: T.Tư 15/08/2012 7:54 pm
Has thanked: 54 time
Been thanked: 48 time

Re: Đóng File excel vừa Output ra

Gửi bàigửi bởi nhatlinh0207 » T.Hai 20/11/2017 2:41 pm

Bạn dung devexpress rồi chuyển dữ liệu vào Grid View xuất ra excel cực nhanh, ít lỗi, tự động save.

hongcfc
Thành viên chính thức
Thành viên chính thức
Bài viết: 25
Ngày tham gia: T.Năm 03/07/2008 10:34 am

Re: Đóng File excel vừa Output ra

Gửi bàigửi bởi hongcfc » T.Ba 21/11/2017 10:12 am

Mình ko thể xài thêm tool dc. Đây là ứng dụng nhỏ trong cty, ko thể vì nó mà mua thêm tool hic, chỉ dùng những cái có sẵn thôi,
Cái này tường đơn giản mà ko nghĩ là lại chết tắc ở đây

Hình đại diện của người dùng
nhatlinh0207
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 389
Ngày tham gia: T.Tư 15/08/2012 7:54 pm
Has thanked: 54 time
Been thanked: 48 time

Re: Đóng File excel vừa Output ra

Gửi bàigửi bởi nhatlinh0207 » T.Ba 21/11/2017 4:01 pm

Có cr@ack mà.

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Đóng File excel vừa Output ra

Gửi bàigửi bởi FlyingFox » T.Năm 23/11/2017 9:32 am

Bạn phải close Excel process trong task manager thì mới được.
Với cách viết trên cũa bạn thì phải làm như sau:
1. Đổi dòng Dim oExcel As Object = CreateObject("Excel.Application") thành
  1. Dim excelProcess1() As Process = Process.GetProcessesByName("EXCEL")
  2. Dim oExcel As Object = CreateObject("Excel.Application")
  3. Dim excelProcess2() As Process = Process.GetProcessesByName("EXCEL")

2. Ờ sau dòng oExcel.quit() thì viết thêm như sau
  1. For Each p As Process In excelProcess2.Except(excelProcess1)
  2.     p.Kill()
  3. Next

hongcfc
Thành viên chính thức
Thành viên chính thức
Bài viết: 25
Ngày tham gia: T.Năm 03/07/2008 10:34 am

Re: Đóng File excel vừa Output ra

Gửi bàigửi bởi hongcfc » T.Ba 28/11/2017 3:46 pm

Cảm ơn bạn FlyingFox
Code của bạn đã xóa được excel.exe trong task
Nhưng mình đã sửa lại phần Save file nên không cần dùng đến cũng ko báo lỗi ở đó nữa
Tuy nhiên 1 vấn đề khác nảy sinh
Mình làm code trong time ticker sau mỗi 6h lại tự động output và tự gửi 2 file này vào email
Lần đầu chạy bình thường, dữ liệu gửi đúng nhưng đến lần 2(sau 6h) sau nó lai báo lỗi "file đang mở" ngay ở chỗ output file lần thứ 2
Task đã dùng code của bạn và cũng ko thấy chạy Excel.exe nữa
Không hiểu được là khi attach file vào mail thì nó mở cái gì ra nữa, send thành công rồi mà

Khi đóng cái sub send mail thì lại ok

Mã: Chọn hết

Private Sub SendEmail()
        Dim MyMailMessage As New MailMessage()
        MyMailMessage.From = New MailAddress("data@cfc.vn")
        MyMailMessage.To.Add(sMailTO)

        MyMailMessage.Subject = "Head count for meal Date: " + Date.Today
        MyMailMessage.Body = "Dữ liệu báo cơm"
        '======== đính kèm file========
        MyMailMessage.Attachments.Add(New Attachment(sOutputPath))
        MyMailMessage.Attachments.Add(New Attachment(sOutputPathCount))

        'Create the SMTPClient object and specify the SMTP GMail server
        Dim SMTPServer As New SmtpClient("smtp.office365.com")
        SMTPServer.Port = 25
        SMTPServer.Credentials = New System.Net.NetworkCredential("data@gmail.com", "abcdef")
        SMTPServer.EnableSsl = True
        Try
            SMTPServer.Send(MyMailMessage)
            MessageBox.Show("Email Sent")
        Catch ex As SmtpException
            MessageBox.Show(ex.Message)
        End Try
        Dim excelProcess1() As Process = Process.GetProcessesByName("EXCEL")
        Dim excelProcess2() As Process = Process.GetProcessesByName("EXCEL")
        For Each p As Process In excelProcess2.Except(excelProcess1)
            p.Kill()
        Next
       
    End Sub


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.4 khách