`
JavaCrazyer
  • 浏览: 3008740 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Java实现将Excel批量转换成txt

阅读更多

有博友发信说要Excel转txt不成,这是因为没有准确的设置,读取Excel的方式可以很多,但要实现转txt就得精确设置,按行读取,贴下代码如下

public class ExcelReader {   
	 
	    	 private static File [] getFiles(String path){   
	    	        File file = new File(path);       
	    	        // get the folder list       
	    	        File[] array = file.listFiles();       
	    	        return array;   
	    	    }   
	    	 public static void main(String[] args) throws IOException {   
	    	        // TODO code application logic here   
	    	        File[] files=getFiles("D:\\data\\");   
	    	        for(int i=0;i<files.length;i++){   
	    	          String filePath=files[i].getPath();   
	    	          String fileName=files[i].getName();   
	    	          String newFileName=fileName.substring(0, fileName.indexOf('.'));   
	    	        String s="";   
	    	         try{   
	    	            ExcelReader er=new ExcelReader(filePath);     	    	  
	    	            String line=er.readLine();   	    	             	    	                    
	    	            while(line != null){   	    	  	    	                  
	    	                s=s+line+"\r\n";   
	    	                line=er.readLine();   	    	                  	    	                  	    	                                  
	    	            }   
	    	  
	    	            er.close();   
	    	  
	    	        }catch(Exception e){   
	    	  
	    	            e.printStackTrace();   
	    	  
	    	        }   
	    	        //System.out.println(s);   
	    	        File newFile=new File("D:\\backupfile\\"+newFileName+".txt");   
	    	        FileOutputStream fops=new FileOutputStream(newFile);   
	    	        fops.write(s.getBytes());   	  	    	  
	    	    }   
	    	    }   

	   // 创建文件输入流   	  
	   private BufferedReader reader = null;   	  
	   // 文件类型   	  
	   private String filetype;   	  
	   // 文件二进制输入流     
	   private InputStream is = null;   	  
	   // 当前的Sheet   	  
       private int currSheet;     
	   // 当前位置   	  
	   private int currPosition;   	  
	   // Sheet数量   	  
	   private int numOfSheets;   	  
	   // HSSFWorkbook   	  
	   HSSFWorkbook workbook = null;   	  
	   // 设置Cell之间以空格分割   	  
	   private static String EXCEL_LINE_DELIMITER = " ";   	  
	   // 设置最大列数   
	  	   private static int MAX_EXCEL_COLUMNS = 64;     
	   // 构造函数创建一个ExcelReader    
	   public ExcelReader(String inputfile) throws IOException, Exception {   	  
	      // 判断参数是否为空或没有意义  	  
	      if (inputfile == null || inputfile.trim().equals("")) {   	  
	         throw new IOException("no input file specified");   	  
	      }   	  
	      // 取得文件名的后缀名赋值给filetype   	  
	      this.filetype = inputfile.substring(inputfile.lastIndexOf(".") + 1);   	  
	      // 设置开始行为0   	  
	      currPosition = 0;   	  
	      // 设置当前位置为0   	  
	      currSheet = 0;   	  
	      // 创建文件输入流   	  
	      is = new FileInputStream(inputfile);   	  
	      // 判断文件格式   	  	  
	 if (filetype.equalsIgnoreCase("xls")) {   	  
	         // 如果是Excel文件则创建HSSFWorkbook读取   	  
	         workbook = new HSSFWorkbook(is);   	  
	         // 设置Sheet数   	  
	         numOfSheets = workbook.getNumberOfSheets();   	  
	      }   	  
	else {   	  
	         throw new Exception("File Type Not Supported");   	  
	      }   	  
	   }   	  
	   // 函数readLine读取文件的一行   	  
	   public String readLine() throws IOException {   	  
	      // 如果是XLS文件则通过POI提供的API读取文件   	  
	       if (filetype.equalsIgnoreCase("xls")) {   	  
	         // 根据currSheet值获得当前的sheet   	  
	         HSSFSheet sheet = workbook.getSheetAt(currSheet);   
	  	         // 判断当前行是否到但前Sheet的结尾   
	        // System.out.println(sheet.getLastRowNum());   
	  	         if (currPosition > sheet.getLastRowNum()) {   	  
	            // 当前行位置清零   
	             currPosition = 0;   	  
	            // 判断是否还有Sheet   
	  	            if (currSheet != numOfSheets - 1) {   	  	                
	               currSheet++;   	                 
	                // 得到下一张Sheet   
	               sheet = workbook.getSheetAt(currSheet);   	  	                 	                	  
	            }else{   
	                 return null;   
	            }   	  	          	  
	         }   	  
	         // 获取当前行数   	  
	         int row = currPosition;   	  
	         currPosition++;   	  
	         // 读取当前行数据   	  
	         return getLine(sheet, row);   	  
	      }   	  
	      return null;   	  
	   }   	  
	   // 函数getLine返回Sheet的一行数据   
	  
	   private String getLine(HSSFSheet sheet, int row) {   
	  
	      // 根据行数取得Sheet的一行   
	  
	      HSSFRow rowline = sheet.getRow(row);   
	  
	      // 创建字符创缓冲区   
	  
	      StringBuffer buffer = new StringBuffer();   
	  
	      // 获取当前行的列数   
	      int filledColumns;   
	      try{   
	         filledColumns = rowline.getLastCellNum();   
	      }catch(NullPointerException e){   
	          return "";   
	      }     	       
	      HSSFCell cell = null;     
	      // 循环遍历所有列     
	      for (int i = 0; i < filledColumns; i++) {     
	         // 取得当前Cell     
	         cell = rowline.getCell((short) i);     
	         String cellvalue = null;     
	         if (cell != null) {     
	            // 判断当前Cell的Type   	  
	            switch (cell.getCellType()) {   	  
            // 如果当前Cell的Type为NUMERIC     
	            case HSSFCell.CELL_TYPE_NUMERIC: {     
               // 判断当前的cell是否为Date    
	               if (HSSFDateUtil.isCellDateFormatted(cell)) {   	  
	                  // 如果是Date类型则,取得该Cell的Date值     
	                  Date date = cell.getDateCellValue();     
	                  // 把Date转换成本地格式的字符串     
	                  cellvalue = cell.getDateCellValue().toString();     
	               }     
	               // 如果是纯数字     
	               else {   	  
	                  // 取得当前Cell的数值   	  
	                  Integer num = new Integer((int) cell     
                        .getNumericCellValue());   	  
	                  cellvalue = String.valueOf(num);     
	               }     
	               break;     
	            }     
	            // 如果当前Cell的Type为STRIN     
	            case HSSFCell.CELL_TYPE_STRING:   	  
	               // 取得当前的Cell字符串   	  
	               cellvalue = cell.getRichStringCellValue().toString().replaceAll("'", "''");   	  
	               break;     
	            // 默认的Cell值     
	            default:   	  
	               cellvalue = "";   	  
	            }   	  
	         } else {   	  
	            cellvalue = "";   	  
	         }   	  
	         // 在每个字段之间插入分割符   	  
	         buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);   	  
	      }   	  
	      // 以字符串返回该行的数据   	  
	      return buffer.toString();     
	   }   	  
	   // close函数执行流的关闭操作     
	   public void close() {   	  
		   // 如果is不为空,则关闭InputSteam文件输入流   	  
	      if (is != null) {   	  
	         try {   	  
	        	 is.close();   	  
	         } catch (IOException e) {   	  
	            is = null;   	  
	         }   	  
	      }   	  
	      // 如果reader不为空则关闭BufferedReader文件输入流     
	      if (reader != null) {     
	         try {     
	            reader.close();   	  
	         } catch (IOException e) {   	  
	            reader = null;   	  
	         }   	  
	      }   	  
	   }   	  
	}  

  

3
2
分享到:
评论
3 楼 xxw152413 2011-04-28  
楼主,这个只能转换第一级目录下的xls啊,其他更深的目录就转换不了了啊,求解答啊
2 楼 JavaCrazyer 2010-08-18  
nashuoliqu 写道
楼主,首先感谢你的分享,我看了下代码,里面有两个类HSSFWorkbook和HSSFSheet没有定义,麻烦你提供下相应jar包。我的邮箱是wenli30920@sina.com,非常感谢。

这都是POI的资源JAR包,你可以下载个POI,先学习什么是POI吧
1 楼 nashuoliqu 2010-08-18  
楼主,首先感谢你的分享,我看了下代码,里面有两个类HSSFWorkbook和HSSFSheet没有定义,麻烦你提供下相应jar包。我的邮箱是wenli30920@sina.com,非常感谢。

相关推荐

    java实现批量excel转csv

    java实现批量excel转csv,其中csv文件为utf-8格式,支持直接导入数据库。

    Java 实现从Excel批量导入数据到MySQL

    本文将详细介绍如何利用Java实现从Excel批量导入数据到MySQL数据库。 首先,我们需要了解两个关键的库:Apache POI 和 JDBC。Apache POI 是一个开源的Java库,用于读写Microsoft Office格式的文件,包括Excel。JDBC...

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,Excel批量导入,excel转实体对象,excel读取

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的...基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel数据转换成任意实体任意字段

    Java中Excel转图片工具包(纯java)

    "Java中Excel转图片工具包(纯java)"就是这样一个解决方案,它实现了将Excel文件通过PDF中间格式转化为图片的功能。 首先,让我们了解一下这个工具包的工作原理。Excel文件本身并不直接支持转换为图片格式,但可以...

    Java 批量 Excel转txt

    6. **批处理**:为了实现批量转换,我们需要一个文件列表,遍历列表中的每一个Excel文件,重复上述读取和转换的过程。可以使用`java.io.File`类的`listFiles()`方法获取指定目录下的所有Excel文件。 7. **异常处理*...

    java实现excel转换成html

    标题"java实现excel转换成html"指出,我们将使用Java编程语言,通过Jacob库来实现Excel文件到HTML的转换。Jacob全称为JavaCOM Bridge,它是一个开源项目,提供了Java对COM组件的访问,使我们能够利用Microsoft ...

    java实现excel转换 pdf文件

    在Java编程环境中,将Excel文件转换为PDF...通过熟练掌握Aspose.Cells的API,你可以实现更复杂的转换需求,例如批量转换、自定义样式等。记得在实际应用中,根据具体需求和项目许可条款,选择合适的方式来使用这个库。

    csv格式文件批量转换成xls excel文件

    将需要转换的csv文件放到与xls文件同目录下,运行csv2xls宏即可将csv批量转换为xls文件,兼容excel2007 wps2013(需安装vba支持)。文件列表csv2xlsConvert.xls,已编写xls文件,csv2xls.txt宏代码,用法.txt。

    java实现Excel数据导入到数据库

    本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...

    java 批量导入excel

    在提供的信息中,我们关注到了四个重要的jar包,它们是实现Java批量导入Excel功能的核心组件。 1. **poi-3.9-20121203.jar**: 这是Apache POI项目的主要jar包,它是Java社区中广泛使用的用于读写Microsoft Office...

    java批量读取Excel表格

    Java批量读取Excel表格是一种常见的数据处理需求,特别是在大数据导入、报表生成或数据分析场景中。在Java中,我们可以借助Apache POI库来实现这一功能。Apache POI是一个强大的开源库,它允许Java开发者读写...

    Java实现json数据导入到Excel的方法

    本Java类实现了将标准的json字符串转换成map,并将数据解析到Excel的方法,本方法简单实用,可以批量导出数据到Excel文档中

    java实现word,ppt,excel等转换

    在Java编程环境中,实现Word、PPT和Excel等文件格式之间的转换是一项常见的需求,尤其是在企业级应用中。这里的关键技术是使用开源项目OpenOffice提供的API,它提供了与Microsoft Office兼容的文档处理能力。...

    java使用OpenOffice实现的Excel转pfd

    7. **性能优化**:如果需要批量转换大量文件,可以考虑使用多线程技术,或者利用OpenOffice支持的批处理模式,以提高转换效率。 8. **兼容性问题**:虽然OpenOffice对大多数Excel文件格式有良好的支持,但可能会...

    struts1 poi Excel批量导入支持xls和xlsx-源码java

    在本项目中,"struts1 poi Excel批量导入支持xls和xlsx"是一个基于Struts1和POI实现的功能,它允许用户批量导入Excel数据,无论是旧版的.xls格式还是较新的.xlsx格式。 首先,我们需要了解Apache POI的基本用法。...

    java实现excel导入数据库

    在Java编程中,将Excel数据导入到MySQL数据库是一项常见的任务,尤其在数据处理和分析的场景下。要完成这个过程,我们需要使用特定的库来读取Excel文件,并使用JDBC(Java Database Connectivity)来与MySQL数据库...

    Java通过POI读取Excel遍历数据,批量生成word文档

    本教程将重点讲解如何使用Apache POI库来读取Excel数据,并基于这些数据批量生成Word文档。Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 ...

    java 批量导入excel数据

    在Java平台上,批量导入Excel数据是一项常见的任务,特别是在数据分析、数据迁移或系统集成等场景下。这个过程涉及读取Excel文件、处理数据并将其有效地存入数据库。以下是一些关键的知识点,涵盖了从读取Excel到...

    excel文件中批量生成insert语句

    本文将详细讲解如何在Excel文件中批量生成INSERT语句,以便快速地将数据导入到数据库中。 首先,我们需要了解INSERT语句的基本结构。INSERT语句用于向数据库表中插入新的记录,其基本语法如下: ```sql INSERT ...

    Java实现excel文档数据导入数据库、导出excel

    本文将详细介绍如何使用Java实现Excel文档数据的导入到数据库以及从数据库导出到Excel。 一、导入Excel数据到数据库 1. **库的选择**: 为了在Java中处理Excel文件,我们需要依赖第三方库,如Apache POI。Apache ...

Global site tag (gtag.js) - Google Analytics