2009-01-13 46 views
10

Tôi có một số bảng html được tạo mà tôi cần xuất dưới dạng tệp Excel. Trang web được mã hóa bằng ASP cổ điển. Điều này có thể không? Nó có thể được thực hiện bằng cách nào đó bằng cách sử dụng các thư viện Open Office?Cách xuất tệp Excel * .xls từ ASP cổ điển


EDIT: Vì vậy, đến nay, tôi đã thử một số đề xuất, nhưng có vẻ như không thành công. Lý tưởng nhất, tôi muốn người dùng có thể nhấp vào liên kết sẽ bắt đầu tải xuống tệp .xls. Mã này:

<%@ Language=VBScript %> 
<% option explicit 

Response.ContentType = "application/vnd.ms-excel" 
Response.AppendHeader "content-disposition", " filename=excelTest.xls" 
%> 
<table> 
    <tr> 
     <th>Test Col 1</th> 
     <th>Test Col 2</th> 
     <th>Test Col 3</th> 
     <th colspan="2">Test Col 4</th> 
     <th>Test Col 6</th> 
     <th>Test Col 7</th> 
    </tr> 
    <tr> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
    </tr> 
</table> 

dường như không thành công khi IE7 được sử dụng để tải trang. IE nói rằng "không thể tải xuống excelTest.asp" và rằng "Trang web được yêu cầu không khả dụng hoặc không thể tìm thấy."

+0

Có những nhận xét về cuối điều này: http://blogs.msdn.com/vsofficedeveloper/pages/Office-2007-Open-XML-MIME-Types.aspx – Fionnuala

+0

Nhận xét duy nhất tôi thấy trên trang đó là một số ghi chú bổ sung cho biết các thay đổi cần được thực hiện trên máy chủ để hỗ trợ các loại mime. Bạn đang nói rằng đây là mảnh tôi đang mất tích? – cdeszaq

+0

Tôi có câu hỏi liên quan ở đây, đánh giá cao nếu có ai đó có thể xem, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

Trả lời

18

Đó là AddHeader, không AppendHeader.

<%@ Language=VBScript %> 
<% Option Explicit 

Response.ContentType = "application/vnd.ms-excel" 
Response.AddHeader "Content-Disposition", "attachment; filename=excelTest.xls" 
%> 
<table> 
    <tr> 
     <td>Test</td> 
    </tr> 
</table> 

Cập nhật: Tôi đã viết một bài đăng blog về cách generate Excel files in ASP Classic. Nó chứa một đoạn mã khá hữu ích để tạo cả tệp xls và csv.

+0

Điều này hoạt động giống như một sự quyến rũ! Cảm ơn bạn! – cdeszaq

+0

Tôi có câu hỏi liên quan ở đây, đánh giá cao nếu có ai đó có thể xem, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

+0

Cảm ơn, Kristof Neirynck !! Điều này đã giúp tôi tìm ra cách để IE nhận ra tệp Excel dưới dạng tải xuống. – ckpepper02

0

Bạn luôn có thể xuất bảng HTML sang tài liệu XLS. Excel làm một công việc khá tốt để hiểu các bảng HTML.

Một khả năng khác là xuất các bảng HTML dưới dạng tệp CSV hoặc TSV, nhưng bạn cần thiết lập định dạng trong mã của mình. Đây không phải là quá khó khăn để thực hiện.

Có một số lớp trong Microsoft.Office.Interop cho phép bạn tạo tệp Excel theo chương trình, nhưng tôi luôn thấy chúng hơi vụng về. Bạn có thể tìm thấy phiên bản .NET của creating a spreadsheet here, dễ dàng sửa đổi đối với ASP cổ điển.

Đối với .NET, tôi luôn thích CarlosAG's Excel XML Writer Library. Nó có một máy phát điện tốt đẹp để bạn có thể thiết lập tệp Excel của bạn, lưu nó dưới dạng bảng tính XML và nó tạo mã để thực hiện tất cả định dạng và mọi thứ. Tôi biết nó không phải là ASP cổ điển, nhưng tôi nghĩ rằng tôi sẽ ném nó ra khỏi đó.


Với những gì bạn đang cố gắng trên, hãy thử thêm các tiêu đề:

"Content-Disposition", "attachment; filename=excelTest.xls" 

Xem nếu mà làm việc. Ngoài ra, tôi luôn sử dụng loại nội dung này:

Response.ContentType = "application/octet-stream" 
    Response.ContentType = "application/vnd.ms-excel" 
+0

VBScript ném lỗi: Đối tượng không hỗ trợ thuộc tính hoặc phương thức này: 'Response.AppendHeader' – cdeszaq

0

Có một mẹo 'rẻ tiền và bẩn' mà tôi đã sử dụng ... shhhh không nói cho ai biết. Nếu bạn xuất văn bản phân tách tab và tạo tên tệp * .xls thì Excel sẽ mở nó mà không bị phản đối, đặt câu hỏi hoặc cảnh báo. Vì vậy, chỉ cần crank dữ liệu ra thành một tập tin văn bản với tab delimitation và bạn có thể mở nó với Excel hoặc Open Office.

+1

Trên thực tế Excel 2007 sẽ bật hộp thoại cảnh báo nếu tệp ở định dạng TSV, nhưng phần mở rộng sẽ đọc .xls Tôi cũng không biết cách nào để tránh điều này. –

+0

tạo tệp CSV văn bản nhưng cung cấp cho nó phần mở rộng .csv. Excel sẽ mở nó mà không có thông báo. – Tester101

+1

Hai vấn đề tiềm ẩn: (1) Microsoft Excel sẽ cắt các khoảng trắng và số 0 hàng đầu; và (2) Microsoft Excel 2010 sẽ xuất hiện cảnh báo khi mở tệp. # 1 có thể được giải quyết bằng cách gói văn bản với = "{cell-data}" (thông qua: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel) – iokevins

0

Tôi đã gặp vấn đề tương tự cho đến khi tôi thêm Response.Buffer = False. Thử thay đổi mã sau đây.

Response.Buffer = False Response.ContentType = "application/vnd.ms-excel" Response.AddHeader "Content-Disposition", "tập tin đính kèm; filename = excelTest.xls"

Vấn đề duy nhất tôi bây giờ là khi Excel mở tệp, tôi nhận được thông báo sau.

Tệp bạn đang cố mở, 'Tên tệp [1] .xls', có định dạng khác với tệp được chỉ định bởi tiện ích mở rộng tệp. Xác minh rằng tệp không bị hỏng và đến từ một nguồn đáng tin cậy trước khi mở tệp. Bạn có muốn mở tệp ngay bây giờ không?

Khi bạn mở tệp, tất cả dữ liệu sẽ xuất hiện trong các cột riêng biệt, nhưng bảng tính có màu trắng, không có đường viền giữa các ô.

Hy vọng điều đó sẽ hữu ích.

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