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

java代码写excel和文本文档的导入导出

    博客分类:
  • J2EE
阅读更多
例子1-----》利用jxl包来完成excel导入导出
JXL包提供了JAVA环境下操作EXCEL文件的方法,可对EXCEL文件进行读写操作。总体而言这个包的使用非常简单,因工作需要对它进行了简单的应用,现写一下个人总结。
JXL包似乎对某些版本的EXCEL文件不太兼容,网站上说它支持EXCEL95-2000。不知道是不是这个原因,在读取EXCEL XP文件时(文件中使用了“数据有效性”等格式),会发出一些警告信息,虽然不影响使用,但终究不太好看。所以下面这个例子是从一个EXCEL文件中读取数据,并将数据写入另一文件中,清除掉文件中使用的所有格式。在清除掉文件中使用的格式之后,再读取这个文件就一切正常了。 
import jxl.*;
import jxl.write.*;i
mport java.io.*; 
public class CleanExcel { 
public static void clean(String inFile, String outFile){  
//首先需要声明输入输出流与Workbook,Workbook对应Excel文件  
InputStream is = null;  
Workbook inWb = null;  
OutputStream os = null;  
WritableWorkbook outWb = null;  
try{  
 //实例化输入输出流与Workbook   
is = new FileInputStream(inFile);  
 //Workbook无法通过new关键字进行实例化,必须调用Workbook.getWorkbook(File)静态方法   
inWb = Workbook.getWorkbook(is);   
os = new FileOutputStream(outFile);   
outWb = Workbook.createWorkbook(os);   
//下面这一句是选择原文件的工作表,Sheet对应的是Excel中的Sheet   
Sheet inSheet = inWb.getSheet("Sheet1");   
//WritableSheet为要创建的文件中的工作表   
WritableSheet outSheet = outWb.createSheet("Sheet1", 0);   
//设置循环标志   
boolean flag = true;   
//循环条件   
int i = 0;      
while(flag){    
//Cell对应一个单元格,getCell方法第一个参数对应列,第二个参数对应行。    
//注意:行和列的开始坐标均为0,与JAVA中的数组一样    
Cell tmp = inSheet.getCell(0, i);    
//取得每行第一列单元格中的数据。不管单元格中的数据在EXCEL中为何种类型,读取之后都将成为String类型    
String c = tmp.getContents().trim();    
//为处理方面,EXCEL文件中最后一行的第一个单元格设置了一个break标志,读到这一行时将退出循环    
if(c.equals("break")){     
flag = false;     
break;    
}    
//我处理的EXCEL表格为8列    
for(int j = 0; j < 8; j++){    
 //取得源单元格     
Cell inCell = inSheet.getCell(j, i);     
//获取数据     
String content = inCell.getContents().trim();    
 //创建新单元格,并用数据填充     
Label labelCF=new Label(j, i,  content);    
 //将新单元格加入到新工作表中     
outSheet.addCell(labelCF);    
}   
 i++;   
}   
//写入文件   
outWb.write();   
//关闭流   
outWb.close();   
os.close();     
}catch(Exception e){   
e.printStackTrace();  
} 
}  
//测试 
public static void main(String[] args){  
try {   
String in = "old.xls";  
 String out = "new.xls";   
CleanExcel.clean(in, out);     
} catch (Exception e) {   
 e.printStackTrace();  
} 
}
}
 
-----------------------------------------------------------------------
例子2-----》利用jxl包来完成excel导入导出
import java.io.File; 
import java.io.IOException; 
import jxl.Sheet; 
import jxl.Workbook; 
import jxl.read.biff.BiffException; 
public class ExcelTest { 
public static void main(String[] adf) { 
try { 
Workbook workbook = Workbook .getWorkbook(new File( "d:\\myfile.xls")); 
Sheet sheet = workbook.getSheet(0); 
String[] tempValue = new String[sheet.getColumns()]; 
for (int i = 0; i < sheet.getRows(); i++) { 
for (int j = 0; j < sheet.getColumns(); j++) { 
String value = sheet.getCell(j, i).getContents(); 
if (value.equals( " ")) 
value = tempValue[j]; 
System.out.print(value + "\t\t\t\t\t\t\t "); 
tempValue[j] = value; 
} 
System.out.println( " "); 
} 
} catch (BiffException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 
} 
-----------------------------------------------------------------------

例子3-----》利用apache包来完成excel导入导出
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class POITest {
 private static Connection conn = null;
 private static Statement stmt = null;
 private static boolean connectDB2() {
  String url = "";
  String username = "username";
  String password = "password";
  //加载驱动程序以连接数据库
  try {
   //添加类库驱动包db2jcc.jar和db2jcc_license_cu.jar
   Class.forName("com.ibm.db2.jcc.DB2Driver");
   url = "jdbc:db2://192.168.0.1:50000/dbname";
   //添加类库驱动包db2java.jar
   //Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
   //url = "jdbc:db2:njtcdata";
   conn = DriverManager.getConnection(url, username, password);
   stmt = conn.createStatement();
  }
  //捕获加载驱动程序异常
  catch (ClassNotFoundException cnfex) {
   System.err.println("装载JDBC驱动程序失败。");
   cnfex.printStackTrace();
   return false;
  }
  //捕获连接数据库异常
  catch (SQLException sqlex) {
   System.err.println("无法连接数据库");
   sqlex.printStackTrace();
   //System.exit(1); // terminate program
   return false;
  }
  return true;
 }
 private static boolean readExcelToDB2() {
  POIFSFileSystem fs = null;
  HSSFWorkbook wb = null;
  try {
   fs = new POIFSFileSystem(new FileInputStream("c:\\test.xls"));
   wb = new HSSFWorkbook(fs);
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
  HSSFSheet sheet = wb.getSheetAt(0);
  HSSFRow row = null;
  HSSFCell cell = null;
  String name = "";
  int id = 0;
  int rowNum, cellNum;
  int i;
  rowNum = sheet.getLastRowNum();
  for (i = 0; i <= rowNum; i++) {
   row = sheet.getRow(i);
   //cellNum = row.getLastCellNum();
   cell = row.getCell((short) 0);
   name = cell.getStringCellValue();
   cell = row.getCell((short) 1);
   id = (int) cell.getNumericCellValue();
   String sql = "insert into TEST(ID, NAME) values(" + id + ",'" + name + "')";
   try {
    stmt.executeUpdate(sql);
   } catch (SQLException e1) {
    e1.printStackTrace();
    return false;
   }
  }
  return true;
 }
 public static void main(String[] args) {
  if (connectDB2()==true){
   if (readExcelToDB2()==true)
    System.out.println("数据导入成功");
   else
    System.out.println("数据导入失败");
  }
  else{
   System.out.println("数据库连接失败");
  }
 }
}
-----------------------------------------------------------------------
例子4-----》文本文件导入例子
1、将数据按一定规律录入到一个文本文件,每一行代表一条记录。
下面是数据库建表SQL:
CREATE TABLE t_FltPsgInfo  -- 航班乘客信息
(
    FltNum  VARCHAR(10), -- 航班号
    FltLine  VARCHAR(30),  -- 航线
    FltDate  VARCHAR(10),  -- 日期
    PsgName  VARCHAR(30),  -- 姓名
    PsgType  VARCHAR(30), -- 乘客类型,数字表示,目前是1-13
    PsgSex  VARCHAR(1),  -- 0 男  1 女
    PsgCab  VARCHAR(1),  -- 几等舱, F/Y  舱位按字母顺序排列
    PsgSeatNo  VARCHAR(5),-- 座位号 2A,22F,根据这个得到一排有多少个座位,共有多少排座位信息
    PsgInfo  VARCHAR(2048) -- 详细信息,可能很长
)
我们将向表t_FltPsgInfo中插入1000条记录。
新建一个文本文件,每一行代表一条记录,如:
HU7804,广州-北京,2007-07-18,谢丽珍,3,1,C,3A,服务保障信息:未用餐随行人员…
其中以“,”作为字段的分隔标志,我们在解析这个文本文件时将根据“,”来拆分字段值。
按照上面的格式,将要插入的数据输入到文本文件中,注意,是每一行代表一条记录,或者你已有从数据库导出的文本文件,那你就只需找到文件的规律,稍作调整就行了。
2、编写Java源码
1》数据库操作类InsertDB.java
package test; 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; 
public class Ins 
ertDB {
    private static final String user = "sa";
    private static final String pwd = "sa";
    private static final String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=hhfly";
    private static final String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
    public static Connection getCon() {
        Connection con = null;
        try {
            Class.forName(driver).newInstance();
            con = DriverManager.getConnection(url, user, pwd);
            if (con != null) {
                System.out.println("你已连接到数据库:"
+con.getCatalog());
            }
        } catch (Exception e) {
            System.out.println("连接数据库失败!");
            e.printStackTrace();
        }
        return con;
    } 
    public boolean insertDB(String FltNum, String FltLine, String FltDate,  String PsgName, String PsgType, String PsgSex, String PsgCab,String PsgSeatNo, String PsgInfo) {
        Connection con = null;
        Statement stm = null;
        boolean flag = false;
        String sql = "insert into t_FltPsgInfo values('" + FltNum + "','" + FltLine + "','" + FltDate + "','" + PsgName + "','" + PsgType
 + "','" + PsgSex + "','" + PsgCab + "','" + PsgSeatNo + "','"+ PsgInfo + "')";
        try {
            con = getCon();
            stm = con.createStatement();
            int i = stm.executeUpdate(sql);
            if (i > 0) {
                flag = true;
                System.out.println(flag + "插入数据成功!");
            }
        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        } finally {
            close(null, stm, con);
        }
        return flag;
    }
    //关闭相关连接
    public void close(ResultSet rs, Statement stm, Connection con) {
        if (rs != null)
            try {
                rs.close();
            } catch (Exception e) {
ze=3>                e.printStackTrace();
            }
        if (stm != null)
            try {
                stm.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        if (con != null)
            try {
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    }
}
2》数据采集类DataGather.java
package test; 
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException; 
public class DataGather {
    private static final String path = "src/resource/test";
    public static final String openFileStyle = "r";
    public static final String fieldLimitChar = ",";
    public static final int fieldAllCount = 9;
    private int count;
    private String FltNum;
    private String FltLine;
    private String FltDate;
    private String PsgName;
    private String PsgType;
    private String PsgSex;
    private String PsgCab;
    private String PsgSeatNo;
    private String PsgInfo;
    /*
     * 功能:解析文本文件
     */
    public void loadFile() {
        try {
            RandomAccessFile raf = new RandomAccessFile(path,openFileStyle);
            String line_record = raf.readLine();
            while (line_record != null) {
                // 解析每一条记录
                parseRecord(line_record);
                line_record = raf.readLine();
            }
            System.out.println("共有合法的记录" + count + "条");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
/** 功能:具体解析每一条记录,这里可以增加很多对记录的解析判断条件,如是否为字母、
* 数字、email等。 

e=3> */
    private void parseRecord(String line_record) throws Exception {
     //拆分记录
        String[] fields = line_record.split(fieldLimitChar);
        if (fields.length == fieldAllCount) {
            FltNum = tranStr(fields[0]);
            FltLine = tranStr(fields[1]);
            FltDate = tranStr(fields[2]);
            PsgName = tranStr(fields[3]);
            PsgType = tranStr(fields[4]);
            PsgSex = tranStr(fields[5]);
            PsgCab = tranStr(fields[6]);
            PsgSeatNo = tranStr(fields[7]);
            PsgInfo = tranStr(fields[8]);
            System.out.println(FltNum + " " + FltLine + " " + FltDate + " " + PsgName + " " + PsgType + " " + PsgSex + " " + PsgCab + " " + PsgSeatNo + " " + PsgInfo);
            InsertDB db = new InsertDB();
            db.insertDB(FltNum, FltLine, FltDate, PsgName, PsgType, PsgSex, PsgCab, PsgSeatNo, PsgInfo);
            count++;
        }
    }
   private String tranStr(String oldstr) {
        String newstr = "";
        try {
            newstr = new String(oldstr.getBytes("ISO-8859-1"), "GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return newstr;
    }
}
3》测试类Test.java
package test;
public class Test {
    public static void main(String[] args) {
        try {
            DataGather gather = new DataGather ();
            gather.loadFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

分享到:
评论

相关推荐

    Java对Excel数据导入导出工具类(含Exel单元格样式设置)

    改资源是用Java语言和jxl插件开发的一款对Excel进行读写操作的工具类,可读取指定列的Excel数据到程序中,也可以将DB查询的结果集写入到Excel文档中,导出的单元格样式可以设置,含开发包

    POI导入导出EXCEL文件.(struts 1.x and struts2.x).doc

    web中使用POI导入导出EXCEL文件的例子 struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet....

    导出Excel技术分享

    导出Excel是指将其他数据源(如数据库、网页、文本文件等)中的数据以Excel的格式进行输出。这种技术可以帮助我们快速、准确地将大量数据导入到Excel中进行进一步处理和分析。 接下来,我将分享导出Excel技术的优势...

    npoi:在ASP.NET Core 2.0 Razor页面中导入和导出Excel

    在ASP.NET Core 2.0 Razor页面中导入和导出Excel NPOI是一个免费工具,支持xls,xlsx和docx扩展。 该项目是上POI Java项目的.NET版本。 POI是一个开源项目,可以帮助您读取/写入XLS,DOC,PPT文件。 它涵盖了Excel...

    svn提交日志导出工具v4.5

    一款java swing界面导出svn日志的工具,采用svnkit开发,较早期版本添加支持历史svn url备份,添加按提交人过滤,添加导出文件的功能,详情见rar包中的readme文本文档

    导入Excel数据小工具(java Swing开发)

    程序功能:选择含有数据的Excel文件,导出对于的SQL插入语句文本。操作说明在其中。

    easypoi功能文档,介绍easypoi各种功能使用

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板EasyPoi的主要特点1.设计精巧,使用简单2.接口丰富,...

    Android国际化文本资源文件处理

    1,读取项目中的所有strings.xml文件并导出为excel得到excel1。 2,可以将同样结构的excel2中的内容同步到excel1。 3,将所有excel1中的内容以自行配置(StringsToExcel.java)的文件夹(如"values-ko-rKR", "values-ja...

    java版通讯录管理系统

    文件、xml 文件、vCard 文件或其他自定义格式文件,但不能是 Excel 文件)。不 使用数据库。 2. 通讯录中每个项目包括: ( 1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、像片。 ( 2)...

    Java通用后台管理系统源码 JAVATYHTXT.rar

    5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。 9、报表统计。也可以嵌入其他...

    JAVA后台管理系统源码

    5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。 9、报表统计。也可以嵌入其他...

    Java智慧云智能教育平台源码 前后端分离

    试题管理:支持excel模板导入试题、支持使用富文本编辑试题及插入数学公式,同时还支持上传试题教学视频 试卷管理:支持将试卷导出成word文档、html页面进行打印、支持富文本图片导出到word 试卷批改功能:...

    java课程设计学生同学录管理系统

    3.支持通讯录以Excel文件格式导入导出操作。 4.界面支持全键盘操作,即不用鼠标也能完成该系统的所有功能。 5.查询统计功能,能够按照籍贯、专业等条件统计分析,并且以图表的方式展现。 6.界面及相应功能可以...

    基于模板的代码生成器LKGenerator1.1.0_x86

    (2)配置生成代码的固定文件路径,这个配置中的文件将原样拷贝到最终生成的代码中,主要适用于非文本文件如*.jpg *.jar等文件。 (3)配置引用jar路径,这个jar路径的配置是需要加载的class需要引用的jar. (4)...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)MyEclipse版本

    5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。 9、报表统计。也可以嵌入其他...

    chimm.excel:chimm.excel是一种能够简单操作的excel的程序,该程序提供了如:填充excel模板数据,动态更改表格样式,转换excel等功能,减少了我们对excel的操作困难

    该程序是一个用的Java写的Excel的生成工具,基于模板操作,简单,快捷,易上手。1.2特性数据组装方式大有不同和网上部分开源软件的区别是,这个程序是基于excel模板驱动的,需要在模版里填写变量名,而不必在程序中...

    java项目之hrm人事管理项目(java毕业设计)

    2、后台:Struts2、动态代理、Mybatis框架、log4J日志框架、jstl 、jstl自定义分页标签、代码机器人、Dwr、POI(实现Excel文件的导入导出)等 3、数据库:Mysql 4、服务器:Tomcat 项目中涉及的功能: 1、项目以及...

Global site tag (gtag.js) - Google Analytics