`
gary0416
  • 浏览: 334730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

导入导出Excel工具,支持XML和properties配置(一)

阅读更多

需要jxl.jar,dom4j.jar

 JXLUtil.java

 

package ssh.util;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * 导入,导出excel
 * @author gary
 * @version 1.0
 *
 */
public class JXLUtil {
	
	private JXLReader reader;
	
	public JXLUtil(){
		reader = new JXLReader();
	}
	
	
	/**
	 * 返回目标数据库列名key
	 * @param target
	 * @return
	 */
	public String getTargetKey(String target){
		return reader.getTargetValue(target, "key");
	}
	
	/**
	 * 返回目标标题
	 * @param target
	 * @return
	 */
	public String getTargetTitle(String target){
		return reader.getTargetValue(target, "title");
	}
	
	/**
	 * 返回目标文件名
	 * @param target
	 * @return
	 */
	public String getTargetFileName(String target){
		return reader.getTargetValue(target, "fileName");
	}
	
	/**
	 * 导出EXCEL
	 * 
	 * jxl.xml配置:
	 * <jxl>
	 * 		<目标>
	 * 			<title>标题</title>
	 * 			<key>数据库中的列名</key>
	 * 			<fileName>文件名</fileName>
	 * 		</目标>
	 * </jxl>
	 * example:
	 * <jxl>
	 * 		<user>
	 * 			<title>ID,用户名,登陆密码,真实名字</title>
	 * 			<key>userId,userName,password,realName</key>
	 * 			<fileName>userInfo</fileName>
	 *		</user>
	 * </jxl>
	 * 
	 * jxl.properties配置:
	 * 标题: jxl.目标.title
	 * 数据库表中的列名: jxl.目标.key
	 * 文件名: jxl.目标.fileName
	 * example:
	 * jxl.user.title=ID,\u7528\u6237\u540D,\u767B\u9646\u5BC6\u7801,\u771F\u5B9E\u540D\u5B57
	 * jxl.user.key=userId,userName,password,realName
	 * jxl.user.fileName=userInfo
	 * 
	 * @param list
	 * @param target
	 * @param response
	 */
	public void exportExcel(List<Map<String,?>> list, String target, HttpServletResponse response){
		
		try{
			//设置table列名
			String excelTitle = getTargetTitle(target);
			String[] excelTitleArray = excelTitle.split(",");
			//文件名
			String fileName = getTargetFileName(target) + "_" + new SimpleDateFormat("yyyy-MM-dd").format(new Date());
			//取得key
			String excelKey = getTargetKey(target);
			String[] excelKeyArray = excelKey.split(",");
			// 取得输出流 
			OutputStream os = response.getOutputStream();
			// 清空输出流
			response.reset();   
			// 设定输出文件头,不用GBK会乱码
				response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GBK"),"ISO-8859-1") + ".xls");
			// 定义输出类型 
			response.setContentType("application/msexcel;charset=utf-8");
			// 建立excel文件 
			WritableWorkbook wwb;
			wwb = Workbook.createWorkbook(os);
			// 创建一个工作表
			WritableSheet ws = wwb.createSheet("Sheet1", 10);   
			// 设置单元格的文字格式
			//WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
			//        UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
			WritableFont wf = new WritableFont(WritableFont.ARIAL,11,WritableFont.BOLD,false,
	        UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
		    WritableCellFormat wcf = new WritableCellFormat(wf);
		    // 对齐方式
		    wcf.setAlignment(Alignment.CENTRE);
		    wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
		    // 边框
		    wcf.setBorder(Border.ALL, BorderLineStyle.THIN);
		    // 背景色
		    wcf.setBackground(Colour.GRAY_25);
		    ws.setRowView(0, 500);
		    
		    //设置列头名
		    for (int j=0;j<excelKeyArray.length;j++) {
		    	ws.addCell(new Label(j, 0, excelTitleArray[j], wcf));
		    }
		    //设置内容
		    wcf = new WritableCellFormat();
		    for (int i = 0; i < list.size(); i++) {
		    	Map<String, ?> mapList = (Map<String, ?>)list.get(i);
		    	for (int j=0;j<excelKeyArray.length;j++) {
		    		ws.addCell(new Label(j, i+1, (mapList.get(excelKeyArray[j])+"").toString(), wcf));
		    	}
		    }
		    wwb.write();
		    wwb.close();
		} catch (IOException e){
        } catch (RowsExceededException e){
        } catch (WriteException e){
        }

	}
	
	/**
	 * 从excel文件读取数据,返回list
	 * @param file
	 * @param target
	 * @return
	 */
	public List<Map<String, ?>> getImportData(File file, String target){
		
		List<Map<String, ?>> data = new ArrayList<Map<String, ?>>();
		try {
			Workbook book = Workbook.getWorkbook(file);
	
			// 获得第一个sheet,默认有三个
			Sheet sheet = book.getSheet(0);
			// 一共有多少行多少列数据
			int rows = sheet.getRows();
			int columns = sheet.getColumns();
	
			boolean hasText = false;
			for (int i = 0; i < rows; i++) {
				// 过滤掉没有文本内容的行
				for (int j = 0; j < columns; j++)
					if (sheet.getCell(j, i).getContents() != "") {
						hasText = true;
						break;
					}
				if (hasText) {
					Map<String, String> temp = new HashMap<String, String>();
					
					//取得key
					String excelKey = getTargetKey(target);
					String[] excelKeyArray = excelKey.split(",");
					
					for(int k = 0 ; k < excelKeyArray.length ; k++){
						temp.put(excelKeyArray[k], sheet.getCell(k, i).getContents());
					}
//					temp.put(Integer.valueOf(sheet.getCell(0, i).getContents()));
					data.add(temp);
				}
			}
			book.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return data;
	}

	
	//附:jdbc批量导入例子
	
//	//添加用户信息
//	private static final String SQL_ADD_USER = 
//		"insert into users(userId,userName,password,realName) values (?,?,?,?)";
//	
//	/**
//	 * 从Excel文件导入到数据库user表
//	 */
//    public int[] importUser(final File file) throws Exception {
//		
//        BatchPreparedStatementSetter pss = new BatchPreparedStatementSetter() {
//            
//            public void setValues(PreparedStatement ps, int i) throws SQLException {
//                Map row = (Map)(jxlUtil.getImportData(file, "user").get(i));
//
//				//取得key
//				String excelKey =jxlUtil.getTargetKey("user");
//				String[] excelKeyArray = excelKey.split(",");
//				
//				for(int k = 0 ; k < excelKeyArray.length ; k++){
//					ps.setString(k+1, (String)row.get(excelKeyArray[k]));
//				}
//    			
//            }
//            
//            public int getBatchSize() {
//                return jxlUtil.getImportData(file, "user").size();
//            }
//        };
//        return jt.batchUpdate(SQL_ADD_USER, pss);
//    }
}
1
0
分享到:
评论

相关推荐

    C#向DataGridView中导入导出Excel

    以上就是使用C#将数据在DataGridView和Excel之间进行导入导出的基本方法和相关知识点。实际开发中,这些步骤可能需要根据具体项目需求进行调整和优化。提供的两个文本文件"导入Excel.txt"和"SaveExcel.txt"可能包含...

    GridView和Excel的导入导出

    综上所述,GridView和Excel的导入导出涉及到多个技术环节,包括数据读取、格式转换、错误处理等,是.NET开发中常见且实用的功能。正确理解和运用这些技术,可以提高Web应用程序的数据交互能力,提升用户体验。

    springboot整合easypoi实现文件导入导出OSS文件上传和下载。OSS图片导出

    Easypoi是一个强大的Java操作Excel的工具,支持Excel的读写,特别适用于处理大量数据的导入导出。下面我们将详细阐述这一过程。 首先,我们需要在SpringBoot项目中引入Easypoi的相关依赖。Easypoi提供了注解方式来...

    经典三种C#导入导出到EXCEL的方法(C#开发人员必备).docx

    在C#编程中,导入和导出Excel文件是常见的数据操作任务,特别是在处理大量数据时。以下是关于在C#中实现这...以上就是C#中导入导出Excel文件的基本方法和相关知识点,这将帮助开发者在处理Excel数据时更加高效和灵活。

    C#导入导出excel表

    ### C#导入导出Excel表知识点详解 #### 一、背景与需求分析 在实际开发过程中,经常需要处理Excel文件的导入与导出工作。利用C#语言的强大功能,可以非常方便地完成这一任务。本篇文章将详细介绍如何使用C#进行...

    excel文件数据导入到数据库以及从数据库将数据导出成excel.zip

    总的来说,这个项目涵盖了Java Web开发、数据库操作和Excel文件处理等多个方面,是学习和实践数据导入导出功能的好例子。通过这个项目,开发者可以深入理解SpringBoot的自动化配置、MyBatis的映射机制,以及Apache ...

    基于OPENDATASOURCE函数的SQL Server数据库海量数据的快速导入导出方法

    为了高效地管理大量数据,SQL Server提供了一种灵活的工具——OPENDATASOURCE函数,它允许我们直接从外部源读取数据,从而实现快速的数据导入导出。下面我们将详细探讨基于OPENDATASOURCE函数的这种方法。 ...

    SQL Server 导入导出大全

    SQL Server 提供了多种方法来实现数据的导入导出功能,包括但不限于 Excel 文件、文本文件、dBase IV 文件、dBase III 文件、DBF 文件以及 XML 文件等。本文将详细介绍这些方法的具体操作步骤和技术细节。 #### ...

    GridView导入导出

    Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); OleDbCommand command = new OleDbCommand("SELECT * ...

    ASP.NET-[其他类别]数据导入与数据导出Excel.zip

    总的来说,ASP.NET中数据导入与导出Excel涉及的关键技术包括:使用OLEDB或Open XML读写Excel文件,使用DataTable作为中间数据容器,以及使用DataSet进行数据操作。了解并熟练运用这些技术,能够帮助开发者高效地处理...

    vb批量将excel数据导入access以及批量将access数据库中的数据导入excel源代码

    在VB(Visual Basic)编程环境中,常常需要处理数据导入导出的问题,特别是在处理大量数据时,Excel和Access数据库之间的交互显得尤为重要。标题提到的“vb批量将excel数据导入access以及批量将access数据库中的数据...

    导出excel文档所需要的poi的jar包

    标题提到的"导出excel文档所需要的poi的jar包"就是指这个库的相关组件。 1. **Apache POI 概述** Apache POI 提供了一组API,允许开发者在Java应用程序中创建、修改和显示MS Office格式的文件。它支持老版本的BIFF...

    C# 解析Excel工具类和Demo

    在处理Excel文件时,C#提供了一些库和工具类来帮助开发者读取、写入和解析Excel数据。这个“C# 解析Excel工具类和Demo”应该包含了一个使用C#编写的工具类库,以及一个演示如何使用这些工具的Windows Forms应用程序...

    c#读取Excel文件导入到XML文件中

    private string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\工作表.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";

    C#实现Excel导入数据到SQL Server数据库

    在IT行业中,数据的导入与导出是常见的操作,特别是在数据分析和系统集成的场景下。本教程将聚焦于使用C#编程语言实现从Excel文件批量导入数据到SQL Server数据库的过程,利用`SqlBulkCopy`类来高效地完成这一任务。...

    直接使用SQL语句读取Excel表格内容,把表中内容导入数据库中

    BCP(Bulk Copy Program)是SQL Server的一个实用程序,用于快速批量导入导出数据。使用BCP命令,你可以将Excel数据导入到SQL Server数据库中: ```sql EXEC master..xp_cmdshell 'bcp "SELECT * FROM YourTable" ...

    EXCEL导入方法

    在IT领域,Excel是一款广泛应用的数据处理工具,尤其在数据分析、报表制作等方面表现出强大的功能。而“Excel导入方法”通常指的是将外部数据引入到Excel工作表中的过程,这在很多业务场景中都十分常见。本篇将详细...

    fhir-etl:该项目提供了一组 Kettle 转换(Pentaho 数据集成 ETL 工具),允许您从 FHIR REST 服务器导出导入 FHIR 资源(xml 和 json)到 Excel 数据库,反之亦然

    该项目提供了一组 Kettle 转换(Pentaho 数据集成 ETL 工具),允许将 FHIR 资源(XML、JSON)从 FHIR 服务器导出/导入到 Excel/数据库,反之亦然。 安装 从下载 Kettle 将 fhir-etl/etc/extlib 目录复制到您的 %...

    基于C__NET的Excel表格数据导入数据库技术研究

    本文重点介绍了一种基于C# .NET的Excel表格数据导入XML数据库的方法,并详细讨论了其实现过程和技术要点。 #### 1. 关键技术分析与实现 ##### 1.1 XML数据库 XML数据库是一种用于存储和管理XML文档的数据管理系统...

    delphi导出数据至Excel的七种方法及比较

    在软件开发过程中,将数据导出到 Excel 文件是一种常见的需求。Delphi 是一款强大的开发工具,提供了多种方式来实现这一功能。本文将详细介绍 Delphi 导出数据至 Excel 的七种方法,并对它们进行比较分析。 #### ...

Global site tag (gtag.js) - Google Analytics