首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

jxl poi 对xls 的读写,范例较量

2012-10-15 
jxl poi 对xls 的读写,实例较量????????? 最近公司要扫描全部xls 文件,xls 是一个单,并且将xls的单数据 全

jxl poi 对xls 的读写,实例较量

????????? 最近公司要扫描全部xls 文件,xls 是一个单,并且将xls的单数据 全部写入一个xls 中! 心里一热,采用jxl 和poi 两种方式进行读取,其实就是解决xls 2003 和xls 2007 版本问题,再次晒出代码,希望与更多人交流,QQ:962589149

?


public class XlsManger {
? /**
?? * @author 樱花无罪
?? * @version 2012-09-18
?? * @see xls 操作类
?? */
?public XlsManger(){
??this.allData=new ArrayList();
?}
?private static List allData=new ArrayList();//全家记录条数
?private static boolean? isin=true;//数量是否in
?private static boolean? isin2=true;
?public static void main(String args[]) throws Exception
?{
???
??allData=new ArrayList();
??XlsManger xls=new XlsManger();
??//xls.read2007XSSF(new File("C:\\test"),"16888.xlsx");
??//xls.read2007XSSF(new File("C:\\test"),"16888.xlsx");
???? //xls.read2007HSSF(new File("C:\\test"),"Book1.xls");
??//System.out.println(xls.getTitle(new File("C:\\test\\configtxt.txt")));
??
??//xls.readXlsJXL(File dir,String filename) throws Exception
??
??String title=xls.getTitle(new File("C:\\test\\configtxt.txt"));//所有列标题
??System.out.println(title);
??String[] titledata=title.split("#");
??String outpath="C:\\test\\workbook.xls";
??List alldata=xls.readXls(new File("C:\\test"),0,titledata[2].split(","));//所有数据
??System.out.println(alldata.size()+"==========所有记录条数===========");
??if(xls.readIntoXls(titledata[1].split(","), alldata, outpath))
??{
???System.out.println("合并成功");
??}else
??{
???System.out.println("合并失败");
??}
??
?}
?public boolean beginXls()
?{
??try
??{
???XlsManger xls=new XlsManger();
???String title=xls.getTitle(new File("C:\\test\\configtxt.txt"));//所有列标题
???System.out.println(title);
???String[] titledata=title.split("#");
???String outpath="C:\\test\\workbook.xls";
???List alldata=xls.readXls(new File("C:\\test"),0,titledata[2].split(","));//所有数据
???System.out.println(alldata.size()+"======所有记录条数===========");
???if(xls.readIntoXls(titledata[1].split(","), alldata, outpath))
???{
????return true;
???}else
???{
????return false;
???}
???
??}catch(Exception ex)
??{
???ex.printStackTrace();
??}
??return false;
?}
?//初始化表头
?public String getTitle(File file)
?{
??String title="111";
??BufferedReader reader = null;
??if(file.exists())
??{
???try {
???????????? System.out.println("以行为单位读取文件内容,一次读一整行:");
???????????? reader = new BufferedReader(new FileReader(file));
???????????? String tempString = null;
???????????? int line = 1;
???????????? // 一次读入一行,直到读入null为文件结束
???????????? while ((tempString = reader.readLine()) != null) {
???????????? ?title=title+"#"+tempString;
???????????????? line++;
???????????? }
???????????? reader.close();
???????? } catch (IOException e) {
???????????? e.printStackTrace();
???????? } finally {
???????????? if (reader != null) {
???????????????? try {
???????????????????? reader.close();
???????????????? } catch (IOException e1) {
???????????????? }
???????????? }
???????? }
??}else
??{
???title="表头配置无法获取";
??}
??return title;
?}
?//初始2007阅读器
?public static List read2007XSSF(File dir,String filename) throws Exception
?{
??List datalist=new ArrayList();
??if(dir.exists())//文件存在
??{
???XSSFWorkbook xwb = null;?
???try {?
??????????????? xwb = new XSSFWorkbook(dir.getPath() +"\" + filename);
??????????????? XSSFFormulaEvaluator evaluator? = new XSSFFormulaEvaluator(xwb);
??????????????? //获取xwb 文件工作表个数
??????????????? int sheetcount=xwb.getNumberOfSheets();
??????????????? //System.out.println("一共有"+sheetcount+"表");
??????????????? // 读取第一章表格内容???
??????????????? StringBuffer rowStr=null;
??????????????? for(int s=0;s<sheetcount;s++)
??????????????? {
??????????????? ?XSSFSheet sheet = xwb.getSheetAt(s);
??????????????? ?//获取行数
??????????????? ?XSSFRow row=null;
??????????????? ?XSSFCell cell=null;
??????????????? ?rowStr=new StringBuffer();//行容器
??????????? ??rowStr.append("文件名,");
??????????? ??rowStr.append(dir.getPath() +"\" + filename+",");
??????????????? ? for (int i = sheet.getFirstRowNum()+1; i < sheet.getPhysicalNumberOfRows(); i++) {????
??? ????????????????? row = sheet.getRow(i);
??? ?????????????????
??? ????????????????? if(row!=null){//行不为空
??? ????????????????? for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {
??? ???????????????? ?? cell=row.getCell(j);
??? ???????????????? ?? CellValue cellValue = evaluator.evaluate(cell);
??? ???????????????? ?? String restr=formart(cell,cellValue);
???????????????? ??? if(restr!=null)
???????????????? ??? {
???????????????? ???? if(restr.equals("排版尺寸")&&rowStr.indexOf("排版尺寸")!=-1)
???????????????? ???? {
???????????????? ?????
???????????????? ???? }else if(restr.equals("数量"))
???????????????? ???? {
???????????????? ????? if(isin)
???????????????? ????? {
???????????????? ?????? rowStr.append(restr+",");
???????????????? ?????? isin=false;
???????????????? ????? }
???????????????? ???? } else if(restr.equals("裁"))
???????????????? ???? {
???????????????? ????? if(isin2)
???????????????? ????? {
???????????????? ?????? rowStr.append(restr+",");
???????????????? ?????? isin2=false;
???????????????? ????? }
???????????????? ???? }else
???????????????? ????
???????????????? ???? {
???????????????? ?????? //System.out.println(formartHSSF(cell,cellValue)+":"+cellValue.getNumberValue());
??????????????????????????????????? rowStr.append(restr+",");
???????????????? ???? }
???????????????? ??? }?
??? ????????????????? ?}
??? ????????????????? }
??????????????? ? }
????????????????? // 每个表为单位
??????????????? ? //System.out.println("第"+s+"表"+rowStr);
????????????????? if(rowStr!=null&&rowStr.toString().trim().length()!=0)
????????????????? {
???????????????? ? if(rowStr.toString().toLowerCase().indexOf("ltd")!=-1)
???????????????? ? {
???????????????? ??
???????????????? ? }else
???????????????? ? {
???????????????? ??// System.out.println(rowStr+"888888888888888888888888");
???????????????? ?? datalist.add(rowStr);//将文件的所有记录保存到list
???????????????? ? }
????????????????? }
?????????????????
?????????????????
??????????????? ?
??????????????? }
??????????? } catch (IOException e) {
??????????????? e.printStackTrace();?
??????????? }?????
??}
??//System.out.println("文件"+dir+"获取的记录条数"+datalist.size());
??return datalist;
?}
?//初始2007列格式问题
?public? static String formart(XSSFCell cell,CellValue cellValue)
?{
??switch (cell.getCellType()) {??
??????? case XSSFCell.CELL_TYPE_NUMERIC: // 数字??
??????????? return String.valueOf(cell.getNumericCellValue());?
??????? case XSSFCell.CELL_TYPE_STRING: // 字符串??
??????????? return cell.getStringCellValue() ;
??????? case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean??
??????????? return String.valueOf(cell.getBooleanCellValue());
??????? case XSSFCell.CELL_TYPE_FORMULA: // 公式???
??????? ?? return String.valueOf(cellValue.getNumberValue());
??case XSSFCell.CELL_TYPE_BLANK: // 空值???
??????????? break;??
??????? case XSSFCell.CELL_TYPE_ERROR: // 故障???
??????????? break;??
??????? default:?
??????????? return cell.getStringCellValue();??
??????? }??
??return null;
?}
?//初始2007列格式问题
?public? static String formartHSSF(HSSFCell cell,CellValue cellValue)
?{
??switch (cell.getCellType()) {??
??????? case HSSFCell.CELL_TYPE_NUMERIC: // 数字??
??????????? return String.valueOf(cell.getNumericCellValue());?
??????? case HSSFCell.CELL_TYPE_STRING: // 字符串??
??????????? return cell.getStringCellValue() ;
??????? case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean??
??????????? return String.valueOf(cell.getBooleanCellValue());
??????? case HSSFCell.CELL_TYPE_FORMULA: // 公式???
??????????? return String.valueOf(cellValue.getNumberValue());
??case HSSFCell.CELL_TYPE_BLANK: // 空值???
??????????? break;??
??????? case HSSFCell.CELL_TYPE_ERROR: // 故障???
??????????? break;??
??????? default:?
??????????? return cell.getStringCellValue();??
??????? }??
??return null;
?}
?//初始化2007 读写方式二
?public static List read2007HSSF(File dir,String filename) throws Exception
?{
??List<StringBuffer> datalist=new ArrayList();
??if(dir.exists())//文件存在
??{
???HSSFWorkbook xwb = null;?
???try {?
????
??????????????? xwb = new HSSFWorkbook(new FileInputStream(new File(dir.getPath() +"\" + filename)));
??????????????? HSSFFormulaEvaluator evaluator? = new HSSFFormulaEvaluator(xwb);
??????????????? //获取xwb 文件工作表个数
??????????????? int sheetcount=xwb.getNumberOfSheets();
??????????????? //System.out.println("一共有"+sheetcount+"表");
??????????????? // 读取第一章表格内容???
??????????????? StringBuffer rowStr=null;
??????????????? for(int s=0;s<sheetcount;s++)
??????????????? {
??????????????? ? rowStr=new StringBuffer();//行容器
??????????????? ? rowStr.append("文件名,");
??????????? ?? rowStr.append(dir.getPath() +"\" + filename+",");
??????????????? ?HSSFSheet sheet = xwb.getSheetAt(s);
??????????????? ?//获取行数
??????????????? ?HSSFRow row=null;
??????????????? ?HSSFCell cell=null;
????????????????? isin=true;
????????????????? isin2=true;
??????????????? ? for (int i = sheet.getFirstRowNum()+1; i < sheet.getPhysicalNumberOfRows(); i++) {????
??? ????????????????? row = sheet.getRow(i);
??? ????????????????? if(row!=null){//行不为空
??? ????????????????? for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {
??? ???????????????? ?? cell=row.getCell(j);
??? ???????????????? ?? if(cell!=null)
??? ???????????????? ?? {
??? ???????????????? ??? CellValue cellValue = evaluator.evaluate(cell);
??? ???????????????? ??? String restr=formartHSSF(cell,cellValue);
??? ???????????????? ??? if(restr!=null)
??? ???????????????? ??? {
??? ???????????????? ???? if(restr.equals("排版尺寸")&&rowStr.indexOf("排版尺寸")!=-1)
??? ???????????????? ???? {
??? ???????????????? ?????
??? ???????????????? ???? }else if(restr.equals("数量"))
??? ???????????????? ???? {
??? ???????????????? ????? if(isin)
??? ???????????????? ????? {
??? ???????????????? ?????? rowStr.append(restr+",");
??? ???????????????? ?????? isin=false;
??? ???????????????? ????? }
??? ???????????????? ???? } else if(restr.equals("裁"))
??? ???????????????? ???? {
??? ???????????????? ????? if(isin2)
??? ???????????????? ????? {
??? ???????????????? ?????? rowStr.append(restr+",");
??? ???????????????? ?????? isin2=false;
??? ???????????????? ????? }
??? ???????????????? ???? }else
??? ???????????????? ????
??? ???????????????? ???? {
??? ???????????????? ?????? //System.out.println(formartHSSF(cell,cellValue)+":"+cellValue.getNumberValue());
??????????????????????????????????????? rowStr.append(restr+",");
??? ???????????????? ???? }
??? ???????????????? ??? }?
??? ???????????????? ?? }
??? ????????????????? ?}
??? ????????????????? }
??????????????? ? }
??????????????? ? // 每个表为单位
????????????????? //System.out.println("第"+s+"表"+rowStr);
????????????????? if(rowStr!=null&&rowStr.toString().trim().length()!=0)
????????????????? {
???????????????? ? if(rowStr.toString().toLowerCase().indexOf("ltd")!=-1)
???????????????? ? {
???????????????? ??
???????????????? ? }else
???????????????? ? {
???????????????? ??
???????????????? ?? //System.out.println(rowStr);
???????????????? ?? datalist.add(rowStr);//将文件的所有记录保存到list
???????????????? ? }
????????????????? }
??????????????? }
??????????? } catch (IOException e) {
??????????????? e.printStackTrace();?
??????????? }?????
??}
??return datalist;
?}
?/**
? * 开始读取
? * @param di 文件目录
? * @param level 文件记录数
? * @return list
? * @throws Exception
? */
?public static boolean isExists(String filename,String[] exifile)
?{
??for(int i=0;i<exifile.length;i++)
??{
???if(filename.toLowerCase().indexOf(exifile[i])!=-1)
???{
????return true;
???}
??}
??return false;
?}
?public List readXls(File dir,int level,String[] exifile) throws Exception
?{
??
??File [] f = dir.listFiles();//获取目录下文件
??List DATxls=new ArrayList();
??for (int x = 0; x < f.length; x++)
???? {
?? System.out.println("扫描文件...."+dir.getPath()+"\"+f[x].getName());
?? try{
?????? if (f[x].isDirectory()){//如果是目录
????? ? readXls(f[x], level,exifile);
?????? }else if(isExists(f[x].getName(),exifile))//含税G类文件
?????? {
????? ?
?????? }
?????? else if(f[x].getName().toLowerCase().endsWith(".xlsx")){//2007 读取方式一
????? ? DATxls=new ArrayList();
????? ? DATxls=this.read2007XSSF(dir, f[x].getName());
????? ? System.out.println("方式一记录数"+DATxls.size());
????? ? for(int r=0;r<DATxls.size();r++)
????? ? {
????? ?? allData.add(DATxls.get(r).toString());
????? ? }
??? ????? }
?????? else if(f[x].getName().toLowerCase().endsWith(".xls")){//2007 读取方式二
????? ? DATxls=new ArrayList();
????? ? DATxls=this.read2007HSSF(dir, f[x].getName());
????? ? System.out.println("方式二记录数"+DATxls.size());
????? ? for(int r=0;r<DATxls.size();r++)
????? ? {
????? ?? allData.add(DATxls.get(r).toString());
????? ? }
??? ????? }
?? }catch(Exception ex)
?? {
???//如果出错,尝试jxl 读取方式
???// this.readXlsJXL(dir, f[x].getName());
?? }
?????
?????
????? level++;
???? }
??//System.out.println("共读取"+level+"个文件"+"共"+allData.size()+"记录");
??return allData;
?}
?//初始jxl 方式读取
?public static List readXlsJXL(File dir,String filename) throws Exception
?{
??System.out.println("读取方式三"+dir.getPath()+"\"+filename);
?? File file=new File(dir.getPath()+"\"+filename);
?? List excelValueList = new ArrayList();??
?? if (file.exists() && file.canRead() && (file.getName().toLowerCase().lastIndexOf(".xls") >= 1)) {
??? Workbook workbook = null;?
??? StringBuffer rowValue=null;
???????????? try {??
???????????????? workbook = Workbook.getWorkbook(file);??
???????????????? Sheet sheet=null;
???????????????? for(int s=0;s<workbook.getSheets().length;s++)
???????????????? {
???????????????? ?rowValue=new StringBuffer();
???????????????? ?sheet= workbook.getSheet(s);? //表
???????????????? ? int row = sheet.getRows();??
????????????????????? int col = sheet.getColumns();??
????????????????????? for (int r = 0; r < row; r++) {????
????????????????????????? for (int c = 0; c < col; c++) {??
???????????????????????? ? rowValue.append(sheet.getCell(c, r).getContents() != null ? sheet.getCell(c, r).getContents(): ""+",");??
????????????????????????? }??
???????????????????????????
????????????????????? }
?????????????????? excelValueList.add(rowValue);
???????????????? }
???????????? }catch(Exception ex)
???????????? {
???????????? ?ex.printStackTrace();
???????????? }
????????????
???
?? }
??return null;
?}
?//初始写入xls
?public boolean readIntoXls(String[] title,List datalist,String outPath)throws Exception
?{
??try{
????HSSFWorkbook wb = new HSSFWorkbook();
?????? HSSFSheet sheet = wb.createSheet("发料合并表");
?????? HSSFRow row = sheet.createRow(0);
?????? for(int i=0;i<title.length;i++)
?????? {
?????? ?row.createCell(i).setCellValue(title[i]);
?????? }
?????? for(int j=1;j<datalist.size()+1;j++)
?????? {
?????? ?//System.out.println(String.valueOf(datalist.get(j-1))+"*************");
?????? ?
?????? ?String[] data=String.valueOf(datalist.get(j-1)).split(",");
?????? ?row = sheet.createRow(j);
?????? ?//System.out.println(datalist.get(j-1));
??????? for(int i=0;i<title.length;i++)
??????? {
??????? ?for(int k=0;k<data.length;k++)
??????? ?{
??????? ??//System.out.println(data[k]);
???????? ?if(data[k].trim().equals(title[i].trim()))
???????? ?{?
???????? ??if(title[i].trim().equals("排版数量"))
???????? ??{
???????? ???if(data[k].equals("排版数量")&data[k+1].trim().equals("(1)"))
???????? ???{
???????? ????row.createCell(i).setCellValue(data[k+2]);
???????? ???}
???????? ??}else
???????? ??{
???????? ???if(data[k].trim().length()!=0)
???????? ???{
???????? ????row.createCell(i).setCellValue(data[k+1]);
???????? ???}
???????? ??}
???????? ??
???????? ?}else if(title[i].trim().equals("客户订单号"))
??????? ??{
??????? ???if(data[k].indexOf("客户订单号")!=-1)
??????? ???{
??????? ????row.createCell(i).setCellValue(data[k]);
??????? ???}
??????? ??}else{
???????? ??if(title[i].trim().equals("发料日期"))
???????? ??{
???????? ???if(data[data.length-1].indexOf("CA-MP")!=-1)
???????? ???{
???????? ????row.createCell(i).setCellValue(data[data.length-2]);
???????? ???}else
???????? ???{
???????? ????row.createCell(i).setCellValue(data[data.length-1]);
???????? ???}
???????? ???
???????? ??}
???????? ?}
??????? ?}
??????? }
?????? ?
?????? }
?????? FileOutputStream fileOut = new FileOutputStream(outPath);
?????? wb.write(fileOut);
?????? fileOut.close();
??}catch(Exception ex)
??{
???return false;
??}
??return true;
?}
}

热点排行