Как вывести файл Excel * .xls из классического ASP - PullRequest
10 голосов
/ 14 января 2009

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


РЕДАКТИРОВАТЬ: До сих пор я попробовал некоторые из предложений, но, похоже, не удается. В идеале я хочу, чтобы пользователь мог щелкнуть ссылку, которая начнет загрузку файла .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» и что «запрошенный сайт либо недоступен, либо не найден».

Ответы [ 6 ]

19 голосов
/ 27 февраля 2009

Это 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>

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

4 голосов
/ 21 февраля 2009

MS сделала для этого библиотеку COM под названием Office Web Components. MSOWC.dll необходимо зарегистрировать на сервере. Он может создавать и управлять файлами офисных документов.

Как использовать веб-компонент электронной таблицы с Visual Basic

Работа с веб-компонентами Office

0 голосов
/ 15 июля 2009

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

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

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

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

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

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

0 голосов
/ 14 января 2009

Вы должны указать файл для скачивания (вложение) клиентом в заголовке http:

Response.ContentType = "application/vnd.ms-excel"
Response.AppendHeader "content-disposition", "attachment: filename=excelTest.xls"

http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html

0 голосов
/ 14 января 2009

Я использовал трюк с «дешевыми и грязными» ... не говори никому. Если вы выводите текст с разделителями табуляции и делаете имя файла * .xls, то Excel открывает его без возражений, вопросов или предупреждений. Так что просто выведите данные в текстовый файл с разделителями табуляции, и вы сможете открыть их в Excel или Open Office.

0 голосов
/ 14 января 2009

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

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

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

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


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

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

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

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