关于POI导出数据的util与工具类

// 使用前先将 FileUtil与PoiUtil两个工具类导入,再将ContractPrint导入action中,new contractprint 将三个参数传入即可

package cn.itcast.jx.util.file;


import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List;

import cn.itcast.jx.util.FormatStyle;
import cn.itcast.jx.util.UtilFuns;



public class FileUtil {

  /* ======================================== *
   * Class Methods
   * ======================================== */

   
    public String getFileExt(String s){
        String s1 = new String();
        int i = 0;
        int j = 0;
        if(s == null)
            return null;
        i = s.lastIndexOf(46) + 1;
        j = s.length();
        s1 = s.substring(i, j);
        if(s.lastIndexOf(46) > 0)
            return s1.toLowerCase();
        else
            return "";
    }
    

    private String getNameWithoutExtension(String fileName){
        return fileName.substring(0, fileName.lastIndexOf("."));
    }
    
    public boolean isImgFile(String file)
    {
        if(UtilFuns.isNotEmpty(file)){
            String s1 = "."+this.getFileExt(file);
            if(".jpg.jpeg.bmp.gif.png".indexOf(s1)>-1){
                return true;
            }
        }
        return false;
    }
    
    public String getFileName(String s){
        try{
            s = s.replaceAll("/", "\\\\");
            int fileIndex= s.lastIndexOf("\\")+1;
            return s.substring(fileIndex,s.length());
        }catch(Exception e){
            return "";
        }
    }
    
    public String getFilePath(String s){
        try{
            s = s.replaceAll("/", "\\\\");
            int fileIndex= s.lastIndexOf("\\");
            return s.substring(0,fileIndex);
        }catch(Exception e){
            return "";
        }
    }
    
    /* 目录下已经有同名文件,则文件重命名,增加文件序号 add by tony 20110712 */
    public String newFile(String sPath, String sFile){
        String newFileName = new String();
        String withoutExt = new String();
        File curFile = new File(sPath + "\\" + sFile);
        if (curFile.exists()) {
            for(int counter = 1; curFile.exists(); counter++){
                withoutExt = this.getNameWithoutExtension(curFile.getName());
                if(withoutExt.endsWith(counter-1 + ")")){
                    withoutExt = withoutExt.substring(0,withoutExt.indexOf("("));        //idea
                }
                newFileName = withoutExt + "(" + counter + ")" + "." + getFileExt(curFile.getName());
                curFile = new File(sPath + "\\" + newFileName);
            }
        }else{
            newFileName = curFile.getName();
        }
        return newFileName;
    }
    
  /* 只清空文件夹,不删除文件夹 */
  public static synchronized void clearDir(String dir_path)
   throws FileNotFoundException {
    
    File file = new File(dir_path);
    if (!file.exists()) {
      throw new FileNotFoundException();
    }
    if (file.isDirectory()) {
      File[] fe = file.listFiles();
      for (int i = 0; i < fe.length; i++) {
        deleteFiles(fe[i].toString());
        fe[i].delete(); //删除已经是空的子目录
      }
    }
  }
   
  //ex: deleteDir(new File("c://aaa"));
  /* 清空文件夹,并删除文件夹 */
  public static synchronized void deleteDir(String dir_path)
   throws FileNotFoundException,IOException {
    deleteDir(new File(dir_path));
  }
 
  //ex: deleteDir(new File("c://aaa"));
  /* 清空文件夹,并删除文件夹 */
  public static synchronized void deleteDir(File f)
  throws FileNotFoundException,IOException {
      
      if(!f.exists()){//文件夹不存在不存在
          throw new IOException("指定目录不存在:"+f.getName());
      }
      boolean rslt=true;//保存中间结果
      if(!(rslt=f.delete())){//先尝试直接删除
          //若文件夹非空。枚举、递归删除里面内容
          File subs[] = f.listFiles();
          for (int i = 0; i <= subs.length - 1; i++) {
              if (subs[i].isDirectory())
                  deleteDir(subs[i]);//递归删除子文件夹内容
              rslt = subs[i].delete();//删除子文件夹本身
          }
          rslt = f.delete();//删除此文件夹本身
      }
      //if(!rslt)
      // throw new IOException("无法删除:"+f.getName());
      //return;
  }
     
  //路径中的多层目录,如果不存在,则建立(mkdir-只可建最后一层目录)
  public static synchronized void makeDir(String dirPath)
   throws FileNotFoundException {
    String s = "";

    dirPath = dirPath.replaceAll("\\t","/t");     //replace tab key
    dirPath = dirPath.replaceAll("\\\\","/");
    String[] aPath = dirPath.split("/");
    for (int i=0;i         s = s + aPath[i] + "/";
        //System.out.println(s);
        File d = new File(s);
        if(!d.exists()){
            d.mkdir();
        }
    }
  }

  //修改目录名称或文件名称 dir and file
  public static synchronized void rename(String sOld,String sNew)
   throws FileNotFoundException {
       boolean b = false;
    File d = new File(sOld);
    if(d.exists()){
        b = d.renameTo(new File(sNew));
    }
  }
 
  public static synchronized String formulaDirName(String dirName){
      dirName = dirName.replaceAll("/","\\\\");
      return dirName;
  }
 
  public static synchronized String formulaPath(String dirName){
      dirName = dirName.replaceAll("\\\\","/");
      return dirName;
  }

  public static synchronized String lastDir(String dir_path){
    if(dir_path.trim().compareTo("")==0){
      return "";
    }else{
      //两个位置,谁后取谁。因为路径中常包含这两种标识
      int i= dir_path.lastIndexOf("\\")>dir_path.lastIndexOf("/")?dir_path.lastIndexOf("\\"):dir_path.lastIndexOf("/");
      if(i>0){
          return dir_path.substring(i);
      }else{
          return "";
      }
    }
  }
 
  //删除给定的文件
  public static void deleteFile(String FileName) {
    File f2 = new File(FileName);
    f2.delete(); //del file
    f2 = null;
  }
 
/*
 *删除目录下的所有文件
 **/
  public static boolean deleteFiles(String dir) {
    if(dir==null || "".equals(dir))
      return true;

    File f0 = new File(dir);
    if( !f0.isDirectory() )
      return false;
    File[] files = f0.listFiles();
    boolean status = true;
    for(int i=0; i       File f = files[i];
      if( !f.isFile() )
        continue;

      boolean b = f.delete();
      status = ( status && b );
    }
    return status;
  }


  /** Deletes each file in files which is under path.
   * It does not delete directory.
   *
   * @param path
   * @param files
   * @return true if and only if all the files are successfully
   *   deleted; false otherwise.
   */
  public static boolean deleteFiles(String path, String[] files) {
    if(path==null || files==null)
      return true;

    boolean status = true;
    for(int i=0; i       File f = new File(path, files[i]);
      if( !f.isFile() )
        continue;
        //?  (f.getAbsoluteFile()).
      boolean b = f.delete();
      status = ( status && b );
    }
    return status;
  }
 
  public static boolean deleteFiles(List files) {
      
    if(files==null || files.size()<=0)
      return true;
    
    String fileName = "";
    boolean status = true;
    for(int i=0; i       fileName = (String)files.get(i);
      File f = new File(fileName);
      if( !f.isFile() )
        continue;
        //?  (f.getAbsoluteFile()).
      boolean b = f.delete();
      status = ( status && b );
    }
    return status;
  }

  /** Copies byte-content of f to os.
   *
   * @param f
   * @param os
   * @throws IOException
   */
  public static void fileToOutputStream(File f, OutputStream os)
      throws IOException {
    //
    InputStream is = new BufferedInputStream( new FileInputStream(f) );
    byte[] barr = new byte[1024];
    int count;
    while(true) {
      count = is.read(barr);
      if(count == -1)
        break;

      os.write(barr, 0, count);
    }
    is.close();
    return;
  }
  //读日志文件 "c:\\Log.txt"
  //输入参数:sFile = Path + FileName 文件路径+文件名称
  public List readTxtFile(String sFile) {
    String str = "";
    List sList = new ArrayList();
    try {
      FileReader fr = new FileReader(sFile);
      BufferedReader bfr = new BufferedReader(fr);
      while((str = bfr.readLine())!=null){
          sList.add(str);
      }
      fr.close();
    }catch (IOException ex){System.out.println("readTxtFile IOException Error."+ex.getMessage());
    }catch (Exception ex) {System.out.println("readTxtFile Exception Error."+ex.getMessage());}
    return sList;
  }
 
  public String WriteTxt(String sPath,String sFile,String sContent) {
      String s = "";
      File d=new File(sPath);//建立代表Sub目录的File对象,并得到它的一个引用
      if(!d.exists()){//检查Sub目录是否存在
          d.mkdir();//建立Sub目录
      }
      
    try {
      FileWriter fw = new FileWriter(sPath + "\\" + sFile,true);
      BufferedWriter bfw = new BufferedWriter(fw);
      bfw.write(sContent);
      bfw.flush();
      fw.close();
    }catch (IOException ex){ s = "WriteTxt IOException Error.";
    }catch (Exception ex) { s = "WriteTxt Exception Error.";}
    
    return s;
  }
 
  /* 创建新文本文件,如果文件已经存在则覆盖 */
  public String createTxt(String sPathFile,String sContent) throws FileNotFoundException {
      String s = "";
      String sPath = this.getFilePath(sPathFile);
      String sFile = this.getFileName(sPathFile);
      
      File d=new File(sPath);        //建立代表Sub目录的File对象,并得到它的一个引用
      if(!d.exists()){            //检查Sub目录是否存在
          this.makeDir(sPath);     //建立Sub目录
      }
      
    try {
      FileWriter fw = new FileWriter(sPath + "\\" + sFile,false);
      BufferedWriter bfw = new BufferedWriter(fw);
      bfw.write(sContent);
      bfw.flush();
      fw.close();
    }catch (IOException ex){ s = "createTxt IOException Error.";
    }catch (Exception ex) { s = "createTxt Exception Error.";}
    
    return s;
  }
 
  /* 创建新文本文件,如果文件已经存在则覆盖 */
  public String createTxt(String sPath,String sFile,String sContent) throws FileNotFoundException {
      String s = "";
      File d=new File(sPath);        //建立代表Sub目录的File对象,并得到它的一个引用
      if(!d.exists()){            //检查Sub目录是否存在
          this.makeDir(sPath);     //建立Sub目录
      }
      
      try {
          FileWriter fw = new FileWriter(sPath + "\\" + sFile,false);
          BufferedWriter bfw = new BufferedWriter(fw);
          bfw.write(sContent);
          bfw.flush();
          fw.close();
      }catch (IOException ex){ s = "createTxt IOException Error.";
      }catch (Exception ex) { s = "createTxt Exception Error.";}
      
      return s;
  }
 
  /* 创建新文本文件,如果文件已经存在则覆盖,在文件后追加内容 文件格式:encode:UTF-8  add by tony 20100118 */
  public String createTxt(String sPath,String sFile,String sContent,String enCoding) throws FileNotFoundException {
      String s = "";
      File d=new File(sPath);        //建立代表Sub目录的File对象,并得到它的一个引用
      if(!d.exists()){            //检查Sub目录是否存在
          this.makeDir(sPath);     //建立Sub目录
      }
      
    try {
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(sPath + "\\" + sFile), enCoding);
        out.write(sContent);
        out.flush();
        out.close();
    }catch (IOException ex){ s = "createTxt IOException Error.";
    }catch (Exception ex)  { s = "createTxt Exception Error."; }
    
    return s;
  }
 
  /* 创建新文本文件,如果文件已经存在则覆盖,只覆盖不追加 文件格式:encode:UTF-8  add by tony 20100118 */
  public String newTxt(String sPath,String sFile,String sContent,String enCoding) throws FileNotFoundException {
      String s = "";
      File d=new File(sPath);        //建立代表Sub目录的File对象,并得到它的一个引用
      if(!d.exists()){            //检查Sub目录是否存在
          this.makeDir(sPath);     //建立Sub目录
      }
      
      try {
          OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(sPath + "\\" + sFile, false), enCoding);
          out.write(sContent);
          out.flush();
          out.close();
      }catch (IOException ex){ s = "createTxt IOException Error.";
      }catch (Exception ex)  { s = "createTxt Exception Error."; }
      
      return s;
  }
 
/*
    
    s = "c:\\ex.txt";
    String[] aTitle = null; //表示没有标题
    String[] aContent = {"a","b","c","a1","a2","a3"};
    
    sMsg = fileUtil.WriteTxt(s,aTitle,aContent,"\t",3); //\t TAB键

 */
  public String WriteTxt(String sFile,String[] aTitle,String[] aContent,String sSplitFlag,int iColumns) {
    String sMsg = "";
    long lTime = System.currentTimeMillis();
    try {
      if (aTitle!=null){     
        if (aTitle.length!=iColumns){
          throw new Exception("Title Length is not right!");
        }
      }
      
      File f = new File(sFile);
      if(f.exists())
      {
        f.delete();   //if exist then delete()
      }
      
      FileWriter fw = new FileWriter(sFile,true);
      BufferedWriter bfw = new BufferedWriter(fw);
      
      //write Title
      if (aTitle!=null){
        for(int i=0;i           bfw.write(aTitle[i] + sSplitFlag);
        }
        bfw.newLine(); //插入换行符号
      }
      
      //write content
      for(int i=0;i         bfw.write(aContent[i] + sSplitFlag);
        
        if ((i+1)%iColumns==0){
          bfw.newLine(); //插入换行符号
        }
      }
      bfw.flush();   //将缓冲区内的数据写入文件中
      fw.close();
    }catch (IOException ex){
      sMsg = "WriteTxt IOException Error."+ex.getMessage();
    }catch (Exception ex) {
      sMsg = "WriteTxt Exception Error."+ex.getMessage();
    }
    return sMsg;
  }

 
  //边生成边写XML文件  对单表结构
  public String WriteXML(String sFile,String indent,String root,String[] aTrunk,String[] aLeaf,String[] aContent) {
    int i=0,j=0,k=0;
    String sIndent = "";
    String[] aTrunkSuffix = new String[aTrunk.length];
    String[] aLeafSuffix  = new String[aLeaf.length];
    
    
    String sMsg = "";
    long lTime = System.currentTimeMillis();
    
    try {
      
      File f = new File(sFile);
      if(f.exists())
      {
        f.delete();   //if exist then delete()
      }
      
      //inital array
      for(i=0;i         for(j=0;j           sIndent = indent + sIndent;  //add space
        }
        aTrunk[i] = sIndent + "<" + aTrunk[i] + ">";
        aTrunkSuffix[i] = aTrunk[i].replaceFirst("<","         //System.out.println(i + " " + aTrunk[i]+aTrunkSuffix[i]);
      }
      
      sIndent = indent + sIndent;  //add space
      for(i=0;i         aLeafSuffix[i] = "";
        aLeaf[i] = sIndent + "<" + aLeaf[i] + ">";
      }
              
      FileWriter fw = new FileWriter(sFile,true);
      BufferedWriter bfw = new BufferedWriter(fw);
     
      bfw.write("");bfw.newLine();
      if(root.length()>0){
        bfw.write("<"+root+">");bfw.newLine();        
      }
      
      while(k         for(i=0;i           bfw.write(aTrunk[i]);bfw.newLine();
        }
        for(i=0;i           bfw.write(aLeaf[i] + aContent[k++] + aLeafSuffix[i]);bfw.newLine();  
        }
        
        for(i=aTrunkSuffix.length-1;i>-1;i--){
          bfw.write(aTrunkSuffix[i]);bfw.newLine();
        }
      }//end while
      
      if(root.length()>0){
        bfw.write("");bfw.newLine();
      }    
      
      
      bfw.flush();   //将缓冲区内的数据写入文件中
      fw.close();
    }catch (IOException ex){
      sMsg = this.getClass().getName()+ " WriteXML IOException Error."+ex.getMessage();
    }catch (Exception ex) {
      sMsg = this.getClass().getName()+ " WriteXML Exception Error."+ex.getMessage();
    }
    return sMsg;
  }


 
  //create xml lines to ArrayList
  public ArrayList CreateXML(String StartIndent,String indent,String[] aTrunk,String[] aLeaf,String[] aContent) {
    
    ArrayList aList = new ArrayList();

    int i=0,j=0,k=0;
    String sIndent = StartIndent;
    String[] aTrunkSuffix = new String[aTrunk.length];
    String[] aLeafSuffix  = new String[aLeaf.length];
    
    String sMsg = "";
    long lTime = System.currentTimeMillis();
    
    try {
      
      //inital array
      for(i=0;i         for(j=0;j           sIndent = indent + sIndent;  //add space
        }
        aTrunk[i] = sIndent + "<" + aTrunk[i] + ">";
        aTrunkSuffix[i] = aTrunk[i].replaceFirst("<","       }
      
      sIndent = indent + sIndent;  //add space
      for(i=0;i         aLeafSuffix[i] = "";
        aLeaf[i] = sIndent + "<" + aLeaf[i] + ">";
      }
                    
      while(k         for(i=0;i           aList.add(aTrunk[i]);   
        }
        for(i=0;i           aList.add(aLeaf[i] + aContent[k++] + aLeafSuffix[i]);     
        }
        
        for(i=aTrunkSuffix.length-1;i>-1;i--){
          aList.add(aTrunkSuffix[i]);   
        }
      }//end while
      
      return aList;
    }catch (Exception ex) {
      sMsg = this.getClass().getName()+ " CreateXML Exception Error."+ex.getMessage();
    }
    return null;
  }


  //边生成边写XML文件
  public String WriteXML(String sFile,String sXmlVer,String root,ArrayList aList) {

    String sMsg = "";
    long lTime = System.currentTimeMillis();
    try {
      
      File f = new File(sFile);
      if(f.exists())
      {
        f.delete();   //if exist then delete()
      }
      
      FileWriter fw = new FileWriter(sFile,true);
      BufferedWriter bfw = new BufferedWriter(fw);
     
      bfw.write("");bfw.newLine();  
      
      if(root.length()>0){
        bfw.write("<"+root+">");bfw.newLine();        
      }
      
      //write txt
      for(int i=0;i         bfw.write((String)aList.get(i));bfw.newLine();        
      }      
      
      if(root.length()>0){
         //去掉元素后面的属性
        bfw.write("");
      }        
      
      bfw.flush();   //将缓冲区内的数据写入文件中
      fw.close();
    }catch (IOException ex){
      sMsg = this.getClass().getName()+ " WriteXML IOException Error."+ex.getMessage();
    }catch (Exception ex) {
      sMsg = this.getClass().getName()+ " WriteXML Exception Error."+ex.getMessage();
    }
    return sMsg;
  }

    public boolean isExist(String filename){
        try{
            File file = new File(filename);
            if(!file.exists()){
                return false;
            }else{
                return true;            
            }
        }catch(Exception e){
            return false;
        }
    }
    
    //用于判断是绝对路径还是相对路径    add by tony 20100413
    public boolean isAbsolutePath(String path){
        if(path.indexOf(":")>0){
            return true;
        }
        return false;
    }

    /** * 功能:利用nio来快速复制文件 */
    public void copyFile(String srcFile, String destFile)
            throws java.io.FileNotFoundException, java.io.IOException {
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);
        FileChannel fcin = fis.getChannel();
        FileChannel fcout = fos.getChannel();
        fcin.transferTo(0, fcin.size(), fcout);
        fcin.close();
        fcout.close();
        fis.close();
        fos.close();
    }


    /** 忽略拷贝文件时发生的错误,可能是文件不存在 */
    public  boolean copyFileIgnore(String file1,String file2){
        try{
            File file_in = new File(file1);
            File file_out = new File(file2);
            FileInputStream in1 = new FileInputStream(file_in);
            FileOutputStream out1 = new FileOutputStream(file_out);
            byte[] bytes = new byte[1024];
            int c;
            while((c=in1.read(bytes))!=-1){
                out1.write(bytes,0,c);
            }
            in1.close();
            out1.close();
            return true;    //if sucess then return true
        }catch(Exception e){
            return false;    //if fail then return false
        }
        
    }

    
    /* create by czs 2006-08-08 */
    public void copyDir(String dir1,String dir2) throws java.io.FileNotFoundException, IOException{
        (new File(dir2)).mkdir();
        File[] file = (new File(dir1)).listFiles();
        
        for(int i=0;i             
            if(file[i].getName().compareTo("Thumbs.db")!=0){
                if(file[i].isFile()){
                    copyFile(dir1+"\\"+file[i].getName(),dir2+"\\"+file[i].getName());
                }else if(file[i].isDirectory()){
                    copyDir(dir1+"\\"+file[i].getName(),dir2+"\\"+file[i].getName());
                }
            }
        }
    }
    
    /** * 功能:利用nio快速复制目录 */
    public void copyDirectory(String srcDirectory, String destDirectory)
            throws java.io.FileNotFoundException, java.io.IOException { // 得到目录下的文件和目录数组

        File srcDir = new File(srcDirectory);
        File[] fileList = srcDir.listFiles();
        // 循环处理数组
        
        if(fileList==null){
            throw new java.io.FileNotFoundException();
        }
        
        (new File(destDirectory)).mkdir();
        
        for (int i = 0; i < fileList.length; i++) {
            if (fileList[i].isFile()) {
                // 数组中的对象为文件
                // 如果目标目录不存在,创建目标目录
                File descDir = new File(destDirectory);
                if (!descDir.exists()) {
                    descDir.mkdir();
                } // 复制文件到目标目录
                if(fileList[i].getName().compareTo("Thumbs.db")!=0){    //windows bug
                    copyFile(srcDirectory + "/" + fileList[i].getName(),
                        destDirectory + "/" + fileList[i].getName());
                }
            } else {
                // 数组中的对象为目录
                // 如果该子目录不存在就创建(其中也包含了对多级目录的处理)
                File subDir = new File(destDirectory + "/"
                        + fileList[i].getName());
                if (!subDir.exists()) {
                    subDir.mkdir();
                }
                // 递归处理子目录
                copyDirectory(srcDirectory + "/" + fileList[i].getName(),
                        destDirectory + "/" + fileList[i].getName());

            }
        }
    }

    /* 列出目录下的所有文件 */
    public List fileList(String dir){
        File f = new File(dir);
        File[] files = f.listFiles();
        if (files==null){
            return null;
        }
        int count = files.length;
        List list = new ArrayList(count);
        for (int i=0;i             if (!files[i].isDirectory()){
                list.add(files[i]);
            }
        }
        return list;
    }
    
    /* 列出目录下的所有文件,去除prefix路径~虚拟路径 */
    public List fileList(String dir, String prefix){
        FormatStyle formatStyle = new FormatStyle();
        File f = new File(dir);
        File[] files = f.listFiles();
        if (files==null){
            return null;
        }
        int count = files.length;
        List list = new ArrayList(count);
        for (int i=0;i             if (!files[i].isDirectory()){
                list.add(String.valueOf(files[i]).substring(prefix.length()));
                list.add(formatStyle.fileSize(String.valueOf(files[i].length())));
            }
        }
        return list;
    }
    
    /* 列出目录下前缀为prefix,后缀为suffix的文件 by tony 20110930 */
    public List fileList(String dir, String prefix, String suffix){
        FormatStyle formatStyle = new FormatStyle();
        File f = new File(dir);
        File[] files = f.listFiles();
        if (files==null){
            return null;
        }
        int count = files.length;
        List _list = new ArrayList(count);
        for (int i=0;i             if (!files[i].isDirectory()){
                if(files[i].getName().startsWith(prefix) && files[i].getName().endsWith(suffix)){
                    _list.add(dir+"/"+files[i].getName());
                }
            }
        }
        return _list;
    }


    /* 列出目录下的所有目录 */
    public List fileDir(String dir){
        File f = new File(dir);
        File[] files = f.listFiles();
        if (files==null){
            return null;
        }
        int count = files.length;
        List list = new ArrayList(count);
        for (int i=0;i             if (files[i].isDirectory()){
                list.add(files[i]);
            }
        }
        return list;
    }
    
    /* 列出目录下的所有目录,去除prefix路径~虚拟路径 */
    public List fileDir(String dir, String prefix){
        FormatStyle formatStyle = new FormatStyle();
        File f = new File(dir);
        File[] files = f.listFiles();
        if (files==null){
            return null;
        }
        int count = files.length;
        List list = new ArrayList(count);
        for (int i=0;i             if (files[i].isDirectory()){
                list.add(String.valueOf(files[i]).substring(prefix.length()));
                list.add(String.valueOf(files[i].listFiles().length));
            }
        }
        return list;
    }

    public List dirfileList(String dir){
        File f = new File(dir);
        File[] files = f.listFiles();
        if (files==null){
            return null;
        }
        int count = files.length;
        List list = new ArrayList(count);
        for (int i=0;i             list.add(files[i]);
        }
        return list;
    }

    /**
     * Moving a File to Another Directory
     * @param srcFile  eg: c:\windows\abc.txt
     * @param destPath eg: c:\temp
     * @return success
     */
    public boolean moveFile(String srcFile, String destPath){
        // File (or directory) to be moved
        File file = new File(srcFile);
        
        // Destination directory
        File dir = new File(destPath);
        
        // Move file to new directory
        boolean success = file.renameTo(new File(dir, file.getName()));
        
        return success;
    }

  /* ======================================== *
   * Tests Methods
   * ======================================== */

  public static void main(String[] args) throws IOException {
      FileUtil fu = new FileUtil();
      
      
      
      //fu.copyDir("E:\\WorkSpace\\java\\pan\\userstyle\\one","E:\\WorkSpace\\java\\pan\\user\\test");
      fu.rename("c:\\t","c:\\a");
      //fu.fileList("E:\\WorkSpace\\java\\pan\\21pan");
      
      //fu.copyDirectory("c:\\123","c:\\456");
    //String dir = "D:\tmp\t/t";
    //makeDir(dir);

/**    FileUtil fu = new FileUtil();
    boolean copy_ok=fu.copyFile("E://WorkSpace//java//eCargo//comm//uploadfile//do_upload.jsp","E://WorkSpace//java//eCargo//comm//uploadfile//hello_backup.jsp");
    System.out.print(copy_ok);
    
    fu.copyDir("c:/eclog","c:/ec");

    String path = "d:/tmp";
    String f1 = "links.txt";
    boolean b = deleteFiles(path, new String[]{f1});
    System.out.println(b);

    FileUtil fileUtil = new FileUtil();
    String[] aTrunk = {"gaosin","ex"};
    String[] aLeaf = {"编号","姓名","标题","价格"};
    String[] aContent = {"a","b","c","d","a1","a2","a3","a4"};
    //String[] aContent = sqlDAO.CNRecordToStrings(sql);

    String sMsg = fileUtil.WriteXML("c:\\ex.xml","  ","gaosin-info",aTrunk,aLeaf,aContent);
    System.out.print(sMsg);
    
    try{
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder=factory.newDocumentBuilder();
      Document doc=builder.parse("links.xml");
      doc.normalize();
       //---取得变量----
      String text="Wudong's Homepage";
      String url="www.wudong.com";
      String author="Wudong Liu";
      String discription="A site from Wudong Liu, give u lots of suprise!!!";
      //-------------
      Text textseg;
      Element link=doc.createElement("link");
    
      Element linktext=doc.createElement("text");
      textseg=doc.createTextNode(text);
      linktext.appendChild(textseg);
      link.appendChild(linktext);
    
      Element linkurl=doc.createElement("url");
      textseg=doc.createTextNode(url);
      linkurl.appendChild(textseg);
      link.appendChild(linkurl);
    
      Element linkauthor=doc.createElement("author");
      textseg=doc.createTextNode(author);
      linkauthor.appendChild(textseg);
      link.appendChild(linkauthor);
    
      java.util.Calendar rightNow = java.util.Calendar.getInstance();
      String day=Integer.toString(rightNow.get(java.util.Calendar.DAY_OF_MONTH));
      String month=Integer.toString(rightNow.get(java.util.Calendar.MONTH));
      String year=Integer.toString(rightNow.get(java.util.Calendar.YEAR));
      Element linkdate=doc.createElement("date");
    
      Element linkdateday=doc.createElement("day");
      textseg=doc.createTextNode(day);
      linkdateday.appendChild(textseg);
    
      Element linkdatemonth=doc.createElement("month");
      textseg=doc.createTextNode(month);
      linkdatemonth.appendChild(textseg);
    
    
      Element linkdateyear=doc.createElement("year");
      textseg=doc.createTextNode(year);
      linkdateyear.appendChild(textseg);
    
      linkdate.appendChild(linkdateday);
      linkdate.appendChild(linkdatemonth);
      linkdate.appendChild(linkdateyear);
      link.appendChild(linkdate);
    
      Element linkdiscription=doc.createElement("description");
      textseg=doc.createTextNode(discription);
      linkdiscription.appendChild(textseg);
      link.appendChild(linkdiscription);
    
      doc.getDocumentElement().appendChild(link);
    
      TransformerFactory tFactory =TransformerFactory.newInstance();
      Transformer transformer = tFactory.newTransformer();
      DOMSource source = new DOMSource(doc);
      StreamResult result = new StreamResult(new java.io.File("links.xml"));
      transformer.transform(source, result);
      }catch(Exception e){
        e.printStackTrace();
      }
    */
  }

}



package cn.itcast.jx.util.file;

import java.awt.image.BufferedImage;
import java.io.*;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

import javax.imageio.ImageIO;

public class PoiUtil {
    private static final String ENFONT = "Times New Roman";

    public HSSFFont defaultFont10(HSSFWorkbook wb) {
        HSSFFont curFont = wb.createFont(); // 设置字体
        curFont.setFontName(this.ENFONT);
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET); // 设置中文字体,那必须还要再对单元格进行编码设置
        curFont.setFontHeightInPoints((short) 10);

        return curFont;
    }
    
    public HSSFFont defaultFont10Blod(HSSFWorkbook wb) {
        HSSFFont curFont = wb.createFont(); // 设置字体
        curFont.setFontName(this.ENFONT);
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET); // 设置中文字体,那必须还要再对单元格进行编码设置
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
        curFont.setFontHeightInPoints((short) 10);
        
        return curFont;
    }

    public HSSFFont defaultFont12(HSSFWorkbook wb) {
        HSSFFont curFont = wb.createFont(); // 设置字体
        curFont.setFontName(this.ENFONT);
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET); // 设置中文字体,那必须还要再对单元格进行编码设置
        curFont.setFontHeightInPoints((short) 12);

        return curFont;
    }

    public HSSFFont blackFont12(HSSFWorkbook wb) {
        HSSFFont theFont = wb.createFont(); // 设置字体
        theFont.setFontName("黑体");
        theFont.setCharSet(HSSFFont.DEFAULT_CHARSET); // 设置中文字体,那必须还要再对单元格进行编码设置
        theFont.setFontHeightInPoints((short) 12);

        return theFont;
    }

    public HSSFFont songBoldFont16(HSSFWorkbook wb) {
        HSSFFont curFont = wb.createFont(); // 设置字体
        curFont.setFontName("宋体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET); // 设置中文字体,那必须还要再对单元格进行编码设置
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
        curFont.setFontHeightInPoints((short) 16);

        return curFont;
    }

    public short money1Format(HSSFWorkbook wb) {
        HSSFDataFormat format = wb.createDataFormat();
        return format.getFormat("#,###,###.0"); // 设置格式
    }

    public short money2Format(HSSFWorkbook wb) {
        HSSFDataFormat format = wb.createDataFormat();
        return format.getFormat("#,###,###.00"); // 设置格式
    }

    public short rmb2Format(HSSFWorkbook wb) {
        HSSFDataFormat format = wb.createDataFormat();
        return format.getFormat("\"¥\"#,###,###.00"); // 设置格式
    }

    public short rmb4Format(HSSFWorkbook wb) {
        HSSFDataFormat format = wb.createDataFormat();
        return format.getFormat("\"¥\"#,###,##0.00"); // 设置格式
    }

    public short datevENFormat(HSSFWorkbook wb) {
        HSSFDataFormat format = wb.createDataFormat();
        return format.getBuiltinFormat("m/d/yy"); // 设置格式
    }

    // 指定图片类型为jpg
    public void setPicture(HSSFWorkbook wb, HSSFPatriarch patriarch, String pic, int iRow, int iCol) throws IOException {
        // 判断文件是否存在
        File imgFile = new File(pic);
        if (imgFile.exists()) {
            // 图片处理
            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
            BufferedImage bufferImg = ImageIO.read(imgFile);
            ImageIO.write(bufferImg, "jpg", byteArrayOut);

            HSSFClientAnchor anchor = new HSSFClientAnchor(190, 0, 1000, 0, (short) (iCol), iRow - 1, (short) (iCol + 1), iRow);
            patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
        }
    }

    // 指定图片类型为jpg
    public void setPicture(HSSFWorkbook wb, HSSFPatriarch patriarch, String pic, int iRowStart, int iColStart, int iRowStop, int iColStop) throws IOException {
        // 判断文件是否存在
        File imgFile = new File(pic);
        if (imgFile.exists()) {
            // 图片处理
            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
            BufferedImage bufferImg = ImageIO.read(imgFile);
            ImageIO.write(bufferImg, "jpg", byteArrayOut);

            // 左,上(0-255),右(0-1023),下
            HSSFClientAnchor anchor = new HSSFClientAnchor(20, 1, 1018, 0, (short) (iColStart), iRowStart, (short) (iColStop), iRowStop);
            patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
        }
    }

    // 画线
    public void setLine(HSSFWorkbook wb, HSSFPatriarch patriarch, int iRowStart, int iColStart, int iRowStop, int iColStop) {
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 350, 0, (short) (iColStart), iRowStart, (short) (iColStop), iRowStop);
        HSSFSimpleShape lineShape = patriarch.createSimpleShape(anchor);
        lineShape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
    }

    // 计算行高度,实现行自动适应高度 defaultRowHeight = 12.00f; //每一行的高度指定   目前只实现根据回车多行来判断,不能根据单元格宽度自动回行来判断
    public float getCellAutoHeight(String str, float defaultRowHeight) {
        if (str == null) {
            return defaultRowHeight;
        }
        float height = 0.00f;
        int n = 0;
        if (str.endsWith("\n")) {
            n = str.split("\n").length; // 回车个数
        } else {
            n = str.split("\n").length + 1; // 回车个数
        }
        height = defaultRowHeight * n;

        return height; // 计算
    }

    //计算字符串高度
    public float getregex(String charStr) {
        if (charStr.equals(" ")) {
            return 0.5f;
        }
        if (Pattern.compile("^[A-Za-z0-9]+$").matcher(charStr).matches()) {
            return 0.5f;
        }
        // 判断是否为全角
        if (Pattern.compile("^[\u4e00-\u9fa5]+$").matcher(charStr).matches()) {
            return 1.00f;
        }
        if (Pattern.compile("^x00-xff]+$").matcher(charStr).matches()) {
            return 1.00f;
        }
        return 0.5f;
    }

    public HSSFCellStyle titlev12(HSSFWorkbook wb, HSSFFont blackFont) {
        HSSFCellStyle curStyle = wb.createCellStyle();

        curStyle.setFont(blackFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle nobox(HSSFWorkbook wb) {
        HSSFCellStyle curStyle = wb.createCellStyle();

        curStyle.setBorderTop(HSSFCellStyle.BORDER_NONE); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_NONE); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_NONE); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_NONE); // 实线右边框

        curStyle.setTopBorderColor((short) 0);

        return curStyle;
    }

    // 实现打印时为白框,目的就是实现涂去上行的下边框线 by tony 20110709
    public HSSFCellStyle whiteBox(HSSFWorkbook wb) {
        HSSFCellStyle curStyle = wb.createCellStyle();

        curStyle.setTopBorderColor(HSSFColor.WHITE.index);
        curStyle.setRightBorderColor(HSSFColor.WHITE.index);
        curStyle.setBottomBorderColor(HSSFColor.WHITE.index);
        curStyle.setLeftBorderColor(HSSFColor.WHITE.index);

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

        return curStyle;
    }

    public HSSFCellStyle normalv12(HSSFWorkbook wb, HSSFFont defaultFont12) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont12);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle normalv10(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont10);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle bnormalv12(HSSFWorkbook wb, HSSFFont defaultFont12) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont12);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle moneyrv10_BorderThin(HSSFWorkbook wb, HSSFFont defaultFont10, short rmb4Format) {
        HSSFCellStyle curStyle = wb.createCellStyle();

        curStyle.setFont(defaultFont10);
        curStyle.setDataFormat(rmb4Format);

        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

        return curStyle;
    }

    public HSSFCellStyle numberrv10_BorderThin(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont10);

        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

        return curStyle;
    }

    public HSSFCellStyle moneyrv12_BorderThin(HSSFWorkbook wb, HSSFFont defaultFont12, short rmb2Format) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont12);
        curStyle.setDataFormat(rmb2Format);

        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

        return curStyle;
    }

    public HSSFCellStyle money1(HSSFWorkbook wb, HSSFFont defaultFont10, short money1Format) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont10);
        curStyle.setDataFormat(money1Format);

        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle money2(HSSFWorkbook wb, HSSFFont defaultFont10, short money2Format) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont10);
        curStyle.setDataFormat(money2Format);

        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle datevEN(HSSFWorkbook wb, HSSFFont defaultFont10, short datevENFormat) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setFont(defaultFont10);
        curStyle.setDataFormat(datevENFormat);

        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle notet10(HSSFWorkbook wb) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true); // 换行

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle notevt10(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true); // 换行
        curStyle.setFont(defaultFont10);

        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP); // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle noterv10(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true); // 换行
        curStyle.setFont(defaultFont10);

        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }
    
    public HSSFCellStyle noterv10NoWrap(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(false);                          //换行   
        curStyle.setFont(defaultFont10);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }     

    public HSSFCellStyle notehv10(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true);                                     // 换行
        curStyle.setFont(defaultFont10);
        
        curStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);     // 单元格垂直居中

        return curStyle;
    }

    // 横向居左,垂直居中
    public HSSFCellStyle notehlv10(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true); // 换行
        curStyle.setFont(defaultFont10);
        
        curStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        return curStyle;
    }

    // 横向居右,垂直居中
    public HSSFCellStyle notehrv10(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true);                                     // 换行
        curStyle.setFont(defaultFont10);
        
        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);     // 单元格垂直居中

        return curStyle;
    }

    public HSSFCellStyle notehv10_BorderThin(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true); // 换行

        curStyle.setFont(defaultFont10);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 单元格垂直居中

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

        return curStyle;
    }

    public HSSFCellStyle notecv10_BorderThin(HSSFWorkbook wb, HSSFFont defaultFont10) {
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true);                                     // 换行
        curStyle.setFont(defaultFont10);
        curStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);     // 单元格垂直居中

        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);                 // 实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);             // 实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);             // 实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);                 // 实线右边框

        return curStyle;
    }

}



package cn.itcast.jx.print;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
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.hssf.util.CellRangeAddress;

import cn.itcast.jx.domain.Contract;
import cn.itcast.jx.domain.ContractProduct;
import cn.itcast.jx.util.DownloadUtil;
import cn.itcast.jx.util.UtilFuns;
import cn.itcast.jx.util.file.PoiUtil;

/**
 * @Description: 手工POI写excel文件
 * @Author: 
 * @Company: 
 */
public class ContractPrint{
    
    
    
    public void print(Contract contract,String path, HttpServletResponse response) throws Exception{
        //相同厂家的信息一起打印
        Set oList = contract.getContractProducts();
        UtilFuns utilFuns = new UtilFuns();
        String tempXlsFile = path + "make/xlsprint/tCONTRACT.xls";        //获取模板文件
        
        //填写每页的内容,之后在循环每页读取打印
        Map pageMap = null;
        List pageList = new ArrayList();            //打印页
        
        ContractProduct oProduct = null;
        String stars = "";
        for(int j=0;j             stars += "★";
        }
        
        String oldFactory = "";
        for(int i=0;i             oProduct = oList.iterator().next();    //获得货物
            pageMap = new HashMap();    //每页的内容
            
            pageMap.put("Offeror", "收 购 方:" + contract.getOfferor());
            pageMap.put("Factory", "生产工厂:" + oProduct.getFactory().getFactoryName());
            pageMap.put("ContractNo", "合 同 号:" + contract.getContractNo());
            pageMap.put("Contacts", "联 系 人:" + oProduct.getFactory().getContacts());
            pageMap.put("SigningDate", "签单日期:"+UtilFuns.formatDateTimeCN(UtilFuns.dateTimeFormat(contract.getSigningDate())));
            pageMap.put("Phone", "电    话:" + oProduct.getFactory().getPhone());
            pageMap.put("InputBy", "制单:" + contract.getInputBy());
            pageMap.put("CheckBy", "审单:"+ utilFuns.fixSpaceStr(contract.getCheckBy(),26)+"验货员:"+utilFuns.convertNull(contract.getInspector()));
            pageMap.put("Remark", "  "+UtilFuns.convertNull(contract.getRemark()));
            pageMap.put("Crequest", "  "+UtilFuns.convertNull(contract.getCrequest()));
            
            pageMap.put("ProductImage", oProduct.getProductImage());
            pageMap.put("ProductDesc", oProduct.getProductDesc());
            pageMap.put("Cnumber", String.valueOf(oProduct.getCnumber().doubleValue()));
            if(oProduct.getPackingUnit().equals("PCS")){
                pageMap.put("PackingUnit", "只");
            }else if(oProduct.getPackingUnit().equals("SETS")){
                pageMap.put("PackingUnit", "套");
            }
            pageMap.put("Price", String.valueOf(oProduct.getPrice().doubleValue()));
            pageMap.put("ProductNo", oProduct.getProductNo());
            
            oldFactory = oProduct.getFactory().getFactoryName();
            
            if(contract.getPrintStyle().equals("2")){
                i++;    //读取第二个货物信息
                if(i                     oProduct = oList.iterator().next();
                    
                    if(oProduct.getFactory().getFactoryName().equals(oldFactory)){    //厂家不同另起新页打印,除去第一次的比较
                        
                        pageMap.put("ProductImage2", oProduct.getProductImage());
                        pageMap.put("ProductDesc2", oProduct.getProductDesc());
                        pageMap.put("Cnumber2", String.valueOf(oProduct.getCnumber().doubleValue()));
                        if(oProduct.getPackingUnit().equals("PCS")){
                            pageMap.put("PackingUnit2", "只");
                        }else if(oProduct.getPackingUnit().equals("SETS")){
                            pageMap.put("PackingUnit2", "套");
                        }                        
                        pageMap.put("Price2", String.valueOf(oProduct.getPrice().doubleValue()));
                        //pageMap.put("Amount2", String.valueOf(oProduct.getAmount().doubleValue()));            //在excel中金额采用公式,所以无需准备数据
                        pageMap.put("ProductNo2", oProduct.getProductNo());
                    }else{
                        i--;    //tip:list退回
                    }
                }else{
                    pageMap.put("ProductNo2", null);    //后面依据此判断是否有第二个货物
                }
            }
            
            pageMap.put("ContractDesc", stars+" 货物描述");            //重要程度 + 货物描述
            
            pageList.add(pageMap);
        }
        
        int cellHeight = 96;    //一个货物的高度            用户需求,一个货物按192高度打印,后来又嫌难看,打印高度和2款高度一样。
//        if(contract.getPrintStyle().equals("2")){
//            cellHeight = 96;    //两个货物的高度
//        }
        
        PoiUtil poiUtil = new PoiUtil();
        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(tempXlsFile));    //打开excel文件
        HSSFFont defaultFont10 = poiUtil.defaultFont10(wb);        //设置字体
        HSSFFont defaultFont12 = poiUtil.defaultFont12(wb);        //设置字体
        HSSFFont blackFont = poiUtil.blackFont12(wb);            //设置字体
        Short rmb2Format = poiUtil.rmb2Format(wb);                //设置格式
        Short rmb4Format = poiUtil.rmb4Format(wb);                //设置格式
        

        HSSFSheet sheet = wb.getSheetAt(0);                //选择第一个工作簿
        wb.setSheetName(0, "购销合同");                    //设置工作簿的名称


        //sheet.setDefaultColumnWidth((short) 20);         // 设置每列默认宽度
        
//        POI分页符有BUG,必须在模板文件中插入一个分页符,然后再此处删除预设的分页符;最后在下面重新设置分页符。
//        sheet.setAutobreaks(false);
//        int iRowBreaks[] = sheet.getRowBreaks();
//        sheet.removeRowBreak(3);
//        sheet.removeRowBreak(4);
//        sheet.removeRowBreak(5);
//        sheet.removeRowBreak(6);
        
        CellRangeAddress region = null;
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();        //add picture

        HSSFRow nRow = null;
        HSSFCell nCell   = null;
        int curRow = 0;
        
        //打印每页
        Map printMap = null;
        for(int p=0;p             printMap = pageList.get(p);
            
            if(p>0){
                sheet.setRowBreak(curRow++);    //在第startRow行设置分页符
            }
            
            
            //设置logo图片
            poiUtil.setPicture(wb, patriarch, path+"make/xlsprint/logo.jpg", curRow, 2, curRow+4, 2);
            
            //header
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(21);
            
            nCell   = nRow.createCell((3));
            nCell.setCellValue("SHAANXI");
            nCell.setCellStyle(headStyle(wb));

            //header
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(41);
            
            nCell   = nRow.createCell((3));
            nCell.setCellValue("     JK INTERNATIONAL ");
            nCell.setCellStyle(tipStyle(wb));

            curRow++;
            
            //header
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(20);
            
            nCell   = nRow.createCell((1));
            nCell.setCellValue("                 西经济技术开发区西城一路27号无迪大厦19楼");
            nCell.setCellStyle(addressStyle(wb));
            
            //header
            nCell   = nRow.createCell((6));
            nCell.setCellValue(" CO., LTD.");
            nCell.setCellStyle(ltdStyle(wb));

            //header
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(15);
            
            nCell   = nRow.createCell((1));
            nCell.setCellValue("                   TEL: 0086-29-86339371  FAX: 0086-29-86303310               E-MAIL: [email protected]");
            nCell.setCellStyle(telStyle(wb));
            
            //line
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(7);
            
            poiUtil.setLine(wb, patriarch, curRow, 2, curRow, 8);    //draw line

            //header
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(30);
            
            nCell   = nRow.createCell((4));
            nCell.setCellValue("    购   销   合   同");
            nCell.setCellStyle(titleStyle(wb));
            
            //Offeror
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(20);
            
            nCell   = nRow.createCell((1));
            nCell.setCellValue(printMap.get("Offeror"));
            nCell.setCellStyle(poiUtil.titlev12(wb, blackFont));

            //Facotry
            nCell   = nRow.createCell((5));
            nCell.setCellValue(printMap.get("Factory"));
            nCell.setCellStyle(poiUtil.titlev12(wb, blackFont));
            
            //ContractNo
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(20);
            
            nCell   = nRow.createCell(1);
            nCell.setCellValue(printMap.get("ContractNo"));
            nCell.setCellStyle(poiUtil.titlev12(wb, blackFont));
            
            //Contacts
            nCell  = nRow.createCell(5);
            nCell.setCellValue(printMap.get("Contacts"));
            nCell.setCellStyle(poiUtil.titlev12(wb, blackFont));
            
            //SigningDate
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(20);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue(printMap.get("SigningDate"));
            nCell.setCellStyle(poiUtil.titlev12(wb, blackFont));
            
            //Phone
            nCell = nRow.createCell(5);
            nCell.setCellValue(printMap.get("Phone"));
            nCell.setCellStyle(poiUtil.titlev12(wb, blackFont));
            
            //importNum
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(24);
            
            region = new CellRangeAddress(curRow-1, curRow-1, 1, 3);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue("产品");
            nCell.setCellStyle(thStyle(wb));        
            
            nCell = nRow.createCell(2);
            nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));
            
            nCell = nRow.createCell(3);
            nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));
            
            nCell = nRow.createCell(4);
            nCell.setCellValue(printMap.get("ContractDesc"));
            nCell.setCellStyle(thStyle(wb));    
            
            region = new CellRangeAddress(curRow-1, curRow-1, 5, 6);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(5);
            nCell.setCellValue("数量");
            nCell.setCellStyle(thStyle(wb));    
            
            nCell = nRow.createCell(6);
            nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));            
            
            nCell = nRow.createCell(7);
            nCell.setCellValue("单价");
            nCell.setCellStyle(thStyle(wb));                        
            
            nCell = nRow.createCell(8);
            nCell.setCellValue("总金额");
            nCell.setCellStyle(thStyle(wb));                        


            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(96);
            
            region = new CellRangeAddress(curRow-1, curRow-1, 1, 3);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            //插入产品图片
            if(UtilFuns.isNotEmpty(printMap.get("ProductImage"))){
                System.out.println(printMap.get("ProductImage"));
                poiUtil.setPicture(wb, patriarch, path+"ufiles/jquery/"+printMap.get("ProductImage"), curRow-1, 1, curRow, 3);
            }
            
            nCell = nRow.createCell(2);
            nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));
            
            nCell = nRow.createCell(3);
            nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));
            
            //ProductDesc
            region = new CellRangeAddress(curRow-1, curRow, 4, 4);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(4);
            nCell.setCellValue(printMap.get("ProductDesc"));
            nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));        
            
            //Cnumber
            region = new CellRangeAddress(curRow-1, curRow, 5, 5);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(5);
            nCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
            nCell.setCellValue(Double.parseDouble(printMap.get("Cnumber")));
            nCell.setCellStyle(poiUtil.numberrv10_BorderThin(wb, defaultFont10));    
            
            //Unit
            region = new CellRangeAddress(curRow-1, curRow, 6, 6);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(6);
            nCell.setCellValue(printMap.get("PackingUnit"));
            nCell.setCellStyle(poiUtil.moneyrv10_BorderThin(wb, defaultFont10, rmb4Format));    
            
            //Price
            region = new CellRangeAddress(curRow-1, curRow, 7, 7);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(7);
            nCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
            nCell.setCellValue(Double.parseDouble(printMap.get("Price")));
            nCell.setCellStyle(poiUtil.moneyrv10_BorderThin(wb, defaultFont10, rmb4Format));
            
            
            //Amount
            region = new CellRangeAddress(curRow-1, curRow, 8, 8);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            nCell = nRow.createCell(8);
            if(UtilFuns.isNotEmpty(printMap.get("Cnumber")) && UtilFuns.isNotEmpty(printMap.get("Price"))){
                nCell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
                nCell.setCellFormula("F"+String.valueOf(curRow)+"*H"+String.valueOf(curRow));
            }
            nCell.setCellStyle(poiUtil.moneyrv10_BorderThin(wb, defaultFont10, rmb4Format));            

            curRow++;
            
            region = new CellRangeAddress(curRow-1, curRow-1, 1, 3);    //纵向合并单元格
            sheet.addMergedRegion(region);
            
            //ProductNo
            nRow = sheet.createRow(curRow-1);
            nRow.setHeightInPoints(24);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue(printMap.get("ProductNo"));
            nCell.setCellStyle(poiUtil.notecv10_BorderThin(wb, defaultFont10));
            
            for(int j=2;j<9;j++){
                nCell = nRow.createCell(j);
                nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));
            }
            
            
            
            if(contract.getPrintStyle().equals("2") && UtilFuns.isNotEmpty(printMap.get("ProductNo2"))){
                nRow = sheet.createRow(curRow++);
                nRow.setHeightInPoints(96);
                
                region = new CellRangeAddress(curRow-1, curRow-1, 1, 3);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                //插入产品图片
                if(UtilFuns.isNotEmpty(printMap.get("ProductImage2"))){
                    System.out.println(printMap.get("ProductImage2"));
                    poiUtil.setPicture(wb, patriarch, path+"ufiles/jquery/"+printMap.get("ProductImage2"), curRow-1, 1, curRow, 3);
                }
                
                //ProductDesc
                region = new CellRangeAddress(curRow-1, curRow, 4, 4);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                nCell = nRow.createCell(4);
                nCell.setCellValue(printMap.get("ProductDesc2"));
                nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));        
                
                //Cnumber
                region = new CellRangeAddress(curRow-1, curRow, 5, 5);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                nCell = nRow.createCell(5);
                nCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                nCell.setCellValue(Double.parseDouble(printMap.get("Cnumber2")));
                nCell.setCellStyle(poiUtil.numberrv10_BorderThin(wb, defaultFont10));    
                
                //Unit
                region = new CellRangeAddress(curRow-1, curRow, 6, 6);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                nCell = nRow.createCell(6);
                nCell.setCellValue(printMap.get("PackingUnit2"));
                nCell.setCellStyle(poiUtil.moneyrv10_BorderThin(wb, defaultFont10, rmb4Format));    
                
                //Price
                region = new CellRangeAddress(curRow-1, curRow, 7, 7);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                nCell = nRow.createCell(7);
                nCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                nCell.setCellValue(Double.parseDouble(printMap.get("Price2")));
                nCell.setCellStyle(poiUtil.moneyrv10_BorderThin(wb, defaultFont10, rmb4Format));
                
                
                //Amount
                region = new CellRangeAddress(curRow-1, curRow, 8, 8);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                nCell = nRow.createCell(8);
                if(UtilFuns.isNotEmpty(printMap.get("Cnumber2")) && UtilFuns.isNotEmpty(printMap.get("Price2"))){
                    nCell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
                    nCell.setCellFormula("F"+String.valueOf(curRow)+"*H"+String.valueOf(curRow));
                }
                nCell.setCellStyle(poiUtil.moneyrv10_BorderThin(wb, defaultFont10, rmb4Format));        
                
                curRow++;
                
                region = new CellRangeAddress(curRow-1, curRow-1, 1, 3);    //纵向合并单元格
                sheet.addMergedRegion(region);
                
                nRow = sheet.createRow(curRow-1);
                nRow.setHeightInPoints(24);
                
                nCell = nRow.createCell(1);
                nCell.setCellValue(printMap.get("ProductNo2"));
                nCell.setCellStyle(poiUtil.notecv10_BorderThin(wb, defaultFont10));            
                
                //合并单元格画线
                for(int j=2;j<9;j++){
                    nCell = nRow.createCell(j);
                    nCell.setCellStyle(poiUtil.notehv10_BorderThin(wb, defaultFont10));
                }                
            }
            
            
            //InputBy
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(24);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue(printMap.get("InputBy"));
            nCell.setCellStyle(poiUtil.bnormalv12(wb,defaultFont12));
            
            //CheckBy+inspector
            
            nCell = nRow.createCell(4);
            nCell.setCellValue(printMap.get("CheckBy"));
            nCell.setCellStyle(poiUtil.bnormalv12(wb,defaultFont12));
            
            //if(contract.getPrintStyle().equals("2") && UtilFuns.isNotEmpty(printMap.get("ProductNo2"))){
                
                nCell = nRow.createCell(7);
                nCell.setCellValue("总金额:");
                nCell.setCellStyle(bcv12(wb));
                
                //TotalAmount
                nRow = sheet.createRow(curRow-1);
                nRow.setHeightInPoints(24);
                if(UtilFuns.isNotEmpty(printMap.get("Cnumber"))&&UtilFuns.isNotEmpty(printMap.get("Price"))){
                    nCell  = nRow.createCell(8);
                    nCell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
                    nCell.setCellFormula("SUM(I"+String.valueOf(curRow-4)+":I"+String.valueOf(curRow-1)+")");
                    nCell.setCellStyle(poiUtil.moneyrv12_BorderThin(wb,defaultFont12,rmb2Format));        
                }
            //}
            
            
            //note
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(21);
            
            nCell = nRow.createCell(2);
            nCell.setCellValue(printMap.get("Remark"));
            nCell.setCellStyle(noteStyle(wb));            
            
            //Crequest
            region = new CellRangeAddress(curRow, curRow, 1, 8);    //指定合并区域
            sheet.addMergedRegion(region);
            
            nRow = sheet.createRow(curRow++);
            float height = poiUtil.getCellAutoHeight(printMap.get("Crequest"), 12f);        //自动高度
            nRow.setHeightInPoints(height);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue(printMap.get("Crequest"));
            nCell.setCellStyle(requestStyle(wb));
            
            //space line
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(20);
            
            //duty
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(32);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue("未按以上要求出货而导致客人索赔,由供方承担。");
            nCell.setCellStyle(dutyStyle(wb));    
            
            //space line
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(32);
            
            //buyer
            nRow = sheet.createRow(curRow++);
            nRow.setHeightInPoints(25);
            
            nCell = nRow.createCell(1);
            nCell.setCellValue("    收购方负责人:");
            nCell.setCellStyle(dutyStyle(wb));                
            
            //seller
            nCell = nRow.createCell(5);
            nCell.setCellValue("供方负责人:");
            nCell.setCellStyle(dutyStyle(wb));    
            
            curRow++;

        }

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();            //生成流对象
        wb.write(byteArrayOutputStream);                                                    //将excel写入流

        //工具类,封装弹出下载框:        
        String outFile = "购销合同.xls";
        DownloadUtil down = new DownloadUtil();
        down.download(byteArrayOutputStream, response, outFile);

    }
    
    private HSSFCellStyle leftStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true);                          //换行   
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        //fTitle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)10);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);                //实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);                //实线右边框
        
        return curStyle;
    }  
    
    private HSSFCellStyle headStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("Comic Sans MS");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setItalic(true);
        curFont.setFontHeightInPoints((short)16);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }  
    
    private HSSFCellStyle tipStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("Georgia");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)28);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }  
    
    private HSSFCellStyle addressStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("宋体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        //fTitle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)10);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }  
    
    private HSSFCellStyle ltdStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("Times New Roman");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setItalic(true);
        curFont.setFontHeightInPoints((short)16);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }     
    
    private HSSFCellStyle telStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("宋体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        //fTitle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)9);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }     
    
    private HSSFCellStyle titleStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("黑体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)18);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }     
    
    private HSSFCellStyle requestStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        curStyle.setWrapText(true);                          //换行   
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("宋体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setFontHeightInPoints((short)10);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }     
    
    private HSSFCellStyle dutyStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("黑体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)16);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }     
    
    private HSSFCellStyle noteStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("宋体");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)12);
        curStyle.setFont(curFont);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }
    
    public HSSFCellStyle thStyle(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                    //设置字体
        curFont.setFontName("宋体");
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    //加粗
        curFont.setFontHeightInPoints((short)12);
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);        //设置中文字体,那必须还要再对单元格进行编码设置
        
        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);                //实线右边框
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);                //实线右边框
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);            //实线右边框
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);                //实线右边框
        
        curStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }  
    
    public HSSFCellStyle bcv12(HSSFWorkbook wb){
        HSSFCellStyle curStyle = wb.createCellStyle();
        HSSFFont curFont = wb.createFont();                        //设置字体
        curFont.setFontName("Times New Roman");
        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);            //设置中文字体,那必须还要再对单元格进行编码设置
        
        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);        //加粗
        curFont.setFontHeightInPoints((short)12);
        curStyle.setFont(curFont);
        
        curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);                //实线
        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);            //粗实线
        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);            //实线
        curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);                //实线
        
        curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        //单元格垂直居中
        
        return curStyle;
    }        
    
}



你可能感兴趣的:(关于POI导出数据的util与工具类)