SVN记录转excel文件的小程序

来源:互联网 发布:房屋交易数据 编辑:程序博客网 时间:2024/05/16 01:49

用于将SVN记录转成excel文件的小程序,程序包见附件。

可执行文件打包下下载地址:http://download.csdn.net/detail/setsail_wu/5144664

源码项目:https://bitbucket.org/tonywut/svnlog2excel/overview

使用方法如下:

1、  将压缩包里的文件解压至linux服务器任意目录下。

2、  在该目录下执行 ./svnlog2excel.shSVNPATH如


3、  即会在当前目录下生成一excel文件,文件名与SVN路径有关,如下:



 源码如下

SvnLog.java,用于保存每条记录的信息。

package com.tony;public class SvnLog {private String revision = "";private String author = "";private String date = "";private String paths = "";private String msg = "";public SvnLog(){}public void setRevision(String s){this.revision = s;}public String getRevision(){return this.revision;}public void setAuthor(String s){this.author = s;}public String getAuthor(){return this.author;}public void setDate(String s){this.date = s;}public String getDate(){return this.date;}public void setPaths(String s){this.paths = s;}public String getPaths(){return this.paths;}public void setMsg(String s){this.msg = s;}public String getMsg(){return this.msg;}}


svnlogXMLHandler.java ,解析XML文件。

package com.tony;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class svnlogXMLHandler  extends DefaultHandler {private List<SvnLog> svnlogs;private SvnLog svnlog;    private String whichElement;      private String paths = "";    private int pathNum = 0;     public final static String LOGENTRY  = "logentry";public final static String REVISION  = "revision";public final static String AUTHOR  = "author";public final static String DATE  = "date";public final static String PATHS  = "paths";public final static String PATH  = "path";public final static String ACTION  = "action";public final static String MSG  = "msg";public List<SvnLog> getSvnLogs(){return svnlogs;}@Override  public void startDocument() throws SAXException { svnlogs = new ArrayList<SvnLog>();}@Override  public void characters(char[] ch, int start, int length) {if(whichElement!=null){String valueString = new String(ch, start, length);if(AUTHOR.equals(whichElement)){svnlog.setAuthor(valueString);}else if(DATE.equals(whichElement)){svnlog.setDate(valueString);}else if(PATH.equals(whichElement)){paths = paths + valueString ;}else if(MSG.equals(whichElement)){svnlog.setMsg(valueString);}}}@Override  public void startElement (String uri, String localName, String name,  Attributes attributes) throws SAXException { if(LOGENTRY.equals(name)) {svnlog = new SvnLog();svnlog.setRevision(new String(attributes.getValue(REVISION)));}else if(PATH.equals(name)) {        paths = paths + (pathNum != 0? System.getProperty("line.separator"):"") + (new String(attributes.getValue(ACTION))) + " ";pathNum ++ ;}else if(PATHS.equals(name)){pathNum = 0;}whichElement = name;}@Override public void endElement(String uri, String localName, String name)throws SAXException {if(LOGENTRY.equals(name) ) {svnlogs.add(svnlog);svnlog = null;} else if (PATHS.equals(name)) {svnlog.setPaths(paths);paths = "";}whichElement = null;}@Override public void endDocument () {}}


toExcel.java ,用于生成excel文件。


package com.tony;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;public class toExcel {public static List<SvnLog> getSvnLogs(String filename) throws Exception {InputStream inStream = new FileInputStream(new File(filename));        SAXParserFactory spf = SAXParserFactory.newInstance(); // 初始化sax解析器          SAXParser sp = spf.newSAXParser(); // 创建sax解析器          svnlogXMLHandler handler = new svnlogXMLHandler();          sp.parse(inStream, handler);          return handler.getSvnLogs(); }    /**     * @param args     */    public static void main(String[] args) {    if(args.length != 2) {    System.out.println("Please input src file(***.xml) and target file(***.xls)");    System.out.println("ex: java -jar svnlog2excel.jar changlog.xml test2.xls");    return;    }    String targetFile = args[1];    String srcFile = args[0];        File file = new File(targetFile);    Label label;        try {        List<SvnLog> svnlogs = getSvnLogs(srcFile);            WritableWorkbook workbook = Workbook.createWorkbook(file);            WritableSheet sheet = workbook.createSheet("test1", 0);            WritableFont wtf = new WritableFont(WritableFont.createFont("宋体"),14,WritableFont.BOLD,false);            WritableCellFormat wcfmt = new WritableCellFormat(wtf);            wcfmt.setAlignment(jxl.format.Alignment.CENTRE);                        int c= 0;            sheet.setColumnView(c, 14);        label = new Label(c++, 0, svnlogXMLHandler.REVISION, wcfmt);            sheet.addCell(label);            sheet.setColumnView(c, 14);        label = new Label(c++, 0, svnlogXMLHandler.AUTHOR, wcfmt);            sheet.addCell(label);            sheet.setColumnView(c, 11);        label = new Label(c++, 0, svnlogXMLHandler.DATE, wcfmt);            sheet.addCell(label);            sheet.setColumnView(c, 40);        label = new Label(c++, 0, svnlogXMLHandler.MSG, wcfmt);            sheet.addCell(label);            sheet.setColumnView(c, 100);        label = new Label(c++, 0, svnlogXMLHandler.PATHS, wcfmt);            sheet.addCell(label);                        WritableFont wtf2 = new WritableFont(WritableFont.createFont("Arial"),10,WritableFont.NO_BOLD,false);            WritableCellFormat wcfmt2 = new WritableCellFormat(wtf2);            wcfmt2.setVerticalAlignment(jxl.format.VerticalAlignment.TOP);                        WritableCellFormat wcfmt3 = new WritableCellFormat(wtf2);            wcfmt3.setVerticalAlignment(jxl.format.VerticalAlignment.TOP);            wcfmt3.setAlignment(jxl.format.Alignment.CENTRE);                        for (int i=0; i<svnlogs.size(); i++){            int j = 0;            label = new Label(j++, i+1, svnlogs.get(i).getRevision(), wcfmt3);                sheet.addCell(label);            label = new Label(j++, i+1, svnlogs.get(i).getAuthor(), wcfmt2);                sheet.addCell(label);            label = new Label(j++, i+1, svnlogs.get(i).getDate(), wcfmt2);                sheet.addCell(label);            label = new Label(j++, i+1, svnlogs.get(i).getMsg(), wcfmt2);                sheet.addCell(label);            label = new Label(j++, i+1, svnlogs.get(i).getPaths(), wcfmt2);                sheet.addCell(label);            }            workbook.write();            workbook.close();        } catch (IOException e) {            e.printStackTrace();        } catch (RowsExceededException e) {            e.printStackTrace();        } catch (WriteException e) {            e.printStackTrace();        } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}    }}