分享

java应用集锦3:正则表达式 excel操作之jxl (转)

 临风笛 2010-07-14

最近项目开发中对excel操作比较频繁,并结合正则表达式进行了一些处理,整理一下.


1.正则表达式常用方法

Java代码 复制代码
  1. /**  
  2.      * 在第一个字符串中查找匹配字符串的个数  
  3.      * @param str    
  4.      * @param regexStr  
  5.      * @return  
  6.      */  
  7.     public static int count(String str,String regexStr){   
  8.         int count = 0;   
  9.         Pattern pt = Pattern.compile(regexStr);   
  10.         Matcher m = pt.matcher(str);   
  11.         int start = 0;   
  12.         while(m.find()){   
  13.             count++;   
  14.             str = str.replaceFirst(regexStr, "");   
  15.         }   
  16.         return count;   
  17.     }   
  18.   
  19. /**  
  20.      * 根据正则表达式分割str字符串成为一个一个的小的单元!  
  21.          * (实际使用:在一个类似语法分析的模块中发挥重要作用)  
  22.      * 例如:3+5*4  根据正则表达式+-\*  分割成数组  3,+,5,*,4    
  23.      * @param str  
  24.      * @param regexStr  
  25.      * @return  
  26.      */  
  27.     public static List splitByStr(String str,String regexStr){   
  28.         List temp = new ArrayList();   
  29.         Pattern pt = Pattern.compile(regexStr);   
  30.         Matcher m = pt.matcher(str);   
  31.         int start = 0;   
  32.         while(m.find()){   
  33.             //去掉下面的字符串中为空串的情况!   
  34.             if(m.start()!=start)   
  35.                 temp.add(str.substring(start, m.start()));   
  36.             temp.add(str.substring(m.start(),m.end()));   
  37.             start = m.end();   
  38.         }   
  39.         temp.add(str.substring(start));   
  40.         return temp;   
  41.     }   
  42.   
  43.       /**  
  44.      * 检查是否含有指定的正则表达式匹配的子串.  
  45.      * @param str 目标字符串  
  46.      * @param regex 正则表达式,如果正则表达式含有"^......$"就是查找整个字符串对象是否符合正则表达式.  
  47.      * @return  
  48.      */  
  49.     public static boolean checkInclude(String str,String regex){   
  50.          Pattern pattern = Pattern.compile(regex);   
  51.          Matcher matcher = null;   
  52.          matcher = pattern.matcher(str);   
  53.          return matcher.find();   
  54.     }   
  55.            
  56.     /**  
  57.      * 方法字符串中符合正则表达式的子串的集合.  
  58.      * @param str  
  59.      * @param regex  
  60.      * @return  
  61.      */  
  62.     public static List getRightSubStr(String str, String regex) {   
  63.         List ans = new ArrayList();   
  64.         Pattern pattern = Pattern.compile(regex);   
  65.         Matcher matcher = pattern.matcher(str);   
  66.         while (matcher.find()) {   
  67.             //注意要下面的goup()函数中可以含有数字,表示查找得到正则表达式中的goup匹配串.   
  68.             ans.add(matcher.group());   
  69.             System.out.println("找到匹配的字符串 \"" + matcher.group()   
  70.                     + "\" 开始于 " + matcher.start()   
  71.                     + " 结束于 " + matcher.end() + ".");   
  72.         }   
  73.         return ans;   
  74.     }  

 下面是java正则表达式经常使用的一些方法和说明:

Java代码 复制代码
  1. 1)使用matches方法快速建设是否表示给定的输入字符串:Pattern.matches("\\d","1")返回true  
  2. 2)split(string)使用方法:Pattern.compile(":").split("one:two:three:four:five");  返回:解析出“one two three four five”单词   
  3. 再比如使用数字作为一个分割字符串的方法:(注意下面的\\d不是正则表达式,而是前面加了一个转义符号\)   
  4. Pattern.compile("\\d").split("one9two4three7four1five");也返回相同的结果。。   
  5. 3)在String类中有的几个与Pattern类似的方法:   
  6. public boolean matches(String regex):   
  7. public String[] split(String regex, int limit):   
  8. public String[] split(String regex):   
  9. public String replace(CharSequence target,CharSequence replacement):   
  10. 4) Matcher 类中其他一些有用的方法   
  11. 索引方法   
  12.   索引方法(index methods)提供了一些正好在输入字符串中发现匹配的索引值:   
  13.   public int start():返回之前匹配的开始索引。   
  14.   public int start(int group):返回之前匹配操作中通过给定组所捕获序列的开始索引。   
  15.   public int end(): 返回最后匹配字符后的偏移量。   
  16.   public int end(int group): 返回之前匹配操作中通过给定组所捕获序列的最后字符之后的偏移量。    
  17. 研究方法   
  18.   研究方法(study methods)回顾输入的字符串,并且返回一个用于指示是否找到模式的布尔值。   
  19.   public boolean lookingAt(): 尝试从区域开头处开始,输入序列与该模式匹配。   
  20.   public boolean find(): 尝试地寻找输入序列中,匹配模式的下一个子序列。   
  21.   public boolean find(int start): 重置匹配器,然后从指定的索引处开始,尝试地寻找输入序列中,匹配模式的下一个子序列。   
  22.   public boolean matches(): 尝试将整个区域与模式进行匹配    
  23. 替换方法   
  24.   替换方法(replacement methods)用于在输入的字符串中替换文本有用处的方法。   
  25.   public Matcher appendReplacement(StringBuffer sb, String replacement):实现非结尾处的增加和替换操作。   
  26.   public StringBuffer appendTail(StringBuffer sb):实现结尾处的增加和替换操作。   
  27.   public String replaceAll(String replacement):使用给定的替换字符串来替换输入序列中匹配模式的每一个子序列。   
  28.   public String replaceFirst(String replacement):使用给定的替换字符串来替换输入序列中匹配模式的第一个子序列。   
  29.   public static String quoteReplacement(String s):返回指定字符串的字面值来替换字符串。这个方法会生成一个字符串,用作 Matcher 的 appendReplacement 方法中的字面值替换 s。所产生的字符串将与作为字面值序列的 s 中的字符序列匹配。斜线(\)和美元符号($)将不再有特殊意义了。   

   正则表达式基础:

字符类
[abc]   a, b 或 c(简单类)
[^abc]         除 a, b 或 c 之外的任意字符(取反)
[a-zA-Z]           a 到 z,或 A 到 Z,包括(范围)
[a-d[m-p]]              a 到 d,或 m 到 p---等价于[a-dm-p](并集) (特别注意这里的并集的方式啊,很特别!!)
[a-z&&[def]]               d,e 或 f(交集)
[a-z&&[^bc]]              除 b 和 c 之外的 a 到 z 字符等价于[ad-z](差集)
[a-z&&[^m-p]]                     a 到 z,并且不包括 m 到 p等价于[a-lq-z](差集)

 

预定义字符类
.         任何字符(匹配或者不匹配行结束符)
\d         数字字符:[0-9]
\t        tab键
\D         非数字字符:[^0-9]
\s         空白字符:[\t\n\x0B\f\r]
\S         非空白字符:[^\s]
\w         单词字符:[a-zA-Z_0-9]
\W         非单词字符:[^\w]

 

边界匹配器
^         行首
$         行尾
\b         单词边界
\B         非单词边界
\A         输入的开头
\G         上一个匹配的结尾
\Z         输入的结尾,仅用于最后的结束符(如果有的话)
\z         输入的结尾

 2.使用jxl进行exlce的基本操作

下面基础代码来自于网络:

Java代码 复制代码
  1. import java.io.File;     
  2. import java.io.FileOutputStream;     
  3. import java.io.OutputStream;     
  4. import java.util.ArrayList;     
  5. import java.util.Date;     
  6.     
  7. import jxl.Cell;     
  8. import jxl.CellType;     
  9. import jxl.Sheet;     
  10. import jxl.Workbook;     
  11. import jxl.WorkbookSettings;     
  12. import jxl.format.Alignment;     
  13. import jxl.format.Border;     
  14. import jxl.format.BorderLineStyle;     
  15. import jxl.format.Colour;     
  16. import jxl.format.VerticalAlignment;     
  17. import jxl.write.Formula;     
  18. import jxl.write.Label;     
  19. import jxl.write.NumberFormat;     
  20. import jxl.write.WritableCellFeatures;     
  21. import jxl.write.WritableCellFormat;     
  22. import jxl.write.WritableFont;     
  23. import jxl.write.WritableSheet;     
  24. import jxl.write.WritableWorkbook;     
  25. import jxl.write.WriteException;     
  26.     
  27. public class JExcelUtils {     
  28.     
  29.     /**   
  30.      * 生成Excel文件   
  31.      * @param path         文件路径   
  32.      * @param sheetName    工作表名称   
  33.      * @param dataTitles   数据标题   
  34.      */    
  35.    public void createExcelFile(String path,String sheetName,String[] dataTitles){     
  36.        WritableWorkbook workbook;     
  37.        try{     
  38.            OutputStream os=new FileOutputStream(path);      
  39.            workbook=Workbook.createWorkbook(os);      
  40.     
  41.            WritableSheet sheet = workbook.createSheet(sheetName, 0); //添加第一个工作表     
  42.            initialSheetSetting(sheet);     
  43.                 
  44.            Label label;     
  45.            for (int i=0; i<dataTitles.length; i++){     
  46.                //Label(列号,行号,内容,风格)     
  47.                label = new Label(i, 0, dataTitles[i],getTitleCellFormat());      
  48.                sheet.addCell(label);      
  49.            }     
  50.     
  51.            //插入一行     
  52.            insertRowData(sheet,1,new String[]{"200201001","张三","100","60","100","260"},getDataCellFormat(CellType.STRING_FORMULA));     
  53.                 
  54.            //一个一个插入行     
  55.            label = new Label(02,"200201002",getDataCellFormat(CellType.STRING_FORMULA));      
  56.            sheet.addCell(label);     
  57.                 
  58.            label = new Label(12,"李四",getDataCellFormat(CellType.STRING_FORMULA));      
  59.            sheet.addCell(label);     
  60.                 
  61.            insertOneCellData(sheet,2,2,70.5,getDataCellFormat(CellType.NUMBER));     
  62.            insertOneCellData(sheet,3,2,90.523,getDataCellFormat(CellType.NUMBER));     
  63.            insertOneCellData(sheet,4,2,60.5,getDataCellFormat(CellType.NUMBER));     
  64.     
  65.            insertFormula(sheet,5,2,"C3+D3+E3",getDataCellFormat(CellType.NUMBER_FORMULA));     
  66.                 
  67.            //插入日期     
  68.            mergeCellsAndInsertData(sheet, 0353new Date(), getDataCellFormat(CellType.DATE));     
  69.                 
  70.            workbook.write();      
  71.            workbook.close();     
  72.        }catch(Exception e){     
  73.            e.printStackTrace();     
  74.        }     
  75.    }     
  76.         
  77.    /**   
  78.     * 初始化表格属性   
  79.     * @param sheet   
  80.     */    
  81.    public void initialSheetSetting(WritableSheet sheet){     
  82.       try{     
  83.            //sheet.getSettings().setProtected(true); //设置xls的保护,单元格为只读的     
  84.            sheet.getSettings().setDefaultColumnWidth(10); //设置列的默认宽度     
  85.            //sheet.setRowView(2,false);//行高自动扩展      
  86.            //setRowView(int row, int height);--行高      
  87.            //setColumnView(int  col,int width); --列宽     
  88.            sheet.setColumnView(0,20);//设置第一列宽度     
  89.       }catch(Exception e){     
  90.           e.printStackTrace();     
  91.       }     
  92.    }     
  93.         
  94.    /**   
  95.     * 插入公式   
  96.     * @param sheet   
  97.     * @param col   
  98.     * @param row   
  99.     * @param formula   
  100.     * @param format   
  101.     */    
  102.    public void insertFormula(WritableSheet sheet,Integer col,Integer row,String formula,WritableCellFormat format){     
  103.        try{     
  104.            Formula f = new Formula(col, row, formula, format);     
  105.            sheet.addCell(f);     
  106.        }catch(Exception e){     
  107.            e.printStackTrace();     
  108.        }     
  109.    }     
  110.         
  111.    /**   
  112.     * 插入一行数据   
  113.     * @param sheet       工作表   
  114.     * @param row         行号   
  115.     * @param content     内容   
  116.     * @param format      风格   
  117.     */    
  118.    public void insertRowData(WritableSheet sheet,Integer row,String[] dataArr,WritableCellFormat format){     
  119.        try{     
  120.            Label label;     
  121.            for(int i=0;i<dataArr.length;i++){     
  122.                label = new Label(i,row,dataArr[i],format);     
  123.                sheet.addCell(label);     
  124.            }     
  125.        }catch(Exception e){     
  126.            e.printStackTrace();     
  127.        }     
  128.    }     
  129.         
  130.    /**   
  131.     * 插入单元格数据   
  132.     * @param sheet   
  133.     * @param col   
  134.     * @param row   
  135.     * @param data   
  136.     */    
  137.    public void insertOneCellData(WritableSheet sheet,Integer col,Integer row,Object data,WritableCellFormat format){     
  138.        try{     
  139.            if(data instanceof Double){     
  140.                jxl.write.Number  labelNF = new jxl.write.Number(col,row,(Double)data,format);      
  141.                sheet.addCell(labelNF);      
  142.            }else if(data instanceof Boolean){     
  143.                jxl.write.Boolean labelB = new jxl.write.Boolean(col,row,(Boolean)data,format);      
  144.                sheet.addCell(labelB);      
  145.            }else if(data instanceof Date){     
  146.                jxl.write.DateTime labelDT = new jxl.write.DateTime(col,row,(Date)data,format);      
  147.                sheet.addCell(labelDT);      
  148.                setCellComments(labelDT, "这是个创建表的日期说明!");     
  149.            }else{     
  150.                Label label = new Label(col,row,data.toString(),format);     
  151.                sheet.addCell(label);                    
  152.            }     
  153.        }catch(Exception e){     
  154.            e.printStackTrace();     
  155.        }     
  156.     
  157.   }     
  158.         
  159.    /**   
  160.     * 合并单元格,并插入数据   
  161.     * @param sheet   
  162.     * @param col_start   
  163.     * @param row_start   
  164.     * @param col_end   
  165.     * @param row_end   
  166.     * @param data   
  167.     * @param format   
  168.     */    
  169.    public void mergeCellsAndInsertData(WritableSheet sheet,Integer col_start,Integer row_start,Integer col_end,Integer row_end,Object data, WritableCellFormat format){     
  170.       try{     
  171.           sheet.mergeCells(col_start,row_start,col_end,row_end);// 左上角到右下角     
  172.           insertOneCellData(sheet, col_start, row_start, data, format);     
  173.       }catch(Exception e){     
  174.           e.printStackTrace();     
  175.       }     
  176.     
  177.    }     
  178.         
  179.    /**   
  180.     * 给单元格加注释   
  181.     * @param label   
  182.     * @param comments   
  183.     */    
  184.    public void setCellComments(Object label,String comments){     
  185.        WritableCellFeatures cellFeatures = new WritableCellFeatures();     
  186.        cellFeatures.setComment(comments);     
  187.        if(label instanceof jxl.write.Number){     
  188.            jxl.write.Number num = (jxl.write.Number)label;     
  189.            num.setCellFeatures(cellFeatures);     
  190.        }else if(label instanceof jxl.write.Boolean){     
  191.            jxl.write.Boolean bool = (jxl.write.Boolean)label;     
  192.            bool.setCellFeatures(cellFeatures);     
  193.        }else if(label instanceof jxl.write.DateTime){     
  194.            jxl.write.DateTime dt = (jxl.write.DateTime)label;     
  195.            dt.setCellFeatures(cellFeatures);     
  196.        }else{     
  197.            Label _label = (Label)label;     
  198.            _label.setCellFeatures(cellFeatures);     
  199.        }     
  200.    }     
  201.         
  202.    /**   
  203.    * 读取excel   
  204.    * @param inputFile   
  205.    * @param inputFileSheetIndex   
  206.    * @throws Exception   
  207.    */    
  208.    public ArrayList<String> readDataFromExcel(File inputFile, int inputFileSheetIndex){     
  209.       ArrayList<String> list = new ArrayList<String>();     
  210.       Workbook book = null;     
  211.       Cell cell = null;     
  212.       WorkbookSettings setting = new WorkbookSettings();      
  213.       java.util.Locale locale = new java.util.Locale("zh","CN");      
  214.       setting.setLocale(locale);     
  215.       setting.setEncoding("ISO-8859-1");     
  216.       try{     
  217.           book = Workbook.getWorkbook(inputFile, setting);     
  218.       }catch(Exception e){     
  219.           e.printStackTrace();       
  220.       }     
  221.     
  222.       Sheet sheet = book.getSheet(inputFileSheetIndex);     
  223.       for (int rowIndex = 0; rowIndex < sheet.getRows(); rowIndex++) {//行     
  224.        for (int colIndex = 0; colIndex < sheet.getColumns(); colIndex++) {//列     
  225.            cell = sheet.getCell(colIndex, rowIndex);     
  226.            //System.out.println(cell.getContents());     
  227.            list.add(cell.getContents());     
  228.        }     
  229.       }     
  230.       book.close();     
  231.     
  232.       return list;     
  233.    }     
  234.     
  235.    /**   
  236.     * 得到数据表头格式   
  237.     * @return   
  238.     */    
  239.    public WritableCellFormat getTitleCellFormat(){     
  240.        WritableCellFormat wcf = null;     
  241.        try {     
  242.            //字体样式     
  243.            WritableFont wf = new WritableFont(WritableFont.TIMES,12, WritableFont.NO_BOLD,false);//最后一个为是否italic     
  244.            wf.setColour(Colour.RED);     
  245.            wcf = new WritableCellFormat(wf);     
  246.            //对齐方式     
  247.            wcf.setAlignment(Alignment.CENTRE);     
  248.            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);     
  249.            //边框     
  250.            wcf.setBorder(Border.ALL,BorderLineStyle.THIN);     
  251.                 
  252.            //背景色     
  253.            wcf.setBackground(Colour.GREY_25_PERCENT);     
  254.        } catch (WriteException e) {     
  255.         e.printStackTrace();     
  256.        }     
  257.        return wcf;     
  258.    }     
  259.         
  260.    /**   
  261.     * 得到数据格式   
  262.     * @return   
  263.     */    
  264.    public WritableCellFormat getDataCellFormat(CellType type){     
  265.        WritableCellFormat wcf = null;     
  266.        try {     
  267.            //字体样式     
  268.            if(type == CellType.NUMBER || type == CellType.NUMBER_FORMULA){//数字     
  269.               NumberFormat nf = new NumberFormat("#.00");     
  270.               wcf = new WritableCellFormat(nf);      
  271.            }else if(type == CellType.DATE || type == CellType.DATE_FORMULA){//日期     
  272.                jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-MM-dd hh:mm:ss");      
  273.                wcf = new jxl.write.WritableCellFormat(df);      
  274.            }else{     
  275.                WritableFont wf = new WritableFont(WritableFont.TIMES,10, WritableFont.NO_BOLD,false);//最后一个为是否italic     
  276.                wcf = new WritableCellFormat(wf);     
  277.            }     
  278.            //对齐方式     
  279.            wcf.setAlignment(Alignment.CENTRE);     
  280.            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);     
  281.            //边框     
  282.            wcf.setBorder(Border.LEFT,BorderLineStyle.THIN);     
  283.            wcf.setBorder(Border.BOTTOM,BorderLineStyle.THIN);     
  284.            wcf.setBorder(Border.RIGHT,BorderLineStyle.THIN);     
  285.            //背景色     
  286.            wcf.setBackground(Colour.WHITE);     
  287.                 
  288.            wcf.setWrap(true);//自动换行     
  289.                 
  290.        } catch (WriteException e) {     
  291.         e.printStackTrace();     
  292.        }     
  293.        return wcf;     
  294.    }     
  295.         
  296.    /**   
  297.     * 打开文件看看   
  298.     * @param exePath   
  299.     * @param filePath   
  300.     */    
  301.    public void openExcel(String exePath,String filePath){     
  302.        Runtime r=Runtime.getRuntime();      
  303.        String cmd[]={exePath,filePath};      
  304.        try{      
  305.            r.exec(cmd);      
  306.        }catch(Exception e){     
  307.            e.printStackTrace();     
  308.        }     
  309.    }     
  310.         
  311.    public static void main(String[] args){     
  312.        String[] titles = {"学号","姓名","语文","数学","英语","总分"};      
  313.        JExcelUtils jxl = new JExcelUtils();     
  314.        String filePath = "E:/test.xls";     
  315.        jxl.createExcelFile(filePath," 成绩单",titles);     
  316.        jxl.readDataFromExcel(new File(filePath),0);     
  317.        jxl.openExcel("C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE",filePath);     
  318.    }     
  319. }   

 3.下面含有几个十分有用针对excel操作的的工具方法:

 

Java代码 复制代码
  1. import java.io.File;   
  2. import java.util.ArrayList;   
  3. import java.util.HashMap;   
  4. import java.util.List;   
  5. import java.util.Map;   
  6. import java.util.regex.Matcher;   
  7. import java.util.regex.Pattern;   
  8.   
  9. import jxl.Cell;   
  10. import jxl.CellView;   
  11. import jxl.Sheet;   
  12. import jxl.SheetSettings;   
  13. import jxl.Workbook;   
  14. import jxl.format.Alignment;   
  15. import jxl.write.Label;   
  16. import jxl.write.WritableFont;   
  17. import jxl.write.WritableSheet;   
  18. import jxl.write.WritableWorkbook;   
  19.   
  20. /**  
  21.  * jxl操作excel的工具类.  
  22.  *  
  23.  */  
  24. public class JxlTool {   
  25.     public static int count = 1;   
  26.     //存储带有级别信息的内容到位置的映射关系.   
  27.     private static Map levelToLocation = new HashMap();   
  28.        
  29.     public static void readExcel(String fileName) {   
  30.         Workbook wb = null;   
  31.         try {   
  32.             wb = Workbook.getWorkbook(new File(fileName));   
  33.             Sheet[] sheets = wb.getSheets();   
  34.             for(int i=0;i<sheets.length;i++){   
  35.                 Sheet ii = sheets[i];   
  36.                 System.out.println("第"+i+"个sheet的名字是"+ii.getName());   
  37.             }   
  38.         } catch (Exception e) {   
  39.             System.out.println("出现异常" + e);   
  40.             e.printStackTrace();   
  41.         } finally {   
  42.             wb.close();   
  43.         }   
  44.     }   
  45.        
  46.     private static String allChar = "abcdefghijklmnopqrstuvwxyz";   
  47.     /**  
  48.      * 从字符中得到列数.例如K-->10,A-->0,AA-->27  
  49.      * @return  
  50.      */  
  51.     public static int getNumFromExcelStr(String code)   
  52.     {   
  53.         int result = 0;   
  54.         code = code.toLowerCase();   
  55.         if(code.length()>1){   
  56.             char[] c = code.toCharArray();   
  57.             int len = c.length;   
  58.             for(int i=0;i<len;i++){   
  59.                 result+=allChar.indexOf(c[i])+1;   
  60.                 if(i<len-1){   
  61.                     result+=26;   
  62.                 }   
  63.             }   
  64.             result-=1;   
  65.         }   
  66.         else  
  67.             return allChar.indexOf(code);   
  68.         return result;   
  69.     }   
  70.        
  71.     /**  
  72.      * 根据行号和列号得到所在的单元格.例如(3,4)-->"E4"  
  73.      * @param vNum 纵坐标  
  74.      * @param hNum 横坐标  
  75.      * @return  
  76.      */  
  77.     public static String getCellInfo(int hNum,int vNum){   
  78.         char[] cs = allChar.toCharArray();   
  79.         String hStr = "";   
  80.         if(vNum>25){   
  81.             hStr = String.valueOf(cs[vNum/26-1])+String.valueOf(cs[vNum%26-1]);   
  82.         }else{   
  83.             hStr = String.valueOf(cs[vNum]);   
  84.         }   
  85.         return (hStr+Integer.toString((hNum+1))).toUpperCase();   
  86.     }   
  87.   
  88.     /**  
  89.      * 得到一个字符串里面的字符.A12-->A  
  90.      * @param oldStr  
  91.      * @return  
  92.      */  
  93.     public static String getCodeFromStr(String oldStr){   
  94.         return oldStr.replaceAll("\\d""");   
  95.     }   
  96.        
  97.     /**  
  98.      * 得到一个字符串里面的字符.A12-->12  
  99.      * @param oldStr  
  100.      * @return  
  101.      */  
  102.     public static int getNumFromStr(String oldStr){   
  103.         return Integer.parseInt(oldStr.replaceAll("[a-zA-Z]"""))-1;   
  104.     }   
  105.        
  106.     /**  
  107.      * 读取指定excel中的指定sheet的某一块的数据....用于模板里面读取单元格.  
  108.      * @param fileName  
  109.      * @param sheetIndex  
  110.      * @param startRow  
  111.      * @param endRow  
  112.      * @param startColumn  
  113.      * @param endColumn  
  114.      */  
  115.     public static List readExcel(String fileName, int sheetIndex, int startRow,   
  116.             int endRow, int startColumn, int endColumn) {   
  117.         Workbook wb = null;   
  118.         List allData = new ArrayList();   
  119.         Cell cell = null;   
  120.         try {   
  121.             wb = Workbook.getWorkbook(new File(fileName));   
  122.             Sheet sheet = wb.getSheet(sheetIndex);   
  123.             int rowCount = sheet.getRows();   
  124.             int columnCount = sheet.getColumns();   
  125.             for (int r = startRow; r < rowCount && r <= endRow; r++) {// 行   
  126.                 for (int c = startColumn; c < columnCount && c <= endColumn; c++) {// 列   
  127.                     cell = sheet.getCell(c, r);   
  128.                     // System.out.println(cell.getContents());   
  129.                     allData.add(cell.getContents());   
  130.                 }   
  131.             }   
  132.         } catch (Exception e) {   
  133.             System.out.println("出现异常" + e);   
  134.             e.printStackTrace();   
  135.         } finally {   
  136.             wb.close();   
  137.         }   
  138.         return allData;   
  139.     }   
  140.        
  141.     /**  
  142.      * 读取指定excel中的指定sheet的某一块的数据....用于模板里面读取单元格.  
  143.      * @param fileName  
  144.      * @param sheetIndex  
  145.      * @param startCell  
  146.      * @param endCell  
  147.      * @return  
  148.      */  
  149.     public static List readExcel(String fileName, int sheetIndex,String startCell, String endCell) {   
  150.         int startRow = getNumFromStr(startCell);   
  151.         int endRow = getNumFromStr(endCell);   
  152.         int startColumn=getNumFromExcelStr(getCodeFromStr(startCell));   
  153.         int endColumn = getNumFromExcelStr(getCodeFromStr(endCell));   
  154.         return readExcel(fileName, sheetIndex, startRow, endRow, startColumn,   
  155.                 endColumn);   
  156.     }   
  157.            
  158.     /**  
  159.      * 设置excel中的sheet页全部隐藏  
  160.      * @param fileName  
  161.      */  
  162.     public static void setAllHiddenSheet(String fileName) {   
  163.         Workbook wb = null;   
  164.         try {   
  165.             wb = Workbook.getWorkbook(new File(fileName));   
  166.             // 打开一个文件副本,并指定数据写回原文件.   
  167.             WritableWorkbook book = Workbook.createWorkbook(new File(fileName),   
  168.                     wb);   
  169.             Sheet[] sheets = book.getSheets();   
  170.             for(int i=3;i<sheets.length;i++){   
  171.                 Sheet ii = sheets[i];   
  172.                 ii.getSettings().setHidden(true);   
  173.             }   
  174.             book.write();   
  175.             book.close();   
  176.         } catch (Exception e) {   
  177.             System.out.println("出现异常" + e);   
  178.             e.printStackTrace();   
  179.         } finally {   
  180.             wb.close();   
  181.             System.out.print(111);   
  182.         }   
  183.     }    
  184.     /**  
  185.      * 添加一个新的sheet到指定excel文件  
  186.      * @param fileName  
  187.      * @param sheetName sheet的name  
  188.      */  
  189.     public static void addNewSheet(String fileName,String sheetName) {   
  190.         Workbook wb = null;   
  191.         try {   
  192.             wb = Workbook.getWorkbook(new File(fileName));   
  193.             // 打开一个文件副本,并指定数据写回原文件.   
  194.             WritableWorkbook book = Workbook.createWorkbook(new File(fileName),   
  195.                     wb);   
  196.             // 创建一个新的sheet到第2页的位置              
  197.             String[] sheetNames = wb.getSheetNames();   
  198.             for(int i=0;i<sheetNames.length;i++){   
  199.                 if(sheetNames[i].equals(sheetName)){   
  200.                     System.out.println("已经存在了,不用添加了." );   
  201.                     return ;   
  202.                 }   
  203.             }   
  204.             WritableSheet sheet = book.createSheet(sheetName, 1);   
  205.             sheet.addCell(new Label(00"新加的测试数据"));   
  206.             book.write();   
  207.             book.close();   
  208.         } catch (Exception e) {   
  209.             System.out.println("出现异常" + e);   
  210.             e.printStackTrace();   
  211.         } finally {   
  212.             wb.close();   
  213.         }   
  214.     }    
  215. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约