2012-01-18 2 views
1

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

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

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

  3. Мой последний метод, и я был уверен, что это сработает, я использовал AJAX через pagemetod, чтобы экспортировать таблицу в excel. Я собирался создать массив таблицы в javascript и передать его в pagemethod. Но прежде чем я добрался до этого шага, я создал pagemethod, который экспортировал файл Simpe Test для Excel. Он работал как метод, вызванный нажатием кнопки, поэтому я решил, что это будет также с помощью pagemethod. Это не не :(Она работает и завершает pagemethod, но не открывает 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 выполняется без ошибок, но он не может открыть первенствовать или .. что-то.

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

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

Я думаю, мой вопрос может экспортировать PageMethod, чтобы преуспеть или использовать класс HttpContext? Есть ли лучший/более простой способ сделать это?

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

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

ответ

1

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

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

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

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

1

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

Смежные вопросы