使用Java POI 类库生成Excel文档,
class="java" name="code">public class Excel {
/**
*
* @Title: addMergeCellFile
* @Description: TODO(生成多种表格)
* @param tablexml
* @param os
* @param type
*/
public void addMergeCellFile(String tablexml,OutputStream os,int type){
try{
Document doc = DocumentHelper.parseText(tablexml);
Element root = doc.getRootElement();
//
int rowNum = 0;
// 记录条数
List rowsList = root.elements();
int rowmax = rowsList.size();
int colmax = 0;
// 最大列数
for(int i=0;i<rowsList.size();i++){
List tdlist = ((Element)rowsList.get(i)).elements();
int temp = tdlist.size();
if(temp > colmax){
colmax =temp;
}
}
List<int[]> megerRanges = new ArrayList<int[]>();
// 生成工作簿
HSSFWorkbook excel = new HSSFWorkbook();
// 生成 sheet
HSSFSheet sheet = excel.createSheet("Sheet1");//Excel工作表名字
// 依据数据条数,生成相应单元格
for(int i=0;i<rowmax;i++) {
// Row
HSSFRow row = sheet.createRow(i);
// 单元格
for(int j=0; j<colmax; j++) {
HSSFCell cell = row.createCell(j);
}
}
//merge cells
megerRanges = this.getMergeArray(type);
if(megerRanges.size() > 0){
for(int[] array : megerRanges) {
sheet.addMergedRegion(new CellRangeAddress(array[0],array[1],array[2],array[3]));
}
}
// 使用数据填充表格
int m = 0;
HSSFCell excelCol = null;
HSSFRow excelRow = null;
for(int i= m;i<rowsList.size();i++) {
Element row = (Element) rowsList.get(i);//get tr
List colsList = row.elements();
excelRow = sheet.getRow(i);
for(int k=0;k<colsList.size();k++) {
Element td = (Element) colsList.get(k);//get td
excelCol = excelRow.getCell(k);
//dom4j 解析不了 小于符号
excelCol.setCellValue(new HSSFRichTextString(td.getText().replaceAll("#", "<")));
}
}
excel.write(os);
os.close();
}catch (Exception e) {
//e.printStackTrace();
System.out.println("-----sax faild-----" + e.getMessage());
}
}
/**
*
* @Title: getMergeArray
* @Description: TODO(合并单元格格式)
* @param type
* @return
*/
public List<int[]> getMergeArray(int type){
List<int[]> megerRanges = new ArrayList<int[]>();
if(type>0){
megerRanges.add(new int[]{0,2,0,0});// 起始行 ---结束行 起始列 --结束列
for(int i=0;i<=((type-1)*8);i+=8){
megerRanges.add(new int[]{0,0,1+i,8+i});
megerRanges.add(new int[]{1,1,1+i,2+i});
megerRanges.add(new int[]{1,1,3+i,4+i});
megerRanges.add(new int[]{1,1,5+i,6+i});
megerRanges.add(new int[]{1,2,7+i,7+i});
megerRanges.add(new int[]{1,2,8+i,8+i});
}
}
return megerRanges;
}
}
测试代码如下:
@Test
public void test() throws IOException {
String outputFile = "D:\\test.xls";
/* // 创建新的Excel工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
// 在索引0的地方建新行
HSSFRow row = sheet.createRow(0);
// 在索引0的位置创建单元格
HSSFCell cell = row.createCell(0);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell.setCellValue("增加值");*/
FileOutputStream out = new FileOutputStream(outputFile);
/* workbook.write(out);
out.flush();
out.close();
System.out.println("文件生成");*/
StringBuffer tableXml = new StringBuffer("");
tableXml.append("<table><tr><td>序号</td><td>姓名</td><td>卡号</td></tr>");
tableXml.append("<tr><td>1</td><td>zhangsan</td><td>2</td></tr></table>");
Excel excel = new Excel();
excel.addMergeCellFile(tableXml.toString(), out, 0);
}