Экспорт динамически созданной таблицы из JavaScript в Excel - PullRequest
1 голос
/ 18 января 2012

Я работаю над проектом, который динамически создает HTML-таблицу с JavaScript.После того, как эта таблица создана, я должен быть в состоянии экспортировать ее, чтобы преуспеть с помощью нажатия кнопки.Я уже попробовал несколько вещей, но они не сработали для меня.

  1. Я попытался выполнить простой экспорт из JavaScript, создав объект Active X, но этот параметр заблокированв IE, поэтому наши браузеры не будут работать с Active X.

  2. Я пытался экспортировать в Excel из функции кода, используя класс HttpContext, чтобы преуспеть, но так как таблица создается динамически, сервер не 'не вижу этого.

  3. Мой последний метод, и я был уверен, что это сработает, я использовал AJAX через метод страницы для экспорта таблицы в Excel.Я собирался создать массив таблицы в javascript и передать его методу страницы.Но прежде чем я добрался до этого шага, я создал метод страницы, который экспортировал простой файл «Test» в Excel.Он работал как метод, вызываемый нажатием кнопки, поэтому я подумал, что это будет и с методом страницы.Это не :( Он запускает и завершает метод страницы, но не открывает Excel или ничего не экспортирует. Никаких ошибок и функция успеха не выполняется.

Вот код:

<System.Web.Service.WebMethod()>
Public Shared Function exportTable(ByVal title As String) As String
HttpContext.Current.Response.ClearContext()
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename="TEST.xls")
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
HttpContext.Current.Response.Write("<?xml version='1.0'?>")
HttpContext.Current.Response.Write("<ss:Workbook xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet'>")
HttpContext.Current.Response.Write("<ss:Worksheet ss:Name='sheet1'>")
HttpContext.Current.Response.Write("<ss:Table>")
HttpContext.Current.Response.Write("<ss:Row>")
HttpContext.Current.Response.Write("<ss:Cell><ss:Data ss:Type='String'>TEST</ss:Data></ss:Cell>")
HttpContext.Current.Response.Write("</ss:Row>")
HttpContext.Current.Response.Write("</ss:Table>")
HttpContext.Current.Response.Write("</ss:Worksheet>")
HttpContext.Current.Response.Write("</ss:Workbook>")
HttpContext.Current.ApplicationInstance.CompleteRequest()

Return 0
End Function

Мой метод вызова страницы:

function exportToExcel(title) {
PageMethods.exportTable(title, exportSuccess, exportFailure)
}

Функция exportSuccess - это простое предупреждение, которое запускается. Я понимаю, что это означает, что pageMethod выполняется без ошибок, но этоон не может открыть Excel или ... что-то.

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

Я скопировал и вставил код HttpContext в событие нажатия кнопки, и это сработало.хорошо со статической таблицей, так что я не думаю, что с этим возникнут какие-либо проблемы. Но я знаю, что я ошибаюсь.

Наверное, мой вопрос - может ли экспорт PageMethod превзойти или использовать класс HttpContext? Есть ли ставкаБолее простой способ сделать это?

Имейте в виду, что я не могу использовать объекты ActiveX, и все клиенты должны использовать IE.

Спасибо за вашу помощь, и я извиняюсь, еслиэто уже было покрыто.Я искал, но ничего не нашел.Если да, не могли бы вы указать мне на пост?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Ну, я согнулся под давлением и решил сделать это по-другому. Я думаю, что ajax плохо работает с response.write.

Я создал элемент управления asp: hiddenfield. Затем, когда был вызван ajax для генерации таблицы, я заполнил его значение строкой с разделителями в виде строки, представляющей строки и столбцы таблицы. Так что cell1|cell2||cell1|cell2||cell1|cell2.

Затем я создал метод on_click для кнопки и смог использовать тот же код из функции выше. Чтобы заполнить таблицу, я просто заменяю «ТЕСТ» синтаксическим анализом значения скрытого поля.

Я решил опубликовать это на тот случай, если у кого-то еще возникнут проблемы с ним.

1 голос
/ 19 января 2012

Если вы отправляете заголовок Excel MIME, а затем таблицу HTML, EXCEL должен загрузить его как электронную таблицу.

...