精华内容
下载资源
问答
  • java web Excel文件导出

    2018-05-28 10:17:22
    提供列表查询匹配的excel数据导出,引用该工具类,只需要在页面上引用导出的自定义标签,然后按照提供的使用文档进行配置,后端action层或者controller层,实现其数据加载的抽象方法即可(使用方式也在文档说明)...
  • Web导出Excel(可以运行的),包含标题的字体大小,颜色,字体,等各样漂亮的样式,简单易懂,带下载功能。
  • web导出table到excel表中

    2021-02-20 16:34:44
    web导出table数据到excel表中,绝对有用
  • java导出excel复杂表头

    2019-02-20 16:09:50
    java工程,源代码,可直接运行,需自己改造成web下载方式。
  • JQuery实现web页面table导出JSON、XML、PNG、CSV、TXT、SQL、MS-Word、MS-Excel、MS-PowerPoint 支持中文导出
  • WebAPI.ExportExcel 用于导出 ExcelWeb API 使用WEB API导出excel。 还没完...
  • 开发测试时候导入数据遇到大数据导入的问题,整理了下,需要的朋友可以参考下
  • 利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse 2.部署项目,启动tomcat...
  • web导出数据到excel中

    2021-02-20 16:41:54
    web导出数据到excel中,我正在用的
  • 在本篇文章里小编给大家整理关于Vue+axios+WebApi+NPOI导出Excel文件的知识点以及实例代码,需要的朋友们参考下。
  • Java Web项目导出Excel实现

    千次阅读 2018-07-07 13:39:47
    背景:本次实现基于原生JDBC连接数据库、Struts2框架。1.JDBC连接数据库部分比较简单,就不详细介绍,简述:创建一个JavaBean类,连接数据库获取该JavaBean对象的集合;2.创建通用工具类,用于生成Excel模板:import...

    背景:本次实现基于原生JDBC连接数据库、Struts2框架。

    1.JDBC连接数据库部分比较简单,就不详细介绍,简述:创建一个JavaBean类,连接数据库获取该JavaBean对象的集合

    2.创建通用工具类,用于生成Excel模板:

    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class ExcelUtil {
    
    	/*
    	 * 导出Excel
    	 */
    	public static HSSFWorkbook getHSSFWorkbook(String sheetName,
    			String[] title, String[][] values, HSSFWorkbook wb) {
    		// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
    		if (wb == null) {
    			wb = new HSSFWorkbook();
    		}
    
    		// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
    		HSSFSheet sheet = wb.createSheet(sheetName);
    
    		// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel行数列数有限制
    		HSSFRow row = sheet.createRow(0);
    
    		// 第四步,创建单元格,并设置表头 设置表头居中
    		HSSFCellStyle style = wb.createCellStyle();
    		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    
    		// 声明列对象
    		HSSFCell cell = null;
    
    		// 创建标题
    		for (int i = 0; i < title.length; i++) {
    			cell = row.createCell(i);
    			cell.setCellValue(title[i]);
    			cell.setCellStyle(style);
    		}
    
    		// 创建内容
    		for (int i = 0; i < values.length; i++) {
    			row = sheet.createRow(i + 1);
    			for (int j = 0; j < values[i].length; j++) {
    				// 将内容按顺序赋给对应的列对象
    				row.createCell(j).setCellValue(values[i][j]);
    			}
    		}
    		return wb;
    	}
    }

    3.Action层,调用Dao层方法和Util层方法将数据转成Excel输出:

    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.List;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.struts2.ServletActionContext;
    
    import com.kun.bean.Goods;
    import com.kun.dao.TestQuery;
    import com.kun.util.ExcelUtil;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class Test extends ActionSupport {
    	
    	private static final long serialVersionUID = 2543844745175758118L;
    	
    	private String goodsid;
    	
    	public String getGoodsid() {
    		return goodsid;
    	}
    
    	public void setGoodsid(String goodsid) {
    		this.goodsid = goodsid;
    	}
    
    	public void export() {
    		
    //		HttpServletRequest request = ServletActionContext.getRequest();
    		HttpServletResponse response=ServletActionContext.getResponse();
    		
    		// 获取数据
    		TestQuery testQuery = new TestQuery();
    		List<Goods> list = testQuery.queryGoods();
    		
    		//Excel标题
    		String[] title = {"商品编码","商品名称"};
    		
    		//Excel文件名
    		String fileName = "烟草商品信息表" + System.currentTimeMillis() + ".xls";
    		
    		//sheet名
    		String sheetName = "小宝";
    		String[][] content = new String[list.size()][];
    		for(int i=0; i<list.size(); i++){
    			content[i] = new String[title.length];
    			Goods g = list.get(i);
    			content[i][0] = g.getGoodsid();
    			content[i][1] = g.getGoodsname();
    		}
    		
    		//创建HSSFWorkbook
    		HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
    		
    		try {
    			this.setResponseHeader(response, fileName);
    			OutputStream out = response.getOutputStream();
    			wb.write(out);
    			out.flush();
    			out.close();
    			wb.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    	}
    	
    	 //发送响应流方法
        public void setResponseHeader(HttpServletResponse response, String fileName) {
            try {
               /* try {
                    fileName = new String(fileName.getBytes(),"ISO8859-1");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }*/
                response.setContentType("application/octet-stream;charset=ISO8859-1");
                response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
                response.addHeader("Pargam", "no-cache");
                response.addHeader("Cache-Control", "no-cache");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    4.JSP页面表单提交请求:

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="user!export.action" method="post">
    		<input id="gi" name="goodsid" type="hidden" value="" />
    		<button id="excel" type="submit">导出Excel</button>
    	</form>
    </body>
    </html>

    注意:如果遇到异常java.lang.NoSuchMethodException;

    解决方式:

    ①检查Action类是否实现ActionSupport接口,Action类中是否有调用的方法;

    ②检查jar包、该方法是否public修饰,是否有传参(Struts2不允许方法有参数);

    ③清理Tomcat缓存,重新部署项目。

    总结:现阶段对于JQuery和Spring框架不熟悉,先用这样的方式将功能实现。

    展开全文
  • asp.net如何导出excel表的几个方法介绍了在开发过程如何将数据导出EXCEL表中中去的方法的代码。可以借鉴学习。
  • springboot 实现excel表导出

    千次阅读 2018-08-15 14:12:44
    //EXCEL表导出核心代码 // 声明一个Excel HSSFWorkbook wb=null; //title代表的是你的excel表开头每列的名字 String[] title =new String[]{"项目","年度预算","累计执行数","执行进度","进度偏差"}; String...

    首先导入相应jar包   

    pom:

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.6</version>
    </dependency>
    

    数据封装要准备好,也就是我们说的domain或者pojo

    package com.nework.course01.util;
    
    public class DataItem {
    
        private String project;
    
        private String annualBudget;
    
        private String cumulativExecution;
    
        private String progress;
    
        private String progressDeviation;
    
        public DataItem(String project, String annualBudget, String cumulativExecution, String progress, String progressDeviation) {
            this.project = project;
            this.annualBudget = annualBudget;
            this.cumulativExecution = cumulativExecution;
            this.progress = progress;
            this.progressDeviation = progressDeviation;
        }
    
        public DataItem() {
        }
    
        public String getProject() {
            return project;
        }
    
        public void setProject(String project) {
            this.project = project;
        }
    
        public String getAnnualBudget() {
            return annualBudget;
        }
    
        public void setAnnualBudget(String annualBudget) {
            this.annualBudget = annualBudget;
        }
    
        public String getCumulativExecution() {
            return cumulativExecution;
        }
    
        public void setCumulativExecution(String cumulativExecution) {
            this.cumulativExecution = cumulativExecution;
        }
    
        public String getProgress() {
            return progress;
        }
    
        public void setProgress(String progress) {
            this.progress = progress;
        }
    
        public String getProgressDeviation() {
            return progressDeviation;
        }
    
        public void setProgressDeviation(String progressDeviation) {
            this.progressDeviation = progressDeviation;
        }
    }
    

     

    然后开始正题:

    package com.nework.course01.controller;
    
    import com.nework.course01.util.DataItem;
    import com.nework.course01.util.PageData;
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    
    
    @RestController
    @RequestMapping("/excel")
    public class ExcelController {
    
        @RequestMapping("/excelExport")
        public void excelExport(HttpServletRequest request, HttpServletResponse response) throws Exception {
    
    
    
            //开始模拟获取数据,实际应该在数据库查出来
    
            List<DataItem> list = new ArrayList<>();
            list.add(new DataItem("教育局","123123","123","123","123"));
            list.add(new DataItem("民政局","123123","123","123","123"));
            list.add(new DataItem("邮政局","123123","123","123","123"));
    
    
    
    
    
    //EXCEL表导出核心代码
            //   声明一个Excel
            HSSFWorkbook wb=null;
    
            //title代表的是你的excel表开头每列的名字
            String[] title =new String[]{"项目","年度预算","累计执行数","执行进度","进度偏差"};
    
    
            String name="测试";
            //excel文件名
            String fileName = name+".xls";
    
            //sheet名
            String sheetName = name+"表";
    
            //二维数组铺满整个Excel
    
            String[][] content = new String[list.size()][title.length];
            //--------------------------------------------------------------------------------------------
    
            // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
            if(wb == null){
                wb = new HSSFWorkbook();
            }
    
            // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet = wb.createSheet(sheetName);
    
    
            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
            HSSFRow row = sheet.createRow(0);
    
            // 第四步,创建单元格,并设置值表头 设置表头居中
            HSSFCellStyle style = wb.createCellStyle();
            //设置背景色
            style.setFillForegroundColor(HSSFColor.LIGHT_BLUE.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            //设置边框
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            //设置居右
            style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);//水平居右
            style.setVerticalAlignment(HSSFCellStyle.ALIGN_RIGHT);
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
            //设置字体
            HSSFFont font=wb.createFont();
            font.setFontName("黑体");
            font.setFontHeightInPoints((short) 16);//设置字体大小
            HSSFFont font2=wb.createFont();
            font2.setFontName("仿宋_GB2312");
            font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
            font2.setFontHeightInPoints((short) 12);
    
            style.setFont(font);//选择需要用到的字体格式
    
            //设置列宽
            sheet.setColumnWidth(0, 12000);//第一个参数代表列id(从0开始),第二个参数代表宽度值
            sheet.setColumnWidth(1, 4567);//第一个参数代表列id(从1开始),第二个参数代表宽度值
            sheet.setColumnWidth(2, 4567);//第一个参数代表列id(从2开始),第二个参数代表宽度值
            sheet.setColumnWidth(3, 4567);//第一个参数代表列id(从3开始),第二个参数代表宽度值
            sheet.setColumnWidth(4, 4567);//第一个参数代表列id(从4开始),第二个参数代表宽度值
            style.setWrapText(true);//设置自动换行
    
            //加边框
            HSSFCellStyle cellStyle=wb.createCellStyle();
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            cellStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
            cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
            cellStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
            cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
            cellStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
            cellStyle.setRightBorderColor(HSSFColor.BLACK.index);
            cellStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);
            cellStyle.setTopBorderColor(HSSFColor.BLACK.index);
            //声明列对象
            HSSFCell cell = null;
    
            //创建标题
            for(int i=0;i<title.length;i++){
                cell = row.createCell(i);
                cell.setCellValue(title[i]);
                cell.setCellStyle(style);
            }
    
    
    
    
    
            //把list放进content里
    
            for (int i = 0; i < list.size(); i++) {
                content[i] = new String[title.length];
                DataItem obj = list.get(i);
                content[i][0] = obj.getProject();
                content[i][1] = obj.getAnnualBudget();
                content[i][2] = obj.getCumulativExecution();
                content[i][3] = obj.getProgress();
                content[i][4] = obj.getProgressDeviation();
            }
            //添加数据进入excel
    
            for(int i=0;i<content.length;i++){
    
                row = sheet.createRow(i + 1);
    
                for(int j=0;j<content[i].length;j++){
    
              //将内容按顺序赋给对应的列对象
                    HSSFCell cel = row.createCell(j);
                    cel.setCellValue(content[i][j]);
    
                } }
    
    
            //响应到客户端
            try {
                try {
                    try {
                        fileName = new String(fileName.getBytes(),"ISO8859-1");
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    response.setContentType("application/octet-stream;charset=ISO8859-1");
                    response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
                    response.addHeader("Pargam", "no-cache");
                    response.addHeader("Cache-Control", "no-cache");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                OutputStream os = response.getOutputStream();
                wb.write(os);
                os.flush();
                os.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    

     最后地址栏输入:http://localhost:8080/excel/excelExport

    展开全文
  • Web(C#)导出Excel文档

    2013-07-15 14:34:56
    本人编写的一个Web(C#)导出Excel文档的小例子,小Demo,希望能够帮助你
  • Java web excel数据的导入导出,利用jxl与poi技术实现数据已excel表格导出数据。
  • 公司项目要求,做了一个C#程序,内容是excel导入导出+mysql数据库
  • poi操作Excel导入导出web项目实例 先执行导出的Demo,会自动在桌面上生成Excel,然后执行导入Demo,会自动导入桌面的Excel的内容
  • web项目实现Excel数据导入导出

    万次阅读 2016-06-19 23:00:12
    由于项目要求,需要实现一个数据库信息导出Excel文件,并能将Excel文件的信息导入数据库的功能,网上找了一下资料,发现大都只涉及到Excel文件的简单操作,所以特地在此分享了自己写的两个简单的WebExcel文件...

            由于项目要求,需要实现一个数据库信息导出为Excel文件,并能将Excel文件中的信息导入数据库的功能,网上找了一下资料,发现大都只涉及到Excel文件的简单操作,所以特地在此分享了自己写的两个简单的Web端Excel文件导入导出的例子。

            涉及到的工具类主要有jxl.jar,commons-fileupload-1.2.1.jar,commons-io-1.4.jar,网上有很多这些工具的学习资料,具体可以自己百度,此处不再详细阐述。

    1、Excel文件的导出

            首先是Excel文件的导入,这点比较简单,主要是一些响应头的设置,代码如下

    public class ExportExcelUtil
    {
    	public static void exportExcel( HttpServletResponse response) 
    	{
            try 
            {
    	        OutputStream os = response.getOutputStream();// 取得输出流  
    	        response.reset();// 清空输出流  
    	
    	        response.setHeader("Content-disposition", "attachment; filename="+new String("词性数据".getBytes("GB2312"),"8859_1")+".xls");// 设定输出文件头  
    	        response.setContentType("application/msexcel");// 定义输出类型
    	           
    	        WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel文件  
    	       
    	        WritableSheet ws = wwb.createSheet("Sheet1", 10);        // 创建一个工作表
    	
    	        //    设置单元格的文字格式
    	        WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
    	        WritableCellFormat wcf = new WritableCellFormat(wf);
    	        wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
    	        wcf.setAlignment(Alignment.CENTRE);
    	        ws.setRowView(0, 500);
    	
    	        //    填充数据的内容
    	        //    填充表头
    	        Label name = new Label(0,0,"姓名");
    	        Label sex = new Label(1,0,"性别");
    	        //填充数据
    	        Label nameValue = new Label(0,1,"tom");
    	        Label sexValue = new Label(1,1,"man");
    	        ws.addCell(name);
    	        ws.addCell(sex);
    	        ws.addCell(nameValue);
    	        ws.addCell(sexValue);
    	        wwb.write();
    	        wwb.close();
    
            } catch (IOException e){
            } catch (RowsExceededException e){
            } catch (WriteException e){}
        }
    }

    2、Excel文件的数据导入

            关于Excel的数据导入,需要先将Excel文件上传到服务器中,待数据读取完成后再将Excel文件删掉,这里顺带贴出Servlet层代码供大家参考

           

    public class Demo1 extends HttpServlet
    {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException
    	{
    		File file = null;
    		response.setContentType("text/html;charset=UTF-8");
    		try
    		{
    			FileItemFactory factory = new DiskFileItemFactory();
    			// 文件上传核心工具类
    			ServletFileUpload upload = new ServletFileUpload(factory);
    			upload.setFileSizeMax(10*1024*1024);	// 单个文件大小限制
    			upload.setSizeMax(50*1024*1024);		// 总文件大小限制
    			upload.setHeaderEncoding("UTF-8");		// 对中文文件编码处理
    			
    			if (ServletFileUpload.isMultipartContent(request)) 
    			{
    				// 3. 把请求数据转换为list集合
    				List<FileItem> list = upload.parseRequest(request);
    				// 遍历
    				for (FileItem item : list)
    				{
    					// 判断:普通文本数据
    					if (item.isFormField())
    					{
    						//普通表单项操作
    					} 
    					// 文件表单项
    					else 
    					{
    						// a. 获取文件名称
    						String name = item.getName();
    						// b. 得到上传目录
    						String basePath = getServletContext().getRealPath("/upload");
    						// c. 创建要上传的文件对象
    						file = new File(basePath,name);
    						// d. 上传
    						item.write(file);
    						item.delete();  // 删除组件运行时产生的临时文件
    				}
    			}
    		}
    		List<String> list = ImportExcelUtil.importExcel(file);
    		for(String s:list)
    		{
    			System.out.println(s);
    		}
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	}
    	
    
    	
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException
    	{
    		doGet(request,response);
    	}
    }
    
            读取Excel文件的工具类

    public class ImportExcelUtil
    {
    	private static List<String> list = new LinkedList<String>();
    	public static List<String> importExcel(File file)
    	{
    		try
    		{
    			list.clear();
    			FileInputStream fs = new FileInputStream(file);
    			Workbook wb = Workbook.getWorkbook(fs);
    			Sheet sheet = wb.getSheet(0);
    			//获取表的行数
    			int row = sheet.getRows();
    			//循环获取值
    			for(int i = 0;i<row;i++)
    			{
    				String s = sheet.getCell(0,i).getContents();
    				list.add(s);
    			}
    			//关闭流,否则后面文件删除会失败
    			fs.close();
    			file.delete();
    		} catch (BiffException e)
    		{
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e)
    		{
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return list;
    	}
    }
    

            以上代码可供参考,写得非常简单,大家可以根据需求进行更改,如有错误,欢迎大家批评指正,谢谢。

    展开全文
  • Java实现Excel多表头动态数据导出

    千次阅读 2020-07-23 13:05:12
    好久没时间写帖子了,由于工作需要,写一个基于JAVA实现Excel多表头动态导出功能,首先可能这个叫法比较啰嗦,下面我们先看看什么是Excel多表头动态导出(效果图): 它包含两部分:1、是表头,就像大家看到的...

       好久没时间写帖子了,由于工作需要,写一个基于JAVA实现的Excel多表头动态导出功能,首先可能这个叫法比较啰嗦,下面我们先看看什么是Excel多表头动态导出(效果图):

     它包含两部分:1、是表头,就像大家看到的样子它的表头是多行合并的(多表头);2.内容部分,就是下方的数据数据内容。

    两个内容都是有后台人员分别由两个接口返回的(也可以一个,但一个会显得格式冗余),因此他的表头数据是不固定的,可能有甲方要求,甲方、乙方、丙方要求等,是随机看后台数据的,所以我们就不能事先画好Excel模板进行导出,好以上就是我对java实现Excel多表头动态导出的说明下面开始吧。

    一、在开发前我们要撸一下思路,该怎么去做?会遇到什么坑?首先不用多说肯定识这个多表头的问题了,后端返回的Json数据一般都:

    不难发现一个list<Map>发现虽然都有一、二级目录的区分,但是分开的不符合我们的需要,因此我们需要转换分组为想要的数据类型

    Map<String, List<Map>>格式的数据:既把同一个一级目录下的二级目录放到一个List<Map>中方便后面的Excel渲染

    二、就是在Excel做数据渲染时的数据角标的计算问题,以及如何让经过我们分组后的表头数据与内容匹配上,因为数据是动态生成的,所以在生成数据是一定要注意,后几列的数据再前几列数据生成的基础上向后推的。

    三、主要的坑应该就是上面两个问题了,那我们开发撸代码吧:

    1、我使用的实现语言是JAVA中的servlet,关于servlet不太熟悉的小伙伴可以百度自行科普一下,简单说就是(1):

    集成HttpServlet并实现其几个方法;(2)配置web.xlm文件等。

    代码:

    /**
     * 自定义表头导出方法
     * @throws: l
     * @param :resultParam 导出excel名称、模板名称、导出地址
     */
    public void exportExcelByDiyTitle(HttpServletRequest request, HttpServletResponse response)throws IOException{
       System.out.println("进入自定义导出表头方法");
       response.reset();// 清空输出流
       String templateName ="按异常原因统计";
       //获取导出参数进行查询orgId=06&date=2020-07
       String orgId = request.getParameter("orgId");//组织ID
       String date = request.getParameter("date");//日期
       String type = request.getParameter("type");//日期
       List<Map<String,Object>> listtitle=null;
       List<Map<String,Object>> list=null;
       WorkOrderInforShowService workOrderInforShowService = new WorkOrderInforShowServiceImpl();
       //这是调用后台Execl表头数据接口
          listtitle = workOrderInforShowService.getYCLXTypeOfYY(orgId,date);
         //获取Excell内容数据接口
          list = workOrderInforShowService.getAppWorkOrderStatisticsOfYY(orgId,date);
       //设置谷歌和Ie浏览器导出表单乱码问题
       String userAgent = request.getHeader("User-Agent");
       if (userAgent.contains("MSIE")||userAgent.contains("Trident")){
          templateName = java.net.URLEncoder.encode(templateName, "UTF-8");
       }else{
          templateName = new String(templateName.getBytes("UTF-8"),"ISO-8859-1");
       }
       response.setHeader("Content-disposition", "attachment; filename="
             + templateName+ ".xls");// 设定输出文件头
          response.setContentType("application/msexcel");
          // 创建一个工作薄
           HSSFWorkbook workbook = new HSSFWorkbook();
           // 生成一个表格
           HSSFSheet sheet = workbook.createSheet("数据明细");
       HSSFCellStyle cellStyle = workbook.createCellStyle();
       //设置表头字体
       HSSFFont font2 = workbook.createFont();
       font2.setFontName("仿宋_GB2312");
       font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
       font2.setFontHeightInPoints((short) 10);
       //TODO 水平垂直居中 列宽
       cellStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
       cellStyle.setFont(font2);
       // 产生表格标题行
           HSSFRow firrow = sheet.createRow(0);
       // 产生表格标题行
       HSSFRow row = sheet.createRow(1);
       CellRangeAddress cellRange = null;
       //一级表头
       String manKey=null;
       //判断表头是否有数据
       if(listtitle.size()==0){
          return;
       }
    //这就是我们对无序的表头数据进行分组得等满足要求的Map<String, List<Map>> 格式数据
          Map<String, List<Map>> temp =new HashMap<String, List<Map>>();
          for(Map item:listtitle){
             String key = item.get("VAL_ONE").toString();
             if(temp.get(key) == null){
                List<Map> list1 = new ArrayList<>();
                temp.put(key,list1);
             }else{
                temp.put(key,temp.get(key));
             }
             temp.get(key).add(item);
          }
        
       //设置固定单位列
       HSSFCell organizeCell = firrow.createCell(0);
       organizeCell.setCellStyle(cellStyle);
       //由于后台数据并没有返回项目名称这一列接口数据,因此我们只能自己生成
       organizeCell.setCellValue("项目名称");
       sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
           //遍历生成一、二级表头
       int count = 1;
           for(Map.Entry<String, List<Map>> entry : temp.entrySet()){
               List<Map> mapValue = entry.getValue();
                 manKey=entry.getKey();
               if(mapValue.size()>0){
                   //设置一级表头
             HSSFCell fircell = firrow.createCell(count);
             fircell.setCellStyle(cellStyle);
             fircell.setCellValue(manKey);
             //对合并列进行判断,当二级目录为一时既不需要合并
             if(mapValue.size()>1){
               //设置单元格合并操作,可以查询Excel导出api
                cellRange = new CellRangeAddress(0, 0, count, count + mapValue.size()-1);
                try {
                   sheet.addMergedRegion(cellRange);
                   addBorderLine(sheet,cellRange,workbook);
                }catch (Exception e){
                   e.printStackTrace();
                }
             }
           for (short i = 0; i < mapValue.size(); i++) {
                try {
                   //设置二级表头
                       HSSFCell cell = row.createCell(count+i);
                      HSSFRichTextString text = new HSSFRichTextString(mapValue.get(i).get("VAL_TWO").toString());
                      cell.setCellValue(text);
                //设置二级表头宽度
                sheet.setColumnWidth(count+i, text.toString().getBytes("UTF-8").length*256);
                cell.setCellStyle(cellStyle);
                CellRangeAddress cellRange1 = new CellRangeAddress(1, 1, count-1, count+i);
                //sheet.addMergedRegion(cellRange1);
                   //设置水平位置
                 addBorderLine(sheet, cellRange1, workbook);
                     }catch (Exception e){
                    e.printStackTrace();
                }
                  }
             count = count + mapValue.size();
          }
       }
           // 遍历集合数据,产生数据行
           if(list!=null && list.size() > 0){
               int index = 1;
               int count1 = 1;
          for (short i = 0; i < list.size(); i++) {
                   index++;
                   // 从表头下一行开始插入数据
                   row = sheet.createRow(index);
             row.createCell(0).setCellValue(list.get(i).get("XLMC").toString());
             for(Map.Entry<String, List<Map>> entry : temp.entrySet()){
                List<Map> mapValue = entry.getValue();
                manKey=entry.getKey();
                if(mapValue.size()>0){
                   for (short ii = 0; ii < mapValue.size(); ii++) {
                      try {
                         HSSFCell cell = row.createCell(count1 + ii);
                        //通过遍历表头二级表单“CODE_TWO”值 匹配内容接口数据
                         if(null==list.get(i).get(mapValue.get(ii).get("CODE_TWO").toString())||("null").equals(list.get(i).get(mapValue.get(ii).get("CODE_TWO").toString()))){
                            cell.setCellValue("0");
                         }else {
                            cell.setCellValue(list.get(i).get(mapValue.get(ii).get("CODE_TWO").toString()).toString());
                         }
                      }catch (Exception e){
                         e.printStackTrace();
                      }
                   }
                   count1 = count1 + mapValue.size();
                }
             }//当该行数据遍历完成之后,下一行从第二列开始
             count1=1;
               }
           }
           OutputStream outputStream = response.getOutputStream();// 打开流
           workbook.write(outputStream);// HSSFWorkbook写入流
           workbook.close();// HSSFWorkbook关闭
           outputStream.flush();// 刷新流
           outputStream.close();// 关闭流
           System.out.println("导出成功");
    }
    private void addBorderLine(HSSFSheet sheet,CellRangeAddress cellRangeAddress,HSSFWorkbook workbook){
       RegionUtil.setBorderTop(1, cellRangeAddress, sheet, workbook);
       RegionUtil.setBorderBottom(1, cellRangeAddress, sheet, workbook);
       RegionUtil.setBorderLeft(1, cellRangeAddress, sheet, workbook);
       RegionUtil.setBorderRight(1, cellRangeAddress, sheet, workbook);
    }
    

    内容接口:

     

    展开全文
  • java web使用jxls导出excel功能,详细参考:http://blog.csdn.net/xiejx618/article/details/38906683
  • 主要介绍了JavaScript将Web页面内容导出到Word及Excel的方法,涉及javascript操作ActiveXObject控件的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • Java实现Excel导入导出功能

    热门讨论 2012-01-31 07:37:58
    Java实现Excel导入导出功能网络搜集,很好用
  • C#代码NPOI实现Excel导入导出,包含操作类、实例和类库
  • web应用程序开发时,或许你会遇到这样的需求,如何在 Asp.Net Core 中实现 excel 或者 word 的导入导出,在 NuGet 上有大量的工具包可以实现这样的功能,本篇就讨论下如何使用 ClosedXML 实现 Excel 数据导出。...
  • asp.net实现数据导入导出Excel中多Sheet的情况
  • 最近使用vue在做一个后台系统,技术栈 vue + iView ,在页面生成表格后, iView可以实现表格的导出,不过只能导出csv格式的,并不适合项目需求。 如果想要导出Excel 在src目录下创建一个文件(vendor)进入 Blob.js...
  • excel-handler:使用ASP.Net Core Webapi,EPPlus,ExcelDataReader读取和导出Excel文件
  • 这是一个基于Web的问卷调查统计结果写入/导出Excel的简单例子,具体内容请移步到文章查看资源实例图:https://blog.csdn.net/weixin_42148410/article/details/101515179
  • web是用react写的,然后表格显示使用ant的UI框架Table显示的,现在有这样一个需求, 想要导出这个表格为Excel,求各路大神指点一下!谢谢了!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,900
精华内容 13,560
关键字:

web中实现对excel表的导出