`
caniggia1986
  • 浏览: 151722 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用html形式导出excel

 
阅读更多
普通的excel导出方式在遇到大数据量的时候经常导致OOM,采用拼接html方式可以解决
首先设计好要导出的表格样式,将excel另存为为html格式,然后用文本编辑器打开html
如果需要通用的导出方式,则需要自己拼接标题信息。
首先定义一个标题定义类,可自定义标题栏的宽度 对齐方式
public class HtmlExportColumn {
	public static final String LEFT="xl29";
	public static final String MIDDLE="xl27";
	public static final String RIGHT="xl28";
	public static final String DEFAULT_HEADER_CLASS_TYPE = "xl25";//标题栏的样式
	private String name = "";// 标题名称
	private int width = 100;// 列宽度 默认值100
	private int msoWidthAlt = 80;// mso-width-alt值
	private int widthPt = 4000;// width值单位为pt
	private String classType = MIDDLE;// 水平样式xl29/xl27/xl28(左/中/右)

	public HtmlExportColumn() {
		super();
	}

	public HtmlExportColumn(String name, int width, int msoWidthAlt,
			int widthPt, String classType) {
		super();
		this.name = name;
		this.width = width;
		this.msoWidthAlt = msoWidthAlt;
		this.widthPt = widthPt;
		this.classType = classType;
	}
        //getter setter...

}
 
	/**
	 * 写excel顶部信息 <table>标签以前的信息 
	 * @param topTemp 头部定义文件
	 * @param os 输出流 
	 * @throws Exception 
	 */
public static void writeTop(File topTemp,OutputStream os) throws Exception{  
		byte[] b = new byte[1024];
		int bytesRead = 0; 
		FileInputStream input = null; 
		try {
			input = new FileInputStream(topTemp);  
			while ((bytesRead = input.read(b,0,1024)) > 0) {
				os.write(b, 0, bytesRead);
			}
		} catch (FileNotFoundException e) {
			logger.error("读取excel头信息文件异常"+topTemp.getAbsolutePath()+"不存在");
			throw e;
		} catch (IOException e) {
			logger.error("读取excel头信息异常"+e);
			throw e;
		} finally{
			try {
				input.close();
				os.flush();
			} catch (IOException e) { 
				logger.error("关闭读取excel头信息异常"+e);
				throw e;
			}  
		} 
		
	}

	/**
	 * 写标题信息 
	 * @param columns 列定义数组
	 * @param os 输出流  
	 */
	public static void writeHeader(HtmlExportColumn[] columns,OutputStream os) throws UnsupportedEncodingException, IOException{
		StringBuilder header = new StringBuilder();
 		for (HtmlExportColumn column : columns) {
 			header.append("<col width=").append(column.getWidth()).append(" style='mso-width-source:userset;mso-width-alt:").append(column.getMsoWidthAlt()).append(";width:").append(column.getWidthPt()).append("pt'>\r\n");
		}
 		header.append("<tr height=17 style='height:12.75pt'>\r\n");
		for (HtmlExportColumn column : columns) {
			header.append("\t<td class=").append(HtmlExportColumn.DEFAULT_HEADER_CLASS_TYPE).append(" style='width:").append(column.getWidthPt()).append("pt'>").append(column.getName()).append("</td>\r\n");
		}
		header.append("</tr>\r\n");
		
		os.write(header.toString().getBytes("gbk"));
		header = null;
		os.flush();
	} 
/**
	 * 写内容信息 数据可以分批读取 
	 * @param columns 列定义数组
	 * @param os 输出流
	 * @param data 二维字符数组  
	 * */
	public static void writeData(HtmlExportColumn[] columns,String[][] data,OutputStream os) throws UnsupportedEncodingException, IOException{
		StringBuilder content = new StringBuilder();
		// 迭代数据集
		for (int i = 0; i < data.length; i++) { 
			content.append("<tr height=17 style='height:12.75pt'>\r\n");
			for (int j = 0; j < data[i].length; j++) { 
				content.append("\t<td class=").append(columns[j].getClassType()).append(">").append(data[i][j]).append("</td>\r\n");
			}
			content.append("</tr>\r\n");
		}
		os.write(content.toString().getBytes("gbk"));
		content = null;
		os.flush(); 
	} 

/**
	 * 写尾部信息 
	 * @param columns 列定义数组
	 * @param os 输出流  
	 */
	public static void writeTail(HtmlExportColumn[] columns,OutputStream os) throws UnsupportedEncodingException, IOException{
		StringBuilder tail = new StringBuilder(); 
 		tail.append("<![if supportMisalignedColumns]>\r\n");
 		tail.append("<tr height=0 style='display:none'>\r\n");
		for (HtmlExportColumn column : columns) {
			tail.append("\t<td width=").append(column.getWidth()).append(" style='width:").append(column.getWidthPt()).append("pt'></td>\r\n");
		}
		tail.append("</tr>\r\n");
		tail.append("<![endif]>\r\n");
		tail.append("</table>\r\n");
		tail.append("</body>\r\n");
		tail.append("</html>\r\n"); 
		os.write(tail.toString().getBytes());
		tail = null;
		os.flush();
	} 

分享到:
评论

相关推荐

    网页形式导出成excel

    在网页中导出表格到Excel,一种常见方法是使用JavaScript库,例如`jsPDF`和`html2canvas`配合使用来生成PDF,再通过`file-saver`库保存为Excel文件。另外,还有专门用于此目的的库,如`xlsx`,它可以解析和生成Excel...

    easyui导出excel工具

    总结,EasyUI的datagrid导出Excel工具类为开发者提供了一种便捷的方式,通过前后端配合,将网页中的数据快速转换成Excel文件,满足了用户对数据管理的需求。在实际应用中,需要注意数据安全和性能优化,确保功能的...

    GridView导出Excel DataTable导出Excel 实例源码

    一、GridView导出Excel 1. GridView概述:GridView是一种基于Web的数据显示控件,能够以表格形式展示数据源中的数据。它可以与多种数据源(如SqlDataSource、AccessDataSource等)配合使用,支持排序、分页、筛选等...

    poiexcel导出html格式

    在实际项目中,你可以用 POI 将报表、数据分析结果等以 Excel 形式存储,然后在需要时快速生成 HTML 页面,方便用户在线查看和分享。这种方式特别适用于 web 应用,如数据分析平台或企业管理系统。 总之,Apache ...

    ASP.NET页面数据导出excel

    ASP.NET页面数据导出到Excel是常见的需求,用于将网页上的数据以电子表格的形式供用户下载和进一步处理。本文将详细介绍四种从ASP.NET页面导出数据到Excel的方法。 方法一: 这种方法利用了ASP.NET的Response对象,...

    NOPI导出EXCEL/xls/xlsx并输出到WEB页面

    标题 "NOPI导出EXCEL/xls/xlsx并输出到WEB页面" 描述的是一个使用NOPI(可能是某种特定的开发框架或库)处理Excel文件并将其数据展示在Web页面上的过程。NOPI允许开发者执行Excel文件的导入、导出以及下载功能,同时...

    JavaScript 实现 Excel数据导出 支持多个Sheet页导出

    本文将深入探讨如何使用纯JavaScript实现JSON格式数据到Excel文件的导出,同时支持多个Sheet页的导出。这个功能对于前端开发者来说,能够极大地提升用户体验,特别是在数据管理、分析和分享场景下。 首先,我们要...

    echart导出excel.zip

    在"echart导出excel.zip"这个压缩包中,我们看到涉及到的是如何使用ECharts将数据以表格形式展示,并且具备导出为Excel的功能。以下是对这一主题的详细阐述: 1. **ECharts中的表格展示**:ECharts不仅支持绘制各种...

    Asp.net导出Excel(HTML输出方法) 笔记

    本笔记主要探讨如何使用ASP.NET实现HTML内容到Excel的导出功能,这是一个常见的需求,例如在数据分析、报表生成或者数据导出场景中。我们将通过一个名为`ExportHelper.cs`的类来实现这一功能。 首先,我们需要理解...

    spreadjs_导出 Excel 显示复选框而不是布尔值-demo.zip

    2. **demo.html**:这是示例的主HTML文件,其中包含了SpreadJS组件的初始化代码,以及可能的交互逻辑,用于展示如何实现导出Excel时复选框的转换。 3. **gc.spread.sheets.all.14.1.1.min.js**:这是SpreadJS的核心...

    使用xsl导出excel源码示例

    当我们谈论“使用XSL导出Excel源码示例”时,实际上是指通过XSLT(XSL Transformations)将XML数据转换成Excel格式,从而生成可编辑的Excel文件。下面将详细介绍这一过程及相关知识点。 1. **XSLT基础**:XSLT是...

    用jquery-table2excel,进行导出excel表格 带图片 jquery.table2excel.js下载

    `jquery-table2excel`是一个jQuery插件,专门用于实现这一功能,允许用户从网页上的HTML表格一键导出为Excel文件,而且还能支持包含图片的数据导出。下面我们将详细探讨这个插件的工作原理、使用方法以及其核心知识...

    ExtJS导出Excel

    "ExtJS导出Excel"的功能则是允许用户将`grid`中的数据方便地导出为Excel格式,这样可以方便数据的保存、分析和共享。 在实现页面级的ExtJS `grid`数据导出到Excel时,通常会涉及到以下几个关键知识点: 1. **ExtJS...

    web 导出Excel不依懒com组件

    ### Web导出Excel不依赖COM组件的技术解析 在Web开发中,经常需要处理的数据最终以Excel格式呈现给用户。传统的方式通常依赖于COM组件来实现Excel的生成与导出,这种方式不仅增加了系统的复杂度,还可能导致安全性...

    Gridview 导出Excel

    2. 添加导出按钮:在GridView旁边或者上方添加一个Button控件,作为导出Excel的触发器。在Button的Click事件处理程序中编写导出逻辑。 3. 编写导出逻辑: - 初始化Response对象,设置MIME类型为“application/vnd....

    IE下面table导出excel

    在IE浏览器下,将HTML表格数据导出到Excel文件是一种常见的需求,特别是在处理...通过以上步骤,用户在IE浏览器下点击一个按钮,就可以将HTML表格中的数据以Excel文件的形式保存到本地,实现了无插件的数据导出功能。

    C# 将数据导出到Excel汇总

    4. **渲染控件内容**:使用`StringWriter`和`HtmlTextWriter`组合,将DataGrid的内容渲染为字符串形式。 5. **输出至响应**:最后,通过`Response.Write`将渲染后的字符串输出,然后调用`Response.End()`结束响应。...

    ASP.NET中把Gridview导出为EXCEL

    总结起来,ASP.NET中将Gridview导出为Excel涉及HTML控件交互、HTTP响应处理、文件流操作和编码设置等多个环节。解决中文乱码问题主要是通过设定正确的字符编码和HTTP响应头。理解这些知识点,将有助于你在实际项目中...

    导出excel汉字乱码以及GridView分页问题

    在导出Excel时,如果编码设置不正确,汉字可能会显示为乱码。在给出的代码中,开发者已经注意到了这个问题,并通过以下几行代码来解决: ```csharp Response.Charset = "GB2312"; Response.ContentEncoding = ...

    数据导出EXCEL .txt C#

    根据提供的标题、描述、标签及部分内容,我们可以了解到这段代码主要涉及使用C#语言进行Excel文件导出的功能。接下来,我们将详细解析与这部分内容相关的技术知识点。 ### 一、使用C#进行Excel文件导出的基本原理 ...

Global site tag (gtag.js) - Google Analytics