java后台如何导入导出Excel方法

作者:小小谷 | 创建时间: 2023-04-29
经典的java处理Excel的方法。...
java后台如何导入导出Excel方法

操作方法

首先创建以下两个类: package com.util;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.util.ArrayList;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Excelread2010{    /** *//** 总行数 */    private static int totalRows = 0;        /** *//** 总列数 */    private static int totalCells = 0;    public static  ArrayList<ArrayList<String>>  zonglist=null;  /** *//** 构造方法 */     public Excelread2010(){  totalRows=0;totalCells=0;  }          //<li>Description:[根据文件名读取excel文件]</li>    public static String  read(String fileName)    {   zonglist=null;  String ret="";  ArrayList<ArrayList<String>> dataLst= new ArrayList<ArrayList<String>>();    /** *//** 检查文件名是否为空或者是否是Excel格式的文件 */          if (fileName == null || !fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")) {   ret="路径或格式或文件错误";   return ret;          }                 boolean isExcel2003 = true;   /** *//** 对文件的合法性进行验证 */  //检查是否为2010版本还是2003版本  if (fileName.matches("^.+\\.(?i)(xlsx)$"))  {   isExcel2003 = false;           }                  /** *//** 检查文件是否存在 */       File file = new File(fileName);    if (file == null || !file.exists()) {   ret="文件不存在!";   return ret;          }                  try  {      //System.out.println(file+"file");   /** *//** 调用本类提供的根据流读取的方法 */      zonglist= read(new FileInputStream(file), isExcel2003);    }catch (Exception ex) {    ex.printStackTrace();          }                /** *//** 返回最后读取的结果 */        return ret;     }       // <li>Description:[根据流读取Excel文件]</li> public static ArrayList<ArrayList<String>> read(InputStream inputStream, boolean isExcel2003) {   ArrayList<ArrayList<String>> dataLst = null;         try  {         System.out.println(isExcel2003+"isExcel2003");      /** *//** 根据版本选择创建Workbook的方式 */     // Workbook wb = isExcel2003 ? new HSSFWorkbook(inputStream): new XSSFWorkbook(inputStream);     Workbook wb=null;   if(isExcel2003){     wb =new HSSFWorkbook(inputStream);    //System.out.println("2007一下版本--xls");   }   else {   // System.out.println("2007以上版本--xlsx");     wb =new XSSFWorkbook(inputStream);   }      dataLst = read(wb);        } catch (IOException e){      e.printStackTrace();      }    return dataLst;    }     //* * <li>Description:[得到总行数]</li>    public int getTotalRows()    {    return totalRows;     }         //Description:[得到总列数]</li>   public int getTotalCells()    {        return totalCells;      }          //Description:[读取数据]</li>       //导入ss、usermodel private static ArrayList<ArrayList<String>> read(Workbook wb)    {      ArrayList<ArrayList<String>> zonglist = new ArrayList<ArrayList<String>>();      /** *//** 得到第一个shell */          Sheet sheet = wb.getSheetAt(0);          //获取总行数  totalRows = sheet.getPhysicalNumberOfRows();       //System.out.println(totalRows+"总行数");  if (totalRows >= 1 && sheet.getRow(0) != null)        {     totalCells = sheet.getRow(0).getPhysicalNumberOfCells();    //System.out.println(totalCells+"总列数");   }       /** *//** 循环Excel的行 */         for (int r = 0; r < totalRows; r++)        {      Row row = sheet.getRow(r);       if (row == null)   {      continue;        }      ArrayList<String>  rowlist=new ArrayList<String> ();   /** *//** 循环Excel的列 */         for (short c = 0; c < totalCells; c++)   {     Cell cell = row.getCell(c);            String cellValue = "";             if (cell == null) {      rowlist.add(cellValue);         continue;               }                                 /** *//** 处理数字型的,自动去零 */         if (Cell.CELL_TYPE_NUMERIC == cell.getCellType())  {         cellValue = getRightStr(cell.getNumericCellValue() + "");      }                   /** *//** 处理字符串型 */      else if (Cell.CELL_TYPE_STRING == cell.getCellType())   {         cellValue = cell.getStringCellValue();         }                  /** *//** 处理布尔型 */          else if (Cell.CELL_TYPE_BOOLEAN == cell.getCellType()) {        cellValue = cell.getBooleanCellValue() + "";          }                    /** *//** 其它的,非以上几种数据类型 */       else  {         cellValue = cell.toString() + "";      }                                 rowlist.add(cellValue);       }   zonglist.add(rowlist);   //rowlist.clear();   }         return zonglist;   }           //[正确地处理整数后自动加零的情况]</li>    private static String getRightStr(String sNum)    {    DecimalFormat decimalFormat = new DecimalFormat("#.000000");  String resultStr = decimalFormat.format(new Double(sNum));     if (resultStr.matches("^[-+]?\\d+\\.[0]+$"))   {    resultStr = resultStr.substring(0, resultStr.indexOf("."));    }         return resultStr;      }       // public static void main(String[] args) throws Exception    {//      String ret=new Excelreadandwriter20101().read("D:\\yuan1.xlsx");//  System.out.println(ret+"ret");//  //输出数据//  for(int i=0;i<zonglist.size();i++){//   //  for(int j=0;j<zonglist.get(i).size();j++){//  System.out.print(zonglist.get(i).get(j)+";");//  }//  System.out.println();//  } //} }

package com.util; import java.io.File;import java.util.List; import jxl.Workbook;import jxl.format.UnderlineStyle;import jxl.write.Label;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook; public class ExcelUtils { /**  *   * @param file  *            :导出文件名  * @param title  *            :表格标题  * @param field  *            :表头字段  * @param data  *            :数据行  */ public static void exportExcel(File file, String title, String[] field,   List<String[]> data) {  try {   WritableWorkbook book = Workbook.createWorkbook(file);   WritableSheet sheet = book.createSheet("sheet1", 0);   sheet.setColumnView(0, 27);   sheet.setColumnView(1, 20);   sheet.setColumnView(2, 17);   sheet.setColumnView(4, 40);   sheet.setColumnView(5, 40);   sheet.setColumnView(10, 15);   jxl.write.WritableFont font = new jxl.write.WritableFont(WritableFont.ARIAL,16,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);   jxl.write.WritableFont font1 = new jxl.write.WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);   jxl.write.WritableCellFormat  f = new jxl.write.WritableCellFormat(font);   jxl.write.WritableCellFormat  f1 = new jxl.write.WritableCellFormat(font1);   f.setAlignment(jxl.format.Alignment.CENTRE);   f1.setAlignment(jxl.format.Alignment.CENTRE);         sheet.addCell(new Label(0, 0, title,f)); // 加入标题   sheet.mergeCells(0, 0, field.length - 1, 0);// 合并标题区   for (int i = 0; i < field.length; i++) {    sheet.addCell(new Label(i, 1, field[i],f1)); // 加入表头字段   }   for (int i = 0; i < data.size(); i++) {    for (int j = 0; j < data.get(i).length; j++) {     sheet.addCell(new Label(j, i + 2, data.get(i)[j])); // 加入表头字段    }   }   /* 写入数据并关闭文件 */   book.write();   book.close(); } catch (Exception e) {   System.err.println("in#ExcelUtils#exportExcel");   e.printStackTrace();  } } public static void ExportExcel(File file,   List<String[]> data) {  try {   WritableWorkbook book = Workbook.createWorkbook(file);   WritableSheet sheet = book.createSheet("sheet1", 0);   //设置网格宽度   sheet.setColumnView(0, 20);   sheet.setColumnView(1, 20);   sheet.setColumnView(2, 20);   sheet.setColumnView(3, 20);   sheet.setColumnView(4, 20);   sheet.setColumnView(5, 20);   sheet.setColumnView(6, 20);   //准备字体(第一行设置的稍大一点字体)   jxl.write.WritableFont font = new jxl.write.WritableFont(WritableFont.ARIAL,16,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);   jxl.write.WritableFont font1 = new jxl.write.WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);   jxl.write.WritableCellFormat  f = new jxl.write.WritableCellFormat(font);   jxl.write.WritableCellFormat  f1 = new jxl.write.WritableCellFormat(font1);   f.setAlignment(jxl.format.Alignment.CENTRE);   f1.setAlignment(jxl.format.Alignment.CENTRE);      for (int i = 0; i < data.size(); i++) {    if(i==0){    for (int j = 0; j < data.get(i).length; j++) {     sheet.addCell(new Label(j, 1, data.get(i)[j],f)); // 加入表头字段    }    }else{     for (int j = 0; j < data.get(i).length; j++) {      sheet.addCell(new Label(j, i+1, data.get(i)[j],f)); // 加入表头字段     }     }       }   /* 写入数据并关闭文件 */   book.write();   book.close(); } catch (Exception e) {   System.err.println("Excel导出异常:"+e.toString());   e.printStackTrace();  } }}

测试类: package com.util; import javax.swing.JOptionPane;public class TEST { public static void main(String[] args) {  //桌面路径:C:\Users\Administrator\Desktop String filePath="D:\\123.xls";      String pathda=JOptionPane.showInputDialog("请核对路径:",filePath);        System.out.println(pathda+"pathda");   //-------------------------------------------------             //调用导入Excel的方法类和方法。      String ret= Excelread2010.read(pathda);     StringBuffer xsml=new StringBuffer();       System.out.println(Excelread2010.zonglist.size()+"总列数");   System.out.println(Excelread2010.zonglist.get(0).size()+"总行数");     //循环遍历所有行数据。      for(int i=0;i<Excelread2010.zonglist.size();i++){       System.out.println();       //每一行的数据    for(int j=0;j<Excelread2010.zonglist.get(i).size();j++){      System.out.print(Excelread2010.zonglist.get(i).get(j)+"    ");      //连接数据库并存储数据      String sql="";          }      }        System.out.println("xsml.toString()"+xsml.toString()); //将zonglist里面的数据存入数据库对应的表中 } //导出方法: File fil=new File("D:\\211111.xls");    ArrayList<String[]> data=new ArrayList<String[]>();      for(int j=0;j<8;j++){  String [] aa=new String [9] ;  for(int i=0;i<aa.length;i++){   aa[i]=j+"uu"+i+"tt";     }  data.add(aa);  }  ExcelUtils.ExportExcel(fil, data);    System.out.println("ok"); }

温馨提示

将以上三个类正常运行即可测试其运行原理
点击展开全文

更多推荐