jxl架包轻小,应用起来简单实用,是解决操作excel问题很好的方案。下面介绍一个操作excel实用工具类以及实例。
工具类:
package ash_ljv2.framework.util;
import java.io.*;
import java.util.Date;
import java.util.UUID;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.read.biff.BiffException;
import jxl.write.*;
import jxl.write.Number;
import jxl.write.Boolean;
public class Excel{
//文件路径
private String path;
private String tableName ;
private String[] tableCols;
//工作薄集合
private Workbook workbook;
public Excel(String path,String tableName,String[] tableCols) throws BiffException,IOException{
this.tableName = tableName;
this.tableCols = tableCols;
this.setPath(path);
this.setWorkbook(Workbook.getWorkbook(new java.io.File(path)));
}
/**
* 获取工作薄数量
* @return 工作薄数量
*/
public int getNumberOfSheets(Workbook book){
return book == null ? 0 :book.getNumberOfSheets();
}
/**
* 获取工作薄总行数
* @param sheet 工作薄
* @return 工作薄总行数
*/
public int getRows(Sheet sheet){
return sheet == null ? 0 : sheet.getRows();
}
/**
* 获取最大列数
* @param sheet 工作薄
* @return 总行数最大列数
*/
public int getColumns(Sheet sheet){
return sheet == null ? 0 : sheet.getColumns();
}
/**
* 获取每行单元格数组
* @param sheet 工作薄
* @param row 行数
* @return 每行单元格数组
*/
public Cell[] getRows(Sheet sheet,int row){
return sheet == null || sheet.getRows() < row ? null : sheet.getRow(row);
}
/**
* 获取每行单元格数组
* @param sheet 工作薄
* @param endrow 结束行
* @param endCol 结束列
* @return 每行单元格数组
*/
public Cell[][] getCells(Sheet sheet,int endrow,int endcol){
return getCells(sheet,0,endrow,0,endcol);
}
/**
* 获取每行单元格数组
* @param sheet 工作薄
* @param startrow 行数
* @param endrow 结束行
* @param startcol 开始列
* @param endCol 结束列
* @return 每行单元格数组
*/
public Cell[][] getCells(Sheet sheet,int startrow,int endrow,int startcol,int endcol) {
Cell[][] cellArray = new Cell[endrow-startrow][endcol-startcol];
int maxRow = this.getRows(sheet);
int maxCos = this.getColumns(sheet);
for(int i = startrow ;i < endrow && i < maxRow ; i++){
for(int j = startcol ; j < endcol && j < maxCos ; j++ ){
cellArray[i-startrow][j-startcol] = sheet.getCell(j, i);
}
}
return cellArray;
}
/**
* 得到行的值
* @param sheet
* @param col
* @param startrow
* @param endrow
* @return
*/
public Cell[] getColCells(Sheet sheet,int col,int startrow,int endrow){
Cell[] cellArray = new Cell[endrow-startrow];
int maxRow = this.getRows(sheet);
int maxCos = this.getColumns(sheet);
if(col <= 0 || col > maxCos || startrow > maxRow || endrow < startrow){
return null;
}
if(startrow < 0){
startrow = 0;
}
for(int i = startrow ;i < endrow && i < maxRow ; i++){
cellArray[i-startrow] = sheet.getCell(col,i);
}
return cellArray;
}
/**
* 得到列的值
* @param sheet
* @param row
* @param startcol
* @param endcol
* @return
*/
public Cell[] getRowCells(Sheet sheet,int row,int startcol,int endcol){
Cell[] cellArray = new Cell[endcol-startcol];
int maxRow = this.getRows(sheet);
int maxCos = this.getColumns(sheet);
if(row <= 0 || row > maxRow || startcol > maxCos || endcol < startcol){
return null;
}
if(startcol < 0){
startcol = 0;
}
for(int i = startcol ;i < startcol && i < maxCos ; i++){
cellArray[i-startcol] = sheet.getCell(i,row);
}
return cellArray;
}
/**
* 生成随机ID
* @return
*/
public static String getStrRandomId(){
String uuid = UUID.randomUUID().toString().replace("-","");
return uuid;
}
/**
* 组装SQL语句(扩展导入数据库额外增加字段的情况)
* @param sheet 工作薄
* @param startrow 开始行
* @param endrow 结束行
* @param startcol 开始列
* @param endcol 结束列
* @return SQL语句数组
*/
public Object[] constrctCellsSql(Sheet sheet,int startrow,int endrow,int startcol,int endcol,String payTime){
Cell[][] cellArray = getCells(sheet, startrow, endrow,startcol,endcol);
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
StringBuffer bf = new StringBuffer("INSERT INTO " + tableName+"(ID,");
for(int i = 0 ; tableCols != null && i < tableCols.length ; i++){
if(i != tableCols.length -1)
bf.append(tableCols[i]).append(",");
else
bf.append(tableCols[i]).append("");
}
bf.append(",PAY_TIME) VALUES ");
for(int i = 0;i< cellArray.length;i++){
//在第一列前加个随机数列
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append(bf.toString()+"('"+getStrRandomId()+"',");
Cell[] cell = cellArray[i];
if(tableCols != null && cell != null && tableCols.length != cell.length)
continue;
for(int j = 0 ; j < cell.length; j++){
String tmp = "";
if(cell[j] != null && cell[j].getContents() != null){
tmp = (String)cell[j].getContents();
}
if(j != cell.length -1 )
sqlBuffer.append("'").append(tmp).append("',");
else
sqlBuffer.append("'").append(tmp).append("'");
}
//增加时间字段
sqlBuffer.append(",").append("to_date('"+payTime+"','YYYY-MM-DD HH24:MI:SS')");
sqlBuffer.append(")");
list.add(sqlBuffer.toString());
System.out.println(sqlBuffer.toString());
}
System.out.println(list);
return list.toArray();
}
/**
* 获取Excel文件路径
* @return Excel文件路径
*/
public String getPath(){
return this.path;
}
/**
* 设置Excel文件路径
* @param path Excel文件路径
*/
public void setPath(String path){
this.path = path;
}
/**
* 获取工作薄集合
*/
public Workbook getWorkbook(){
return this.workbook;
}
/**
* 设置工作薄集合
* @param workbook 工作薄集合
*/
public void setWorkbook(Workbook workbook){
this.workbook = workbook;
}
/**
*
* @param args
*/
public static void main(String[] args){
try {
File fileWrite = new File("c:/testWrite.xls");
fileWrite.createNewFile();
OutputStream os = new FileOutputStream(fileWrite);
Excel.writeExcel(os);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
读取类:
package cn.doc.service.impl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import com.opensymphony.xwork2.ActionContext;
import pojo.TblTableTemplate;
import ash_ljv2.framework.util.Excel;
import ash_ljv2.framework.util.PageBean;
import cn.doc.dao.TableTemplateDao;
import cn.doc.service.TableTemplateService;
public class TableTemplateServiceImpl implements TableTemplateService{
private TableTemplateDao tableTemplateDao;
public TableTemplateDao getTableTemplateDao() {
return tableTemplateDao;
}
public void setTableTemplateDao(TableTemplateDao tableTemplateDao) {
this.tableTemplateDao = tableTemplateDao;
}
/**
* 读取excel
* @return
*/
public List importTableTemplate(String path){
ArrayList list=new ArrayList();
ServletContext request = (ServletContext) ActionContext.getContext()
.get("com.opensymphony.xwork2.dispatcher.ServletContext");
try {
Excel excel = new Excel(request.getRealPath(path),null,null);
Workbook workbook = excel.getWorkbook();
Sheet sheet = workbook.getSheet(0);
int a = excel.getRows(sheet); //最大行数
int m=excel.getColumns(sheet); //最大列数
Cell[][] c = excel.getCells(sheet,0,a,0,m);
String f1 = null,f3=null;
for(int i =0 ; i < c.length;i++){
Cell[] obj = c[i];
for(int j =0 ;j< obj.length; j++ ){
f1=obj[j].getContents().toString();
list.add(f1);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
导入数据库类:
Excel excel=null;
Workbook workbook=null;
Connection conn = session.connection();
ServletContext request = (ServletContext) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.ServletContext");
try {
excel = new Excel(request.getRealPath(path),"tbl_name",new String[]{"NAME","TYPE"}); //数组中为字段名
}catch(Exception e) {
//e.printStackTrace();
}
workbook = excel.getWorkbook();
Sheet sheet = workbook.getSheet(0);
Object[] obj=excel.constrctCellsSql(sheet,1,excel.getRows(sheet),0,excel.getColumns(sheet),payTime); //payTime为工具类中额外加的字段
//这里做些业务逻辑判断......
for(int i=0;i<obj.length;i++){
Statement stmt;
try {
stmt = conn.createStatement();
stmt.execute(obj[i].toString());
stmt.close();
} catch (SQLException e) {
throw new AppException("导入的文件数据格式不正确!");
}
}
导出excel在这就不具体介绍了,无非是设置excel的属性。注意的就是数据定位到哪一行哪一列。jxl对excel的属性控制稍微弱一些,如果要格式美观等复杂的功能,建议用poi.
分享到:
相关推荐
在IT行业中,处理和操作Excel数据是一项常见的任务,特别是在数据导入导出、分析和报告生成等领域。JXL是一个Java库,专门用于读取、写入和修改Excel文件,它为Java开发者提供了一种方便的方式来处理Excel数据,而...
### Java Excel操作:导入与导出数据库 #### 一、简介 在企业级应用中,经常需要处理大量的数据,而Excel文件作为一种常见的数据存储格式,其便捷性和易用性受到广泛认可。Java作为一门强大的编程语言,提供了多种...
在Java开发中,处理Excel数据是一项常见的任务,无论是读取大量数据进行分析,还是批量导入导出信息。这里我们关注的是两个主要的库:jxl和Apache POI,它们都是用于处理Excel文件的强大工具。 首先,让我们深入...
同时,为了确保数据的完整性和一致性,还可以使用事务来管理数据库操作。 综上所述,"JXL(Java操作Excel文件Oracle数据库)"是一个关于Java编程如何借助JXL库处理Excel文件并与Oracle数据库进行数据交换的主题。这个...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
在Java编程中,控制Excel导入导出数据库信息是一项常见的任务,尤其在数据处理、报表生成和数据分析等领域。Java Excel API(JExcelApi)是用于处理Microsoft Excel文件的库,使得程序员能够方便地读取和写入Excel...
以上就是关于“Excel数据导入导出”以及结合Oracle存储过程和JXL库进行操作的基本知识。实践中,还需要考虑性能优化、数据一致性、错误恢复等方面,以提高数据处理的效率和准确性。同时,随着技术的发展,现在还有...
在Java开发环境中,有时我们需要将数据库中的数据导出...通过与数据库连接的配合,可以方便地实现数据的导入导出,满足各种业务需求。在实际项目中,根据实际情况选择合适的工具和库,可以提高开发效率,优化用户体验。
这个过程涉及到Java编程、数据库操作以及JXL库的使用。 首先,我们需要了解JXL库。JXL是一个开源库,它提供了处理Microsoft Excel文件的能力,包括创建新的工作簿、修改现有工作簿以及读取工作簿内容。它支持多种...
这个过程在处理大量数据时非常有用,比如将数据库中的数据导出到Excel,或者从Excel文件中导入数据到数据库。 在描述中提到的“博文链接:https://xgtxxxx.iteye.com/blog/1616979”,虽然具体链接无法访问,但可以...
在实际应用中,可能需要将从Excel读取的数据导入到数据库。为了实现这一功能,首先需要建立数据库连接,然后使用SQL语句将数据插入到相应的表中。例如,使用JDBC(Java Database Connectivity)执行SQL语句: ```...
本示例"jxl导入导出excel完美运行demo"提供了一个完整的实现,使得开发者能够快速理解和应用Excel处理功能。 `jxl`库是Java中广泛使用的第三方库,它支持读取和写入Excel 97-2003格式(.xls)的文件。这个库提供了...
Java Web 数据库数据与 Excel 表格形式导入导出 Java Web 数据库数据与 Excel 表格形式导入导出是指通过 Java Web 应用程序将数据库数据导入到 Excel 表格中,并实现数据的导出。该技术主要利用了 JXL(Java Excel ...
综上所述,Excel的导入导出涉及到的IT知识点包括使用Apache POI和JExcelApi处理Excel文件的技巧,以及如何构建实用的工具类来简化这些操作。了解并掌握这些知识,对于提升数据处理和自动化能力具有重要意义。
**标题解析:**"jxl从数据库导出到excel工具包" ...以上就是关于"jxl从数据库导出到excel工具包"的相关知识点,包括jxl库的使用、与数据库操作的结合、在MVC框架下的应用,以及在实际开发中需要注意的各个层面。
本示例"EXCEL导入导出demo"聚焦于如何利用Java的一个库——jxl,来实现JSP(Java Server Pages)对Excel文件的导入与导出功能。这个功能对于Web应用程序来说极其实用,它允许用户通过浏览器上传Excel文件进行处理,...
在实际项目中,jxl库常常被用于数据导入导出、报表生成、数据分析等场景。例如,一个Web应用可能需要将用户上传的Excel文件中的数据导入到数据库,或者将数据库查询结果导出为Excel报告,这时jxl就能发挥重要作用。 ...
在SpringBoot项目中,我们经常需要处理Excel文件的导入与导出功能,这在数据分析、数据交换等场景中尤其常见。Apache POI 是一个流行的Java库,它允许开发者读写Microsoft Office格式的文件,包括Excel。下面我们将...
标题中的“自己写的JXL的导入导出,绝对可以发布!”表明这是一个关于自研的JXL库用于Excel数据的导入与导出功能。JXL是Java中一个流行的老牌库,专门处理Excel文件,支持读取、写入以及修改Excel格式的数据。...
在Java编程环境中,处理Excel数据是一项常见的任务,特别是在数据导入导出、数据分析或者报表生成等...这个"jxl读取excel的java代码小程序"就是一个很好的起点,帮助我们了解并掌握使用JXL进行Excel读取的基本步骤。