GenSQLFromExcel

来源:互联网 发布:阿里云怎么开放端口 编辑:程序博客网 时间:2024/06/05 12:05

读execl文件生成 .sql文件

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

 

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.read.biff.BiffException;

 

public class GenSQLFromExcel {

 

    String path ;       //.xls文件的目录 如"c://user//test"

    String fileNames[]; //目录下的所有.xls文件 如 a.xls b.xls

    Workbook workbook = null; //

   

    public String getPath() {

       return path;

    }

    public void setPath(String newfile) {

       this.path = newfile;

    }  

    public String[] getFileNames() {

       return fileNames;

    }

    public void setFileNames(String[] fileNames) {

       this.fileNames = fileNames;

    }  

   

    //打印

    private  void print(StringBuilder sb) {

       String tmp = sb.toString();

       System.out.print(tmp);

    }

   

    /*

     *  将生成的建表语句写入磁盘文件

     *  path 文件名(*.sql)

     *  sb  拼接生成的建表SQl语句

     */

    public  void write(String path, StringBuilder sb) {

      

       try {

           File f = new File(path);

           if (f.exists()) {

            System.out.println(f.getName()+" 文件存在,已覆盖...");

        } else {

            System.out.println(f.getName()+" 文件不存在,正在创建...");

            if (f.createNewFile()) {

             System.out.println(f.getName()+" 文件创建成功!");

            } else {

             System.out.println(f.getName()+" 文件创建失败!");

            }

        }    

      BufferedWriter output = new BufferedWriter(new FileWriter(f));

      output.write(sb.toString());

      output.close();

    } catch (Exception e) {

     e.printStackTrace();

    }

    }

 

    /*

     *  生成列名

     *  sheet 对应.xls文件的某一个Sheet

     *  sb     用于拼接SQL语句

     */

    private void getColums(Sheet sheet, StringBuilder sb) {

       Cell c;

       String s;

       boolean isID = false;// idStr 判断是否为ID

       int rows = sheet.getRows();

       int realRows = rows;

       for(int i=9;i<rows ;i++){             

           c=sheet.getCell(24,i);  //字段名

           s=c.getContents();

           if(s!=null && !s.equals("")){

               sb.append(s);

              

               if( s.equals("ID")&& i==9)

               isID = true;

               if(i<rows-1){

                  c=sheet.getCell(24,i+1);

                  s=c.getContents();

                  if(s!=null && s.equals(""))

                  realRows = i+1;

               }

           }

           else

              break;

           c=sheet.getCell(38,i); //类型

           s=c.getContents();

           sb.append(" "+s);

           if(s.equals("VARCHAR")){

              c=sheet.getCell(42,i); //增加长度

              s=c.getContents();

              sb.append("("+s+")");

           }

           c=sheet.getCell(46,i); //是否为主健

           s=c.getContents();

           if(s!=null && !s.equals(""))

              sb.append(" PRIMARY KEY");

           if(isID == true){      // ID主健则自动增长

              sb.append(" AUTO_INCREMENT");

              isID = false;

           }

           c=sheet.getCell(56,i);

           s=c.getContents();

           if(s!=null && !s.equals("")) //非空

              sb.append(" NOT NULL");

           c=sheet.getCell(59,i);

           s=c.getContents();

           if(s!=null && !s.equals(""))

              sb.append(" comment '"+s+"'");

           if(i<realRows-1)

              sb.append(",/n");       

       }

       sb.append("/n);/n");

    }

 

 

    /*

     * 生成表头 

     * sheet 对应.xls文件的一个Sheet(sheet1,sheet2)

     *  sb

     */

    private void getTableName(Sheet sheet, StringBuilder sb) {

       String s = getTableName(sheet);

       sb.append("DROP TABLE IF EXISTS "+s+";/n/n" );

       sb.append("CREATE TABLE ");

       sb.append(s);

       sb.append("(/n");   

    }

   

    /*

     * 生成表的文件名 如user, 然后调用者加上.sql 就成了usr.sql

     * sheet 对应.xls文件的一个Sheet(sheet1,sheet2)

     *

     */

    private String getTableName(Sheet sheet) {

       Cell c;

       String s;

       c = sheet.getCell(35,4); //取表名

       if(c != null)

           s=c.getContents();

       else

           s ="TABLE1"; 

       return s;

    }

   

    /*

     * 生成SQL   并显示打印

     */

    private void buildSql(Sheet sheet) {

       StringBuilder sb = new StringBuilder();

      

       if( sheet.getColumns()== 0 &&

           sheet.getRows() == 0)

           return;

       getTableName(sheet, sb);// 取表名      

       getColums(sheet, sb);   // 取字段名

      

       //print(sb);     //打印

      

       String file =path+ "//"+getTableName(sheet)+".sql";

       write(file,sb); //写入文件

    }  

   

    /*

       *    解析一个.xls文件

     */

    public void run(Workbook workbook, String fileName) {

       try { 

           workbook = Workbook.getWorkbook(new File(fileName));

       } catch (BiffException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }            

   

       Sheet[] shs = workbook.getSheets(); //遍历目录下的.xls文件名

      

       // 从第3sheet开始 

       for(int i=2;i<shs.length;i++)

           buildSql(shs[i]);

 

       workbook.close();

    }

   

    public  void run(String s) {        

       DirList dir = new DirList();      

       dir.setPath(new File(s));

      

       String[] fileNames = dir.dirList(); //取得该目录下的.xls文件名

       setFileNames(fileNames);

      

       for(String file: fileNames)

           run(workbook,s+"//"+file);

    }

 

   

    public static void main(String[] args){

        //存放 .xls文件的目录  应修改成自己放.xls文件目录

       String s = "C://user//test";         

       GenSQLFromExcel g = new GenSQLFromExcel();      

       g.setPath(s);

       g.run(s);

    }  

}

原创粉丝点击