导出EXCEL报表的表头设置
防止出现不能多次不同条件导出同一个EXCEL报表
实际开发应用中,JSP的EXCEL报表导出功能非常重要,最简单最常用的生成办法是:1.选定EXCEL报表。2.另存为后缀名为html的网页。3.构建一个带说明头的JSP文件,将2中的html文件的所有代码复制粘贴到JSP文件说明头之后。4.在这个JSP文件中进行代码编写。5.系统运行时调用此JSP文件,导出EXCEL报表。
说明头如下:
<%@ page contentType="application/vnd.ms-excel; charset=GBK" language="java" import="java.util.*"
import="java.sql.*" import="java.util.*"
import="com.slhrm.test.connectData.*"
%>
其中contentType="application/vnd.ms-excel; charset=GBK"指定了本页面以EXCEL的形式来打开,本页面中的table在EXCEL中解释。
加上以上的头说明,JSP页面的打开方式就是EXCEL文件了。但是,在实际应用中出现了一个问题:
客户通过点击按钮第一次访问这个页面,选择打开而不是保存,EXCEL页面在HTML浏览器中正常打开,最小化此HTML浏览器。重新设置查询条件,点击按钮第二次访问这个页面面,选择打开,这时会重新打开一个 HTML浏览器,但是这个浏览器中的EXCEL页面是第一次打开的EXCEL页面。最小化本页面,重新设置条件,点击导出按钮,打开的HTML浏览器中的EXCEL页面依然是第一次打开的页面。汇总症状,只要客户没有把已经打开的HTML浏览器中的EXCEL页面关闭,重新设置条件访问这个页面,显示的结果永远都是第一次的EXCEL页面。
发生这个状况的原因是EXCEL对于同一个文件只能打开一次。当点击导出按钮后,提示用户是打开还是保存当前EXCEL文件。如果客户选择保存的话,系统就会进入保存流程,保存流程会自动提示用户不能保存相同文件名称的两个文件在同一个文件夹中,或者已经有相同文件名的EXCEL文件正在打开不能覆盖等情况,这个流程比较完善,系统用户也能较为简单的理解。
但是,如果客户选择打开,在HTML浏览器中打开EXCEL文件,这时所有的流程都交给了浏览器在后台运行。浏览器自动在系统缓存文件夹中为这个EXCEL文件分配内存,进行命名。问题就出在这个命名上头,浏览器会根据JSP页面的名称或者设置进行命名,一个JSP页面只能命名一个名称,也就是说xxx.jsp这个页面,只要选择打开而不是保存就会在缓存文件夹中出现一个xxx.xls文件,可是系统有另一个规则,同一个文件也就是xxx.xls这个文件在打开的情况下不能被覆盖,这时如果系统用户重新设置了条件又一次访问xxx.jsp页面想要再打开一次EXCEL文件,HTML浏览器就没有办法了,想要再一次保存一个xxx.xls文件不可能了,因为已经有xxx.xls被保存了并且已经被打开了。这时浏览器就会再一次打开当前的也就是上一次保存并打开的xxx.xls文件,这也就造成了客户无论如何设置条件都会打开第一次打开的EXCEL文件。
解决以上问题的方法是修改说明头如下:
加上了response.setHeader("Content-disposition","attachment;filename=result.xls");这一句,加上这一句之后的效果就是同一个页面第一打开会自动生成result.xls这个文件,第二次打开会生成result[2].xls这个文件,不会因为文件名重复而不能打开或者打开第一次打开的文件了。具体这句话的含义和语法网上有解释,但是跟本文中所说的这个问题以及形成这个问题的原因还没有找到具体直接的连接,希望童鞋有兴趣可以研究一下。
ele 2009-9-24 9:09:14
分享到:
相关推荐
- 对于导出,可以一次性将所有数据写入Excel,而非逐行操作,以减少API调用次数。 以上就是QT高效导入导出Excel并使用tableWidget显示的基本流程和优化策略。实际开发时,根据项目需求和资源限制,可能还需要进行...
本话题将深入探讨如何使用C#编程语言来解决“Excel导出百万级数据”的问题。 首先,我们需要理解Excel的性能瓶颈。Excel本身对打开和操作大量数据有一定限制,特别是2003版本之前的XLS格式,最大行数为65536行,而...
创建好Excel实例后,可以使用`Workbooks.Add()`方法添加新的工作簿,然后通过`Worksheets[1]`获取第一个工作表(默认的Sheet1)。工作表是Excel数据存储的基本单元。 3. **设置数据**: 有了工作表,就可以开始将...
在"新建文本文档.txt"和"一个Excel导出多个Sheet"这两个文件中,可能包含了具体的操作步骤或者VBA代码示例,你可以打开查看以获取更详细的信息。如果要深入学习Excel的高级功能,如数据透视表、公式函数、图表制作等...
本文档将详细介绍一种使用Java进行Excel导出的方法,并通过一个具体的示例代码来展示整个过程。 #### 二、所需依赖库 为了实现Java导出到Excel的功能,我们需要使用到`jxl`库。`jxl`是一个用于读写Excel文件的Java...
首先,让我们关注Excel导出。在C#中,我们可以使用Microsoft的Open XML SDK或者第三方库如EPPlus来处理Excel文件。Open XML SDK是微软提供的一个免费工具,可以直接操作XML文件来创建、打开和修改Office文档,包括...
通过读取模板,填充数据,保持模板样式,最后导出文件,可以实现灵活且高效的Excel导出功能。在实际操作中,注意选择合适的Workbook类型,处理好数据填充与样式保留,以及进行必要的性能优化和异常处理,将有助于...
// 删除第一个工作表 } // 保存更改 workbook.Save("output_file.xlsx"); ``` 在导入导出数据时,你可能还需要处理各种数据类型,如日期、数字格式、公式等。此外,对于大量数据,可以使用流式处理提高效率。例如...
对于大量数据,还可以考虑分批导出,以避免一次性加载过多数据导致性能问题。 以上就是关于“DBGrid导出到Excel”的详细说明,希望对你理解和实现这一功能有所帮助。在实际开发中,可以根据具体使用的编程语言(如...
- **性能优化**:如果数据量大,考虑分批写入或异步处理,避免一次性加载所有数据导致内存占用过高。 - **格式和样式**:EPPlus库支持设置单元格的样式,如字体、颜色、对齐方式等,可以根据需求进行自定义。 - *...
除了直接操作Excel文件,你还可以将数据存储在内存中,然后一次性写入Excel。这通常通过创建`Variant`数组来实现,`Variant`能容纳多种类型的数据,适合数据交换。 综上所述,"Exceltext.rar"提供的示例涵盖了VC++...
7. **性能优化**:在处理大数据时,应考虑批处理写入和内存管理,避免一次性加载所有数据导致内存溢出。 8. **模板文件的应用**:在导出数据时,可以预先创建好Excel模板,然后在运行时填充数据,这样可以保持一致...
7. **权限问题**:如果用户在第一次运行后没有关闭程序,再次运行时可能会因为文件被占用而无法操作。确保在写入前关闭所有相关Excel实例,或者使用适当的方式处理文件锁。 8. **刷新和显示**:在写入数据后,可能...
标题所提及的问题是用户在尝试导出图片到Excel时遇到了只能够成功执行一次的限制。根据描述中的解决方案,问题在于“Selection”前面需要加上“xlapp”,这意味着在VBA(Visual Basic for Applications)代码中,...
如果数据量较大,我们可能需要考虑分批读写,以避免一次性操作导致的内存问题。同时,可以使用异步任务或者后台服务进行数据处理,以防止UI线程阻塞。 **6. 其他库的使用** 除了jxl之外,还有其他的库可供选择,如...
总之,Android平台上的Excel导出涉及多个技术层面,从选择合适的库到优化性能,都需要开发者具备扎实的编程基础和良好的问题解决能力。通过以上知识点的学习和实践,你将能够有效地实现在Android应用中创建和导出...
在导出大量数据时,考虑分批次处理,避免一次性加载导致浏览器崩溃。 8. **示例代码** 通过NPOI读取Excel文件的简单示例: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 创建Excel文件...
ASP.NET是一种基于.NET框架的服务器端编程模型,用于构建动态Web应用程序。在处理数据导出,特别是导出到Microsoft...通过学习和应用这些知识点,开发者可以解决"扩张名不一致"的问题,为用户提供无缝的Excel导出体验。
4. **使用bulk insert命令**:在SQL中,可以使用`BULK INSERT`命令一次性导入大量数据。例如,`BULK INSERT TableName FROM 'FilePath.csv' WITH (FORMATFILE = 'FilePath.format')`,其中`FilePath.format`是定义...
// 获取第一个工作表 for (Row row : sheet) { for (Cell cell : row) { String value = cell.getStringCellValue(); // 处理数据... } } ``` 3. **导出Excel数据** 导出数据涉及到创建一个新的Excel文件...