📄 gen_xls.java
字号:
wb.write(fout);
}
catch (IOException ex)
{
errorMessage = "写入报表产生错误! " + ex.getMessage();
System.out.println( errorMessage );
ex.printStackTrace();
}
finally
{
if (fout != null)
{
try
{
fout.close();
}catch (IOException ex){}
}
}
}
//报表的结果记录数
public int getResultCount()
{
return resultCount;
}
//得到当前所产生 的错误信息
public String getErrorMessage()
{
return errorMessage;
}
/**
* 生成报表头
* 根据要生成报表的样式,依次建立cell
* @param wb HSSFWorkbook
* @param sheet HSSFSheet
* @param rowNumber int 报头从第几行开始创建
*/
private int createReportHeader(HSSFWorkbook wb, HSSFSheet sheet,
int rowNumber)
{
int currentRowCount = rowNumber;
String[] headers = new String[]{
"单 位 名 称", "入 学 率", "辍 学 率", "备 注",
"学龄儿童总人数(不含盲、聋哑、丧失学习能力者)", "其中", "已入学人数",
"其中", "入学率(%)", "女童入学率(%)",
"上学年初在校学生总人数", "学年内辍学学生总人数","辍学率(%)", "女童数", "女童数"};
HSSFCell cell = null;
int columnCounter = 0;
int rowCounter = rowNumber;
for (int i = 0; i < headers.length; i++)
{
cell = sheet.createRow(rowCounter).createCell((short)columnCounter);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_CENTER );
cell.setCellValue(headers[i]);
if (i == 0) //合并单位名称单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.setColumnWidth((short)columnCounter, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) )); //设置宽度
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 2, (short)columnCounter));
}
else if (i == 1) //合并入学率单元格
{
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter, (short)(columnCounter + 5)));
columnCounter += 5;
}
else if (i == 2) //合并辍学率单元格
{
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter, (short)(columnCounter + 2)));
columnCounter += 2;
}
else if (i == 3) //合并备注单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.setColumnWidth((short)columnCounter, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) )); //设置宽度
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 2, (short)columnCounter));
}
else if (i == 4) //合并学龄儿童总人数(不含盲、聋哑、丧失学习能力者)单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
else if (i == 6) //合并已入学人数单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
else if (i == 8) //合并入学率(%)单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
else if (i == 9) // 合并女童入学率(%)单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
else if (i == 10) //合并上学年初在校学生总人数单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
else if (i == 11) //合并学年内辍学学生总人数单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
else if (i == 12) //合并辍学率(%)单元格
{
cell.getCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
sheet.addMergedRegion(new Region(rowCounter, (short)columnCounter, rowCounter + 1, (short)columnCounter));
}
columnCounter++;
//跳行
if (i == 3 || i == 12)
{
rowCounter++;
if (i == 3) //如果是第一行换行
{
columnCounter = 1;
}
else if (i == 12) //如果是第二行换行
{
columnCounter = 2;
}
}
if (i == 13) //如果是遇到第一个女童单元格,则把跳过一个单元格,才正确
{
columnCounter++;
}
}
currentRowCount = rowCounter;
return currentRowCount;
}
public static String[] _CharSplit( String str, char regex )
{
String str_array[] = null;
char ch[] = str.toCharArray();
char ch_tmp[] = null;
int int_flag = 0;
for( int i=0; i<ch.length; i++ )
{
if( ch[i] == regex )
{
int_flag++;
}
}
if( int_flag < 1 ){
str_array = new String[1];
str_array[0] = str;
return str_array;
}
ch_tmp = new char[str.length()];
str_array = new String[int_flag+1];
int k = 0;
int h = 0;
for( int n=0; n<ch.length; n++ )
{
if( ch[n] != regex )
{
ch_tmp[k] = ch[n];
k++;
}
else
{
str_array[h] = new String( ch_tmp ).substring(0,k);
ch_tmp = new char[str.length()];
k = 0;
h++;
}
}
str_array[h] = new String( ch_tmp ).substring(0,k);
return str_array;
}
public static void main( String ss[] )
{
gen_xls g = new gen_xls();
g.genReport( "d:\\", "test.xls","测试JAVA生成Excel" );
// System.out.println( "ErrorMsg==="+g.getErrorMessage() );
// System.out.println( "FILENAME==="+g.getOutExcelFileName() );
/****
for( int i=0; i<10;i++)
{
String str = "";
int k=10-(i+1);
for( int n=0;n<k;n++)
{
str += " ";
}
String start="";
for( int j=0;j<i+1;j++)
start +=" *";
System.out.println( str + start );
}***/
String str = "20|C.2";
StringBuffer start=new StringBuffer(str);
char ch[]= new char[str.length()];
ch = str.toCharArray();
for( int i=0; i<ch.length;i++ )
{
if( ch[i]=='|' )
System.out.println( i+"\t"+ch[i] );
}
System.out.println("kH".toLowerCase());
String kk[] = g._CharSplit("2|S;7|D3;3|S;4|S;5|N",'|');
for(int h=0;h<kk.length;h++ )
{
System.out.println("["+kk[h]+"]");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -