您的位置:首页 > 移动开发 > 微信开发

SVN记录转excel文件的小程序

2013-03-15 15:23 113 查看
用于将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 block
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: