Html mở tệp excel thay vì tải xuống

Tài liệu này giải thích cách mở tệp Microsoft Excel trong trình duyệt mà không hiển thị hộp thoại Mở-Lưu-Hủy

Cần lưu ý ở đây rằng hạn chế bảo mật không cho phép tải xuống tệp trực tiếp được thực thi bởi Microsoft (hoặc các nhà cung cấp trình duyệt khác), không phải bởi Aspose. Nó được áp dụng để chặn và hạn chế các tệp có khả năng gây hại được tải xuống máy cục bộ

Sẽ rất nguy hiểm nếu hệ thống cục bộ của khách hàng cho phép tải xuống mà không hiển thị hộp thoại Mở-Lưu-Hủy để nhắc tải xuống. Không có tùy chọn hoặc cách giải quyết nào có sẵn từ Aspose vì đây sẽ là một rủi ro bảo mật rất lớn

Tại sao lại là rủi ro bảo mật?

Hình ảnh sau đây hiển thị hộp thoại Mở-Lưu-Hủy do Internet Explorer hiển thị khi cố tải xuống một tệp

Hộp thoại Mở-Lưu-Hủy
Html mở tệp excel thay vì tải xuống
Như đã giải thích ở trên, việc cho phép một tệp mở hoặc chạy trên hệ thống của bạn mà không xác nhận rằng bạn thực sự muốn nó là một rủi ro bảo mật. Một số tệp chứa vi-rút và một số trang web sẽ cố tải các tệp có hại xuống máy của bạn mà không nhắc bạn. Do đó, bạn không nên cho phép tải xuống tệp mà không có lời nhắc tải xuống để người dùng phải xác minh tệp và nguồn của tệp có thể được xác minh trước khi tải xuống hoặc chạy tệp đó. Vô hiệu hóa hộp thoại tải xuống khiến hệ thống dễ bị nhiễm vi-rút, Trojan và tin tặc có thể âm thầm ảnh hưởng đến hệ thống của bạn

Mở tệp mà không có hộp thoại Mở-Lưu-Hủy

Mặc dù đây là một vấn đề bảo mật lớn, nhưng Microsoft vẫn cung cấp các cài đặt Internet Explorer cho phép người dùng tắt lời nhắc Mở-Lưu-Hủy để tải xuống tệp

Khi tải xuống tệp, trong khay tải xuống ở phía dưới, tệp sẽ hiển thị để hiển thị tiến trình của nó. nhấp vào mũi tên lên "^"
  • một menu bật lên sẽ xuất hiện, Nhấp vào tùy chọn đã chọn cho các tệp luôn mở thuộc loại này và thao tác này sẽ bỏ chọn tùy chọn đó

    Mở "My Computer" và chọn "Folder Options" trong menu "View". Chọn tab "Loại tệp" và tìm biểu tượng có nội dung Bảng tính Microsoft Excel trong Loại tệp đã đăng ký. Chọn hộp trong cửa sổ mới có nội dung "Xác nhận mở sau khi tải xuống". Nhấp vào OK

    Thông tin này có hữu ích không?

    Chào mọi người,
    Người đã đặt câu hỏi ban đầu (bayus. firestorm) đã đánh dấu chủ đề này là đã được giải quyết và những người khác dường như đang sử dụng chủ đề này để khiếu nại và thảo luận riêng, vì vậy tôi sẽ khóa chủ đề này. Hãy yên tâm rằng chúng tôi đã chuyển phản hồi của bạn cho nhóm Firefox. Họ đã hỏi về những gì người dùng ở đây đã nói và chúng tôi đã đưa vào nhận xét của bạn. Khi mở tệp từ bất kỳ trình duyệt nào, tệp sẽ được tải xuống thư mục "''TEMP''" của Windows. Nhiều người không thể tìm thấy tệp mà họ đã mở hoặc xóa chúng. Thay đổi này làm cho việc tải xuống thư mục Tải xuống trở thành hành vi mặc định. Nếu chọn, bạn có thể khiến Firefox hỏi phải làm gì với các loại tệp cụ thể. Đây là cách làm cho nó hỏi. 1. Nhấp vào biểu tượng '''Downloads''' trên thanh công cụ (nó sẽ tự động mở khi bạn tải xuống tệp). 2. Nhấp chuột phải vào tệp và bật '''Luôn mở các tệp tương tự''' 3. Vào '''Cài đặt''', và cuộn xuống phần ''Ứng dụng'' 4. Bên cạnh loại tệp, nhấp vào cột Hành động và đặt thành '''Luôn hỏi''' Bạn vẫn cần xóa tệp theo cách thủ công.

    Đây là cách Chrome xử lý tải xuống tệp. Google đã quyết định rằng thay vì cho phép các ứng dụng tự động mở các tệp được tải xuống qua Chrome, các tệp phải được tải xuống máy cục bộ của bạn. Thật không may, không có cách giải quyết cho việc này. Nếu bạn muốn tự động mở các tệp từ Sharepoint để làm việc và lưu vào SP trong trình duyệt, bạn sẽ cần sử dụng một trình duyệt khác như IE hoặc Firefox

    Tuy nhiên, nếu bạn chỉ muốn file tải về và tự động mở ứng dụng, hãy xem câu trả lời của Tekla. Sau khi tải xuống, bạn sẽ nhấp vào mũi tên lên/dấu mũ (^) bên cạnh phần tải xuống trên thanh trạng thái và chọn "Luôn mở các tệp thuộc loại này". Điều này sẽ khiến Chrome chuyển quá trình tải xuống sang ứng dụng được liên kết

    Từ mô tả của bạn. bạn muốn mở trực tiếp excel của mình trong trình duyệt web. thay vì Ứng dụng Excel

    Theo như tôi biết, không thể đạt được điều đó bằng mã trên máy chủ bằng bất kỳ thứ gì sử dụng ActiveX hoặc Phản hồi, nhưng bạn có thể thử đạt được điều đó bằng cách triển khai ở phía Máy khách (chọn bất kỳ thư mục nào trong PC khách -> Công cụ -> Tùy chọn thư mục - . Vì vậy, bạn có thể chọn thay thế như sau

    Bạn không thể trực tiếp trả lại tệp để tải xuống qua lệnh gọi AJAX, vì vậy, một cách tiếp cận khác là sử dụng lệnh gọi AJAX để đăng dữ liệu liên quan lên máy chủ của bạn. Sau đó, bạn có thể sử dụng mã phía máy chủ để tạo Tệp Excel (Tôi khuyên bạn nên sử dụng EPPlus hoặc NPOI cho việc này mặc dù có vẻ như phần này của bạn đang hoạt động)

    CẬP NHẬT tháng 9 năm 2016

    Câu trả lời ban đầu của tôi (bên dưới) đã hơn 3 năm tuổi, vì vậy tôi nghĩ rằng tôi sẽ cập nhật vì tôi không còn tạo tệp trên máy chủ khi tải xuống tệp qua AJAX, tuy nhiên, tôi đã để lại câu trả lời ban đầu vì nó vẫn có thể được sử dụng tùy thuộc vào

    Một kịch bản phổ biến trong các ứng dụng MVC của tôi là báo cáo qua một trang web có một số tham số báo cáo do người dùng định cấu hình (Phạm vi ngày, Bộ lọc, v.v. ). Khi người dùng đã chỉ định các tham số mà họ đăng chúng lên máy chủ, báo cáo sẽ được tạo (ví dụ: một tệp Excel làm đầu ra) và sau đó tôi lưu trữ tệp kết quả dưới dạng một mảng byte trong nhóm TempData với một tham chiếu duy nhất. Tham chiếu này được trả lại dưới dạng Kết quả Json cho chức năng AJAX của tôi, chức năng này sau đó sẽ chuyển hướng đến hành động của bộ điều khiển riêng biệt để trích xuất dữ liệu từ TempData và tải xuống trình duyệt của người dùng cuối

    Để cung cấp thêm chi tiết này, giả sử bạn có Chế độ xem MVC có biểu mẫu được liên kết với lớp Mô hình, hãy gọi Mô hình ReportVM

    Đầu tiên, cần có một hành động của bộ điều khiển để nhận mô hình đã đăng, một ví dụ sẽ là

    public ActionResult PostReportPartial(ReportVM model){
    
       // Validate the Model is correct and contains valid data
       // Generate your report output based on the model parameters
       // This can be an Excel, PDF, Word file - whatever you need.
    
       // As an example lets assume we've generated an EPPlus ExcelPackage
    
       ExcelPackage workbook = new ExcelPackage();
       // Do something to populate your workbook
    
       // Generate a new unique identifier against which the file can be stored
       string handle = Guid.NewGuid().ToString();
    
       using(MemoryStream memoryStream = new MemoryStream()){
            workbook.SaveAs(memoryStream);
            memoryStream.Position = 0;
            TempData[handle] = memoryStream.ToArray();
       }      
    
       // Note we are returning a filename as well as the handle
       return new JsonResult() { 
             Data = new { FileGuid = handle, FileName = "TestReportOutput.xlsx" }
       };
    
    }
    

    Cuộc gọi AJAX đăng biểu mẫu MVC của tôi lên bộ điều khiển ở trên và nhận được phản hồi giống như thế này

    $ajax({
        cache: false,
        url: '/Report/PostReportPartial',
        data: _form.serialize(), 
        success: function (data){
             var response = JSON.parse(data);
             window.location = '/Report/Download?fileGuid=' + response.FileGuid 
                               + '&filename=' + response.FileName;
        }
    })
    

    Hành động của bộ điều khiển để xử lý việc tải xuống tệp

    [HttpGet]
    public virtual ActionResult Download(string fileGuid, string fileName)
    {   
       if(TempData[fileGuid] != null){
            byte[] data = TempData[fileGuid] as byte[];
            return File(data, "application/vnd.ms-excel", fileName);
       }   
       else{
            // Problem - Log the error, generate a blank file,
            //           redirect to another controller action - whatever fits with your application
            return new EmptyResult();
       }
    }
    

    Một thay đổi khác có thể dễ dàng được cung cấp nếu được yêu cầu là chuyển Loại MIME của tệp dưới dạng tham số thứ ba để một hành động của Bộ điều khiển có thể phục vụ chính xác nhiều định dạng tệp đầu ra

    Điều này loại bỏ mọi nhu cầu đối với bất kỳ tệp vật lý nào được tạo và lưu trữ trên máy chủ, do đó không cần phải thực hiện các quy trình quản lý và một lần nữa, điều này là liền mạch với người dùng cuối

    Lưu ý, lợi thế của việc sử dụng TempData thay vì Session là khi đọc xong TempData, dữ liệu sẽ bị xóa nên sẽ hiệu quả hơn về mặt sử dụng bộ nhớ nếu bạn có số lượng lớn yêu cầu tệp. Xem TempData Thực hành tốt nhất

    Câu trả lời GỐC

    Bạn không thể trực tiếp trả lại tệp để tải xuống qua lệnh gọi AJAX, vì vậy, một cách tiếp cận khác là sử dụng lệnh gọi AJAX để đăng dữ liệu liên quan lên máy chủ của bạn. Sau đó, bạn có thể sử dụng mã phía máy chủ để tạo Tệp Excel (Tôi khuyên bạn nên sử dụng EPPlus hoặc NPOI cho việc này mặc dù có vẻ như phần này của bạn đang hoạt động)

    Khi tệp đã được tạo trên máy chủ, hãy trả lại đường dẫn tới tệp (hoặc chỉ tên tệp) làm giá trị trả về cho lệnh gọi AJAX của bạn, sau đó đặt JavaScript

    $ajax({
        cache: false,
        url: '/Report/PostReportPartial',
        data: _form.serialize(), 
        success: function (data){
             var response = JSON.parse(data);
             window.location = '/Report/Download?fileGuid=' + response.FileGuid 
                               + '&filename=' + response.FileName;
        }
    })
    
    1 thành URL này sẽ nhắc trình duyệt tải xuống tệp

    Từ góc độ người dùng cuối, thao tác tải xuống tệp diễn ra liền mạch vì họ không bao giờ rời khỏi trang bắt đầu yêu cầu

    Làm cách nào để mở tệp Excel trong Chrome mà không cần tải xuống?

    Làm cách nào để mở tài liệu Excel mà không cần Excel? .
    Mở Google Chrome
    Nhấn vào biểu tượng ba chấm (“Tùy chỉnh và kiểm soát Google Chrome) ở góc trên cùng bên phải
    Nhấn vào “Công cụ khác. ”
    Nhấn “Tiện ích mở rộng. ”
    Tìm “Chỉnh sửa Office cho Tài liệu, Trang tính & Trang trình bày. ”
    Nhấn “Thêm vào Chrome. ”

    Làm cách nào tôi có thể sử dụng Excel mà không cần tải xuống?

    Trình xem Microsoft Excel là một chương trình nhỏ, có thể phân phối lại miễn phí, cho phép bạn xem và in các bảng tính Microsoft Excel nếu bạn chưa cài đặt Excel. Ngoài ra, Trình xem Excel có thể mở sổ làm việc đã được tạo trong Microsoft Excel cho Macintosh