2012-01-18 32 views
1

我正在使用javascript动态创建html表格。一旦创建了此表,我需要能够通过点击按钮将其导出为ex​​cel。我已经尝试了一些东西,但他们没有为我工作。从javascript导出动态创建的表格到Excel

  1. 我试图创建的Active X对象执行从JavaScript简单的出口,但在IE中该设置被锁定所以我们的浏览器不会与Active X上运行

  2. 我尝试导出到Excel从使用HttpContext类的函数后面的代码,但由于表是动态创建的,服务器不会看到它。

  3. 我最后的方法,我确信这是行得通的,是我通过pagemethod将AJAX导出到excel。我打算在javascript中创建一个表格数组并将其传递给pagemethod。但在进入这一步之前,我创建了一个页面方法,将一个simpe“Test”文件导出为ex​​cel。它的工作方式是通过点击按钮调用,所以我认为它也可以从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的无错执行,但它不能打开Excel或..某事

我最终想传递一个数组并循环遍历它来添加行和数据。我用非动态表格完成了这个工作。我也将使用标题来定义文件名,但出于测试的原因,我已将其命名为TEST.xls。

我将HttpContext代码复制并粘贴到一个按钮单击事件中,并且它对静态表格工作良好,所以我不认为有任何问题。但我知道是错的。

我想我的问题是可以将PageMethod导出为ex​​cel或使用HttpContext类?有没有更好/更简单的方法来做到这一点?

请记住,我不能使用ActiveX对象,并且所有客户都需要使用IE。

感谢您的帮助,对不起,如果这已被覆盖。我搜查了但没有找到任何东西。如果有的话,可否请你指点我的帖子?

回答

1

那么,我已经屈服于压力,并决定采取不同的方式。我认为ajax在response.write方面效果不佳。

我创建了一个asp:hiddenfield控件。然后,当调用ajax生成表时,我使用表示行和列的管道定界字符串填充它的值。所以cell1|cell2||cell1|cell2||cell1|cell2

然后,我创建了一个按钮的on_click方法,并能够使用上述函数中的相同代码。要填充表格,我只需通过解析隐藏字段值来替换“测试”。

我决定发布这个以防万一其他人遇到问题。

1

如果您发出Excel MIME标头,然后是HTML表格,则EXCEL应将其加载为电子表格。