Как вывести файл Excel *.xls из классического ASP

У меня есть несколько сгенерированных html-таблиц, которые мне нужно вывести в виде файла Excel. Сайт выполнен в классическом ASP. Это возможно? Может ли это быть сделано путем использования библиотек Open Office?


EDIT: До сих пор я пробовал некоторые из предложений, но, похоже, он терпит неудачу. В идеале я хочу, чтобы пользователь мог щелкнуть ссылку, которая начнет загрузку файла .xls. Этот код:

<%@ 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>

похоже, не работает, когда IE7 используется для получения страницы. IE говорит, что он "не может загрузить excelTest.asp" и что "Запрошенный сайт недоступен или не может быть найден".

Ответ 1

Это AddHeader, а не 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>

Update: Я написал сообщение в блоге о том, как генерировать файлы Excel в ASP Classic. Он содержит довольно полезный фрагмент кода для генерации файлов xls и csv.

Ответ 3

Вы всегда можете просто экспортировать таблицу HTML в документ XLS. Excel отлично справляется с пониманием таблиц HTML.

Другой вариант - экспортировать HTML-таблицы в формате CSV или TSV, но вам нужно будет настроить форматирование в вашем коде. Это не так сложно выполнить.

Есть несколько классов в Microsoft.Office.Interop, которые позволяют вам создавать файл Excel программно, но я всегда находил их немного неуклюжими. Вы можете найти .NET-версию создание электронной таблицы здесь, которую довольно легко изменить для классического ASP.

Что касается .NET, мне всегда нравилось CarlosAG Excel XML Writer Library. Он имеет хороший генератор, поэтому вы можете настроить файл Excel, сохранить его как таблицу XML и создать код для форматирования и всего. Я знаю, что это не классический ASP, но я думал, что выброшу его там.


С тем, что вы пытаетесь сделать выше, попробуйте добавить заголовок:

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

Посмотрите, работает ли это. Кроме того, я всегда использую это для типа контента:

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

Ответ 4

Там есть "дешевый и грязный" трюк, который я использовал... shhhh никому не рассказывают. Если вы выводите текст с разделителями табуляции и создаете имя файла *.xls, то Excel открывает его без возражений, вопросов или предупреждений. Поэтому просто переверните данные в текстовый файл с разделителем табуляции, и вы можете открыть его с помощью Excel или Open Office.

Ответ 6

У меня была такая же проблема, пока я не добавил Response.Buffer = False. Попробуйте изменить код на следующий.

Response.Buffer = False Response.ContentType = "application/vnd.ms-excel" Response.AddHeader "Content-Disposition", "attachment; filename = excelTest.xls"

Единственная проблема, с которой я столкнулся, заключается в том, что когда Excel открывает файл, я получаю следующее сообщение.

Файл, который вы пытаетесь открыть, 'FileName [1].xls', находится в другом формате, чем указано расширением файла. Убедитесь, что файл не поврежден и находится из надежного источника перед открытием файла. Вы хотите открыть файл сейчас?

Когда вы открываете файл, все данные отображаются в отдельных столбцах, но электронная таблица все белая, никаких границ между ячейками.

Надеюсь, что это поможет.