package com.test;

import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.DecimalFormat;  
import java.text.SimpleDateFormat;  
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;  
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;  
import java.util.List;  
import java.util.Map;

import org.apache.poi.hssf.record.DBCellRecord;
import org.apache.poi.hssf.usermodel.HSSFCell;  
import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;  
import org.apache.poi.hssf.usermodel.HSSFDateUtil;  
import org.apache.poi.hssf.usermodel.HSSFFont;  
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import org.apache.poi.hssf.util.HSSFColor;  
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xssf.usermodel.XSSFCell;  
import org.apache.poi.xssf.usermodel.XSSFCellStyle;  
import org.apache.poi.xssf.usermodel.XSSFFont;  
import org.apache.poi.xssf.usermodel.XSSFRow;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class testExcel {

public static final String pub_moduleSql = "PUB_MODULE";
public static final String pub_elementSql = "PUB_ELEMENT";
public static final String pub_attributeSql = "PUB_ATTRIBUTE";
public static final String pub_attr_codeSql = "PUB_ATTR_CODE";

/**  
* 可以从http://poi.apache.org/ 这里下载到POI的jar包 POI   
* 创建和读取2003-2007版本Excel文件  
*   
*/ 
 
   @SuppressWarnings("unused")
public static void main(String[] args) throws Exception {  
    multiSheets();
    singleSheet();
 
    /*HSSFWorkbook workBook = new HSSFWorkbook(); // 创建 一个excel文档对象 
    HSSFSheet sheet =null;
       HSSFSheet sheet = workBook.createSheet("数据库表结构");// 创建一个工作薄对象
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
       sheet.setColumnWidth(2, 8000);// 设置第三列的宽度为
       sheet.setColumnWidth(3, 1000);// 设置第四列的宽度为
       sheet.setColumnWidth(4, 1000);// 设置第五列的宽度为
       sheet.setColumnWidth(5, 1000);// 设置第六列的宽度为
       sheet.setColumnWidth(6, 1000);// 设置第七列的宽度为
       sheet.setColumnWidth(7, 1000);// 设置第八列的宽度为
       
       HSSFRow row = sheet.createRow(1);// 创建一个行对象
 
       row.setHeightInPoints(23);// 设置行高23像素  

       
       //ResultSet resultSet= DBOperator();
       //ResultSet resultSet= DBOperatorModule();
       List<Map<String, Object>> list= DBOperatorModule();
       Iterator<Map<String, Object>> terIterator = list.iterator();

for (int i = 0; i < list.size(); i++) {
sheet = workBook.createSheet();// 创建一个工作薄对象
workBook.setSheetName(i, String.valueOf(i));
}
       //设置行数
//int rowNum = 0;
int intAdd = 0;
    while (terIterator.hasNext()) {

    int rowNum = 0;
Map<String, Object> map = terIterator.next();
String stringMap =map.get("MODULE_NAME") +"(" + map.get("MODULE_TYPE_ID")+")";

//sheet = workBook.getSheetAt(intAdd);// 创建一个工作薄对象
sheet = workBook.createSheet(stringMap);
//workBook.setSheetName(intAdd, stringMap);
intAdd++;
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
       sheet.setColumnWidth(2, 10000);// 设置第三列的宽度为
       sheet.setColumnWidth(3, 10000);// 设置第四列的宽度为
       sheet.setColumnWidth(4, 10000);// 设置第五列的宽度为
       sheet.setColumnWidth(5, 10000);// 设置第六列的宽度为
       sheet.setColumnWidth(6, 10000);// 设置第七列的宽度为
       sheet.setColumnWidth(7, 10000);// 设置第八列的宽度为
    //创建标题
    HSSFRow row = sheet.createRow(rowNum++);// 创建一个行对象
 
       row.setHeightInPoints(23);// 设置行高23像素  
       HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
   
       // 设置字体  
       HSSFFont font = workBook.createFont();// 创建字体对象  
       font.setFontHeightInPoints((short) 11);// 设置字体大小  
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
       font.setFontName("宋体");// 设置为宋体字  
       style.setFont(font);// 将字体加入到样式对象 
       HSSFCell cell = row.createCell(0);// 创建单元格,开始第一个单元格,单元格编号默认从0开始
       //可以加黑
       //设置每个模块的 模块名称和类型的id
cell.setCellValue(map.get("MODULE_NAME")+"("+map.get("MODULE_TYPE_ID")+")");
cell.setCellStyle(style);
//cell.setCellValue(resultSet.getNString("MODULE_NAME")+"("+resultSet.getNString("MODULE_SHORT_NAME")+")");
//创建元素名称,属性,代码
HSSFRow row1 = sheet.createRow(rowNum++);// 创建一个行对象
 
       row1.setHeightInPoints(23);// 设置行高23像素  
       HSSFCell cell1 = row1.createCell(1);// 创建单元格
cell1.setCellValue("元素名称");
cell1.setCellStyle(style);
//可以补充设置单元格的宽度。。。。cell1.setCellStyle(style);
HSSFCell cell2 = row1.createCell(2);// 创建单元格
cell2.setCellValue("属性");
cell2.setCellStyle(style);

HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("代码");
cell3.setCellStyle(style);

//新添加数据类型。。。。
HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("数据类型");
cell3.setCellStyle(style);

HSSFCell cell4 = row1.createCell(4);// 创建单元格
cell4.setCellValue("代码");
cell4.setCellStyle(style);

//开始创建元素名称,属性,代码
//元素名称
//select * from PUB_ELEMENT where MIDULE_ID;
String string = pub_elementSql;
String string1 = "MODULE_CODE";
String string2 = (String) map.get("MODULE_CODE");
//获取元素集合
//ResultSet resultSet1= DBOperator(string,string1,string2);
//ResultSet resultSet1= DBOperatorElement(string1,string2);
List<Map<String, Object>> list1= DBOperatorElement(string2);
       Iterator<Map<String, Object>> terIterator1 = list1.iterator();

//设置行数
//int rowNum = 3;
//设置列数
//int columnNum = 1;
//设置模块中的相应的元素,写到excel中去
while (terIterator1.hasNext()) {
//设置列数
int columnNum = 1;
Map<String, Object> map1= terIterator1.next();
// 创建一个行对象 
HSSFRow rowElement = sheet.createRow(rowNum++);
rowElement.setHeightInPoints(23);// 设置行高23像素  
//属性
//select * from PUB_ATTRIBUTE where ELEMENT_ID;
//获取元素名称
String stringElementName = map1.get("ELEMENT_NAME") + "("
+ map1.get("ELEMENT_VAR_NAME") + ")";
HSSFCell cellElment = rowElement.createCell(columnNum);
//添加新行中的第一个单元格数值
cellElment.setCellValue(stringElementName);

columnNum+=1;
//属性名称
String stringAttributeName=null;
//属性名称
String stringCodeName=null;
//查询的表明,字段,id
String string11 = pub_attributeSql;
String string22 = "ELEMENT_CODE";
String string33 = (String) map1.get("ELEMENT_CODE");
//获取属性集合
//ResultSet resultSet2= DBOperator(string11,string22,string33);
//ResultSet resultSet2= DBOperatorAttribute(string22,string33);
List<Map<String, Object>> list2= DBOperatorAttribute(string33);
       Iterator<Map<String, Object>> terIterator2 = list2.iterator();

       //设置属性,把属性写到Excel中
       //用于判断属性个数,多于一个就要添加新行
       int yesOrNoAddRow = 0;
       //记录新添加行时,需要添加的单元格的位置
       int attributeCellInRowNum = 0;
while (terIterator2.hasNext()) {

Map<String, Object> map2= terIterator2.next();
//这里要考虑到表格的合并......,例如患者姓名的 录入值,昵称 就要分两行
//代码
//select * from PUB_ATTRIBUTE where ELEMENT_ID;
//获取属性名称
stringAttributeName=map2.get("ATTR_NAME")+"("+map2.get("ATTR_VAR_NAME")+")  " +map2.get("DATA_TYPE_NAME");
if(yesOrNoAddRow>0){
// 创建一个行对象 
HSSFRow rowElementNew = sheet.createRow(rowNum++);
rowElementNew.setHeightInPoints(23);// 设置行高23像素
columnNum=attributeCellInRowNum;
HSSFCell cellElment1 = rowElementNew.createCell(attributeCellInRowNum);
//是否添加新行
   //attributeCellInRowNum=columnNum;
//添加新行中的第二个单元格数值
cellElment1.setCellValue(stringAttributeName);
columnNum+=1;

//新添加数据类型列。。。。
HSSFCell cellElmentData = rowElementNew.createCell(columnNum);
String stringAttributeName1=(String) map2.get("DATA_TYPE_NAME");
cellElmentData.setCellValue(stringAttributeName1);
columnNum+=1;

String string333 = (String) map2.get("ATTR_CODE");

List<Map<String, Object>> list3= DBOperatorAttCode(string333);
       Iterator<Map<String, Object>> terIterator3 = list3.iterator();
while (terIterator3.hasNext()) {
Map<String, Object> map3 = terIterator3.next();
//查询的表明,字段,id  
stringCodeName =map3.get("CODE_VALUE")+"."+ map3.get("CODE_NAME");

HSSFCell cellElment2 = rowElementNew.createCell(columnNum);
//添加新行中的第三个单元格数值
cellElment2.setCellValue(stringCodeName);
columnNum+=1;
}
}else {
HSSFCell cellElment1 = rowElement.createCell(columnNum);
//记录新添加行时,需要添加的单元格的位置
attributeCellInRowNum =columnNum;
//添加新行中的第二个单元格数值
cellElment1.setCellValue(stringAttributeName);
columnNum+=1;

//新添加数据类型列。。。。
HSSFCell cellElmentData = rowElement.createCell(columnNum);
String stringAttributeName1=(String) map2.get("DATA_TYPE_NAME");
cellElmentData.setCellValue(stringAttributeName1);
columnNum+=1;

String string111 = pub_attr_codeSql;
String string222 = "ATTR_CODE";
String string333 = (String) map2.get("ATTR_CODE");

//ResultSet resultSet3= DBOperator(string111,string222,string333);
//ResultSet resultSet3= DBOperatorAttCode(string222,string333);
List<Map<String, Object>> list3= DBOperatorAttCode(string333);
       Iterator<Map<String, Object>> terIterator3 = list3.iterator();
while (terIterator3.hasNext()) {
Map<String, Object> map3 = terIterator3.next();
//查询的表明,字段,id  
stringCodeName =map3.get("CODE_VALUE")+"."+ map3.get("CODE_NAME");

HSSFCell cellElment2 = rowElement.createCell(columnNum);
//添加新行中的第三个单元格数值
cellElment2.setCellValue(stringCodeName);
columnNum+=1;
}
}
yesOrNoAddRow+=1;
}
//rowNum+=1;
}

//间隔不同的模块
HSSFRow row11 = sheet.createRow(rowNum);// 创建一个行对象
row11.setHeightInPoints(23);
HSSFRow row22 = sheet.createRow(rowNum+1);// 创建一个行对象
row22.setHeightInPoints(23);
//cell.setCellStyle(style);// 应用样式对象
for (Cell cell4 : row12) {
//循环   创建具体元素名称  属性,代码值的单元格具体值。
}
}
   
    FileOutputStream os = new FileOutputStream("style_2003.xls");
   
       workBook.write(os);// 将文档对象写入文件输出流
 
       //os.close();// 关闭文件输出流
       
       //workBook.close();
       
       System.out.println("创建成功 office 2003 excel"); 
       
   
    //creatExcel(resultSet,"人口统计学(DM)");
   
       //creat2003Excel();// 创建2007版Excel文件  
       //creat2007Excel();// 创建2003版Excel文件  
       //读取2003Excel文件  
   
       String path2003 = System.getProperty("user.dir")  
               + System.getProperty("file.separator")
               + "style_2003.xls";
       // 获取项目文件路径+2003版文件名  
       System.out.println("路径:" + path2003);  
       File f2003 = new File(path2003);  
       try {  
           readExcel(f2003);  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }  
       //读取2007Excel文件  
       String path2007 = System.getProperty("user.dir")
         + System.getProperty("file.separator") 
         + "style_2007.xlsx";// 获取项目文件路径+2007版文件名  
       System.out.println("路径:" + path2007);  
       File f2007 = new File(path2007);  
       try {  
           readExcel(f2007);  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }  */
 
   }  
   /**  
    * 创建2003版本的Excel文件  单个sheet
    */  
private static void singleSheet() throws Exception {
    HSSFWorkbook workBook = new HSSFWorkbook(); // 创建 一个excel文档对象 
       HSSFSheet sheet = workBook.createSheet("数据库表结构");// 创建一个工作薄对象
 
       //HSSFRow row = sheet.createRow(0);// 创建一个行对象  
   
       //row.setHeightInPoints(23);// 设置行高23像素  
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
       sheet.setColumnWidth(2, 10000);// 设置第三列的宽度为
       sheet.setColumnWidth(3, 10000);// 设置第四列的宽度为
       sheet.setColumnWidth(4, 10000);// 设置第五列的宽度为
       sheet.setColumnWidth(5, 10000);// 设置第六列的宽度为
       sheet.setColumnWidth(6, 10000);// 设置第七列的宽度为
       sheet.setColumnWidth(7, 10000);// 设置第八列的宽度为
       
       HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
   
       // 设置字体  
       HSSFFont font = workBook.createFont();// 创建字体对象  
       font.setFontHeightInPoints((short) 11);// 设置字体大小  
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
       font.setFontName("宋体");// 设置为宋体字  
       style.setFont(font);// 将字体加入到样式对象 
       //HSSFRow row = sheet.createRow(0);// 创建一个行对象
       //row.setHeightInPoints(23);// 设置行高23像素 
       //HSSFCell cell = row.createCell(0);// 创建单元格,开始第一个单元格,单元格编号默认从0开始
       //可以加黑
       //设置每个模块的 模块名称和类型的id
//cell.setCellValue(map.get("MODULE_NAME")+"("+map.get("MODULE_TYPE_ID")+")");
//cell.setCellStyle(style);
//创建元素名称,属性,代码
HSSFRow row1 = sheet.createRow(0);// 创建一个行对象
 
       row1.setHeightInPoints(23);// 设置行高23像素  
       HSSFCell cell1 = row1.createCell(1);// 创建单元格
cell1.setCellValue("元素名称");
cell1.setCellStyle(style);
//可以补充设置单元格的宽度。。。。cell1.setCellStyle(style);
HSSFCell cell2 = row1.createCell(2);// 创建单元格
cell2.setCellValue("属性");
cell2.setCellStyle(style);
/* HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("代码");
cell3.setCellStyle(style);*/

//新添加数据类型。。。。
HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("数据类型");
cell3.setCellStyle(style);

HSSFCell cell4 = row1.createCell(4);// 创建单元格
cell4.setCellValue("代码");
cell4.setCellStyle(style);
       
       List<Map<String, Object>> list= DBOperatorModule();
       Iterator<Map<String, Object>> terIterator = list.iterator();

//设置行数
int rowNum = 1;//rowNum 放到这里,是设置单个sheet。。。。。。
//int intAdd = 0;
    while (terIterator.hasNext()) {

    /*
    * //int rowNum = 0;//rowNum 放到这里,是设置多个sheet。。。。。。
    * 
   
Map<String, Object> map = terIterator.next();
String stringMap =map.get("MODULE_NAME") +"(" + map.get("MODULE_TYPE_ID")+")";
sheet = workBook.createSheet(stringMap);
//workBook.setSheetName(intAdd, stringMap);
               */
    Map<String, Object> map = terIterator.next();
    //intAdd++;
       /*sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
       sheet.setColumnWidth(2, 10000);// 设置第三列的宽度为
       sheet.setColumnWidth(3, 10000);// 设置第四列的宽度为
       sheet.setColumnWidth(4, 10000);// 设置第五列的宽度为
       sheet.setColumnWidth(5, 10000);// 设置第六列的宽度为
       sheet.setColumnWidth(6, 10000);// 设置第七列的宽度为
       sheet.setColumnWidth(7, 10000);// 设置第八列的宽度为
*/      //创建标题
    //HSSFRow row = sheet.createRow(rowNum++);// 创建一个行对象
 
       //row.setHeightInPoints(23);// 设置行高23像素  
       /*HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
   
       // 设置字体  
       HSSFFont font = workBook.createFont();// 创建字体对象  
       font.setFontHeightInPoints((short) 11);// 设置字体大小  
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
       font.setFontName("宋体");// 设置为宋体字  
       style.setFont(font);// 将字体加入到样式对象 
*/        
      HSSFRow row = sheet.createRow(rowNum++);// 创建一个行对象
       row.setHeightInPoints(23);// 设置行高23像素 
       HSSFCell cell = row.createCell(0);// 创建单元格,开始第一个单元格,单元格编号默认从0开始
       //可以加黑
       //设置每个模块的 模块名称和类型的id
cell.setCellValue(map.get("MODULE_NAME")+"("+map.get("MODULE_TYPE_ID")+")");
cell.setCellStyle(style);
/*
//创建元素名称,属性,代码
HSSFRow row1 = sheet.createRow(rowNum++);// 创建一个行对象
 
       row1.setHeightInPoints(23);// 设置行高23像素  
       HSSFCell cell1 = row1.createCell(1);// 创建单元格
cell1.setCellValue("元素名称");
cell1.setCellStyle(style);
//可以补充设置单元格的宽度。。。。cell1.setCellStyle(style);
HSSFCell cell2 = row1.createCell(2);// 创建单元格
cell2.setCellValue("属性");
cell2.setCellStyle(style);
HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("代码");
cell3.setCellStyle(style);

//新添加数据类型。。。。
HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("数据类型");
cell3.setCellStyle(style);

HSSFCell cell4 = row1.createCell(4);// 创建单元格
cell4.setCellValue("代码");
cell4.setCellStyle(style);*/

//开始创建元素名称,属性,代码
//元素名称
//select * from PUB_ELEMENT where MIDULE_ID;
String string2 = (String) map.get("MODULE_CODE");
//获取元素集合
//ResultSet resultSet1= DBOperator(string,string1,string2);
//ResultSet resultSet1= DBOperatorElement(string1,string2);
List<Map<String, Object>> list1= DBOperatorElement(string2);
       Iterator<Map<String, Object>> terIterator1 = list1.iterator();

//设置模块中的相应的元素,写到excel中去
while (terIterator1.hasNext()) {
//设置列数
int columnNum = 1;
Map<String, Object> map1= terIterator1.next();
// 创建一个行对象 
HSSFRow rowElement = sheet.createRow(rowNum++);
rowElement.setHeightInPoints(23);// 设置行高23像素  
//属性
//select * from PUB_ATTRIBUTE where ELEMENT_ID;
//获取元素名称
String stringElementName = map1.get("ELEMENT_NAME") + "("
+ map1.get("ELEMENT_VAR_NAME") + ")";
HSSFCell cellElment = rowElement.createCell(columnNum);
//添加新行中的第一个单元格数值
cellElment.setCellValue(stringElementName);

columnNum+=1;
//属性名称
String stringAttributeName=null;
//属性名称
String stringCodeName=null;
//查询的表明,字段,id

String string33 = (String) map1.get("ELEMENT_CODE");
//获取属性集合
List<Map<String, Object>> list2= DBOperatorAttribute(string33);
       Iterator<Map<String, Object>> terIterator2 = list2.iterator();

       //设置属性,把属性写到Excel中
       //用于判断属性个数,多于一个就要添加新行
       int yesOrNoAddRow = 0;
       //记录新添加行时,需要添加的单元格的位置
       int attributeCellInRowNum = 0;
while (terIterator2.hasNext()) {

Map<String, Object> map2= terIterator2.next();
//这里要考虑到表格的合并......,例如患者姓名的 录入值,昵称 就要分两行
//代码
//select * from PUB_ATTRIBUTE where ELEMENT_ID;
//获取属性名称
stringAttributeName=map2.get("ATTR_NAME")+"("+map2.get("ATTR_VAR_NAME")+")";
if(yesOrNoAddRow>0){
// 创建一个行对象 
HSSFRow rowElementNew = sheet.createRow(rowNum++);
rowElement.setHeightInPoints(23);// 设置行高23像素
columnNum=attributeCellInRowNum;
HSSFCell cellElment1 = rowElementNew.createCell(attributeCellInRowNum);
//是否添加新行
   //attributeCellInRowNum=columnNum;
//添加新行中的第二个单元格数值
cellElment1.setCellValue(stringAttributeName);
columnNum+=1;

//新添加数据类型列。。。。
HSSFCell cellElmentData = rowElementNew.createCell(columnNum);
String stringAttributeName1=(String) map2.get("DATA_TYPE_NAME");
cellElmentData.setCellValue(stringAttributeName1);
columnNum+=1;

String string333 = (String) map2.get("ATTR_CODE");

List<Map<String, Object>> list3= DBOperatorAttCode(string333);
       Iterator<Map<String, Object>> terIterator3 = list3.iterator();
while (terIterator3.hasNext()) {
Map<String, Object> map3 = terIterator3.next();
//查询的表明,字段,id  
stringCodeName =map3.get("CODE_VALUE")+"."+ map3.get("CODE_NAME");

HSSFCell cellElment2 = rowElementNew.createCell(columnNum);
//添加新行中的第三个单元格数值
cellElment2.setCellValue(stringCodeName);
columnNum+=1;
}
}else {
HSSFCell cellElment1 = rowElement.createCell(columnNum);
//记录新添加行时,需要添加的单元格的位置
attributeCellInRowNum =columnNum;
//添加新行中的第二个单元格数值
cellElment1.setCellValue(stringAttributeName);
columnNum+=1;

//新添加数据类型列。。。。
HSSFCell cellElmentData = rowElement.createCell(columnNum);
String stringAttributeName1=(String) map2.get("DATA_TYPE_NAME");
cellElmentData.setCellValue(stringAttributeName1);
columnNum+=1;

String string333 = (String) map2.get("ATTR_CODE");

List<Map<String, Object>> list3= DBOperatorAttCode(string333);
       Iterator<Map<String, Object>> terIterator3 = list3.iterator();
while (terIterator3.hasNext()) {
Map<String, Object> map3 = terIterator3.next();
//查询的表明,字段,id  
stringCodeName =map3.get("CODE_VALUE")+"."+ map3.get("CODE_NAME");

HSSFCell cellElment2 = rowElement.createCell(columnNum);
//添加新行中的第三个单元格数值
cellElment2.setCellValue(stringCodeName);
columnNum+=1;
}
}
yesOrNoAddRow+=1;

}
//rowNum+=1;
}

//间隔不同的模块
HSSFRow row11 = sheet.createRow(rowNum);// 创建一个行对象
row11.setHeightInPoints(23);
HSSFRow row22 = sheet.createRow(rowNum+1);// 创建一个行对象
row22.setHeightInPoints(23);

}
   
    FileOutputStream os = null;
try {
os = new FileOutputStream("singlesheetstyle_2003.xls");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  
 
       try {
workBook.write(os);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 将文档对象写入文件输出流
 
       try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 关闭文件输出流         
       try {
workBook.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       
       System.out.println("创建成功 office 2003 excel"); 
       
   
    //creatExcel(resultSet,"人口统计学(DM)");
   
       //creat2003Excel();// 创建2007版Excel文件  
       //creat2007Excel();// 创建2003版Excel文件  
       //读取2003Excel文件  
   
       /*String path2003 = System.getProperty("user.dir")  
               + System.getProperty("file.separator")
               + "style_2003.xls";
       // 获取项目文件路径+2003版文件名  
       System.out.println("路径:" + path2003);  
       File f2003 = new File(path2003);  
       try {  
           readExcel(f2003);  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }  
       //读取2007Excel文件  
       String path2007 = System.getProperty("user.dir")
         + System.getProperty("file.separator") 
         + "style_2007.xlsx";// 获取项目文件路径+2007版文件名  
       System.out.println("路径:" + path2007);  
       File f2007 = new File(path2007);  
       try {  
           readExcel(f2007);  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }*/  
}
   
/**  
    * 创建2003版本的Excel文件  多个sheet
    */  
private static void multiSheets() {
    HSSFWorkbook workBook = new HSSFWorkbook(); // 创建 一个excel文档对象 
    HSSFSheet sheet =null;
       /*HSSFSheet sheet = workBook.createSheet("数据库表结构");// 创建一个工作薄对象
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
       sheet.setColumnWidth(2, 8000);// 设置第三列的宽度为
       sheet.setColumnWidth(3, 1000);// 设置第四列的宽度为
       sheet.setColumnWidth(4, 1000);// 设置第五列的宽度为
       sheet.setColumnWidth(5, 1000);// 设置第六列的宽度为
       sheet.setColumnWidth(6, 1000);// 设置第七列的宽度为
       sheet.setColumnWidth(7, 1000);// 设置第八列的宽度为
*/        
       /*HSSFRow row = sheet.createRow(1);// 创建一个行对象
 
       row.setHeightInPoints(23);// 设置行高23像素  */

       
       //ResultSet resultSet= DBOperator();
       //ResultSet resultSet= DBOperatorModule();
       List<Map<String, Object>> list= DBOperatorModule();
       Iterator<Map<String, Object>> terIterator = list.iterator();

/*for (int i = 0; i < list.size(); i++) {
sheet = workBook.createSheet();// 创建一个工作薄对象
workBook.setSheetName(i, String.valueOf(i));
}*/
       //设置行数
//int rowNum = 0;
int intAdd = 0;
    while (terIterator.hasNext()) {

    int rowNum = 0;
Map<String, Object> map = terIterator.next();
String stringRepMap = map.get("MODULE_NAME") +"(" + map.get("MODULE_TYPE_ID")+")";
       stringRepMap= stringRepMap.replace('/', '_');
String stringMap = stringRepMap;

//sheet = workBook.getSheetAt(intAdd);// 创建一个工作薄对象
sheet = workBook.createSheet(stringMap);
//workBook.setSheetName(intAdd, stringMap);
intAdd++;
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
       sheet.setColumnWidth(2, 10000);// 设置第三列的宽度为
       sheet.setColumnWidth(3, 10000);// 设置第四列的宽度为
       sheet.setColumnWidth(4, 10000);// 设置第五列的宽度为
       sheet.setColumnWidth(5, 10000);// 设置第六列的宽度为
       sheet.setColumnWidth(6, 10000);// 设置第七列的宽度为
       sheet.setColumnWidth(7, 10000);// 设置第八列的宽度为
    //创建标题
    HSSFRow row = sheet.createRow(rowNum++);// 创建一个行对象
 
       row.setHeightInPoints(23);// 设置行高23像素  
       HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
   
       // 设置字体  
       HSSFFont font = workBook.createFont();// 创建字体对象  
       font.setFontHeightInPoints((short) 11);// 设置字体大小  
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
       font.setFontName("宋体");// 设置为宋体字  
       style.setFont(font);// 将字体加入到样式对象 
       HSSFCell cell = row.createCell(0);// 创建单元格,开始第一个单元格,单元格编号默认从0开始
       //可以加黑
       //设置每个模块的 模块名称和类型的id
       
cell.setCellValue(map.get("MODULE_NAME")+"("+map.get("MODULE_TYPE_ID")+")");
cell.setCellStyle(style);
//cell.setCellValue(resultSet.getNString("MODULE_NAME")+"("+resultSet.getNString("MODULE_SHORT_NAME")+")");
//创建元素名称,属性,代码
HSSFRow row1 = sheet.createRow(rowNum++);// 创建一个行对象
 
       row1.setHeightInPoints(23);// 设置行高23像素  
       HSSFCell cell1 = row1.createCell(1);// 创建单元格
cell1.setCellValue("元素名称");
cell1.setCellStyle(style);
//可以补充设置单元格的宽度。。。。cell1.setCellStyle(style);
HSSFCell cell2 = row1.createCell(2);// 创建单元格
cell2.setCellValue("属性");
cell2.setCellStyle(style);

/*HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("代码");
cell3.setCellStyle(style);*/

//新添加数据类型。。。。
HSSFCell cell3 = row1.createCell(3);// 创建单元格
cell3.setCellValue("数据类型");
cell3.setCellStyle(style);

HSSFCell cell4 = row1.createCell(4);// 创建单元格
cell4.setCellValue("代码");
cell4.setCellStyle(style);

//开始创建元素名称,属性,代码
//元素名称
//select * from PUB_ELEMENT where MIDULE_ID;
String string = pub_elementSql;
String string1 = "MODULE_CODE";
String string2 = (String) map.get("MODULE_CODE");
//获取元素集合
//ResultSet resultSet1= DBOperator(string,string1,string2);
//ResultSet resultSet1= DBOperatorElement(string1,string2);
List<Map<String, Object>> list1= DBOperatorElement(string2);
       Iterator<Map<String, Object>> terIterator1 = list1.iterator();

//设置行数
//int rowNum = 3;
//设置列数
//int columnNum = 1;
//设置模块中的相应的元素,写到excel中去
while (terIterator1.hasNext()) {
//设置列数
int columnNum = 1;
Map<String, Object> map1= terIterator1.next();
// 创建一个行对象 
HSSFRow rowElement = sheet.createRow(rowNum++);
rowElement.setHeightInPoints(23);// 设置行高23像素  
//属性
//select * from PUB_ATTRIBUTE where ELEMENT_ID;
//获取元素名称
String stringElementName = map1.get("ELEMENT_NAME") + "("
+ map1.get("ELEMENT_VAR_NAME") + ")";
HSSFCell cellElment = rowElement.createCell(columnNum);
//添加新行中的第一个单元格数值
cellElment.setCellValue(stringElementName);

columnNum+=1;
//属性名称
String stringAttributeName=null;
//属性名称
String stringCodeName=null;
//查询的表明,字段,id
String string11 = pub_attributeSql;
String string22 = "ELEMENT_CODE";
String string33 = (String) map1.get("ELEMENT_CODE");
//获取属性集合
//ResultSet resultSet2= DBOperator(string11,string22,string33);
//ResultSet resultSet2= DBOperatorAttribute(string22,string33);
List<Map<String, Object>> list2= DBOperatorAttribute(string33);
       Iterator<Map<String, Object>> terIterator2 = list2.iterator();

       //设置属性,把属性写到Excel中
       //用于判断属性个数,多于一个就要添加新行
       int yesOrNoAddRow = 0;
       //记录新添加行时,需要添加的单元格的位置
       int attributeCellInRowNum = 0;
while (terIterator2.hasNext()) {

Map<String, Object> map2= terIterator2.next();
//这里要考虑到表格的合并......,例如患者姓名的 录入值,昵称 就要分两行
//代码
//select * from PUB_ATTRIBUTE where ELEMENT_ID;
//获取属性名称
stringAttributeName=map2.get("ATTR_NAME")+"("+map2.get("ATTR_VAR_NAME")+")";
if(yesOrNoAddRow>0){
// 创建一个行对象 
HSSFRow rowElementNew = sheet.createRow(rowNum++);
rowElementNew.setHeightInPoints(23);// 设置行高23像素
columnNum=attributeCellInRowNum;
HSSFCell cellElment1 = rowElementNew.createCell(attributeCellInRowNum);
//是否添加新行
   //attributeCellInRowNum=columnNum;
//添加新行中的第二个单元格数值
cellElment1.setCellValue(stringAttributeName);
columnNum+=1;

//新添加数据类型列。。。。
HSSFCell cellElmentData = rowElementNew.createCell(columnNum);
String stringAttributeName1=(String) map2.get("DATA_TYPE_NAME");
cellElmentData.setCellValue(stringAttributeName1);
columnNum+=1;

String string333 = (String) map2.get("ATTR_CODE");

List<Map<String, Object>> list3= DBOperatorAttCode(string333);
       Iterator<Map<String, Object>> terIterator3 = list3.iterator();
while (terIterator3.hasNext()) {
Map<String, Object> map3 = terIterator3.next();
//查询的表明,字段,id  
stringCodeName =map3.get("CODE_VALUE")+"."+ map3.get("CODE_NAME");

HSSFCell cellElment2 = rowElementNew.createCell(columnNum);
//添加新行中的第三个单元格数值
cellElment2.setCellValue(stringCodeName);
columnNum+=1;
}
}else {
HSSFCell cellElment1 = rowElement.createCell(columnNum);
//记录新添加行时,需要添加的单元格的位置
attributeCellInRowNum =columnNum;
//添加新行中的第二个单元格数值
cellElment1.setCellValue(stringAttributeName);
columnNum+=1;

//新添加数据类型列。。。。
HSSFCell cellElmentData = rowElement.createCell(columnNum);
String stringAttributeName1=(String) map2.get("DATA_TYPE_NAME");
cellElmentData.setCellValue(stringAttributeName1);
columnNum+=1;

String string111 = pub_attr_codeSql;
String string222 = "ATTR_CODE";
String string333 = (String) map2.get("ATTR_CODE");

//ResultSet resultSet3= DBOperator(string111,string222,string333);
//ResultSet resultSet3= DBOperatorAttCode(string222,string333);
List<Map<String, Object>> list3= DBOperatorAttCode(string333);
       Iterator<Map<String, Object>> terIterator3 = list3.iterator();
while (terIterator3.hasNext()) {
Map<String, Object> map3 = terIterator3.next();
//查询的表明,字段,id  
stringCodeName =map3.get("CODE_VALUE")+"."+ map3.get("CODE_NAME");

HSSFCell cellElment2 = rowElement.createCell(columnNum);
//添加新行中的第三个单元格数值
cellElment2.setCellValue(stringCodeName);
columnNum+=1;
}
}
yesOrNoAddRow+=1;
}
//rowNum+=1;
}

/*//间隔不同的模块
HSSFRow row11 = sheet.createRow(rowNum);// 创建一个行对象
row11.setHeightInPoints(23);
HSSFRow row22 = sheet.createRow(rowNum+1);// 创建一个行对象
row22.setHeightInPoints(23);*/
//cell.setCellStyle(style);// 应用样式对象
/*for (Cell cell4 : row12) {
//循环   创建具体元素名称  属性,代码值的单元格具体值。
}*/
}
   
    FileOutputStream os = null;
try {
os = new FileOutputStream("multisheetstyle_2003.xls");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}  
 
       try {
workBook.write(os);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 将文档对象写入文件输出流
 
       //os.close();// 关闭文件输出流
       
       //workBook.close();
       
       System.out.println("创建成功 office 2003 excel"); 
       
   
    //creatExcel(resultSet,"人口统计学(DM)");
   
       //creat2003Excel();// 创建2007版Excel文件  
       //creat2007Excel();// 创建2003版Excel文件  
       //读取2003Excel文件  
   
       /*String path2003 = System.getProperty("user.dir")  
               + System.getProperty("file.separator")
               + "style_2003.xls";
       // 获取项目文件路径+2003版文件名  
       System.out.println("路径:" + path2003);  
       File f2003 = new File(path2003);  
       try {  
           readExcel(f2003);  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }  
       //读取2007Excel文件  
       String path2007 = System.getProperty("user.dir")
         + System.getProperty("file.separator") 
         + "style_2007.xlsx";// 获取项目文件路径+2007版文件名  
       System.out.println("路径:" + path2007);  
       File f2007 = new File(path2007);  
       try {  
           readExcel(f2007);  
       } catch (IOException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
       }*/
}
   
   /**  
    * 创建版本的Excel文件  
    */  
   private static void creatExcel(ResultSet resultSet ,String titleString) throws FileNotFoundException,IOException {
   
       HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象  
 
       HSSFSheet sheet = workBook.createSheet(titleString);// 创建一个工作薄对象  
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为  
 
       HSSFRow row = sheet.createRow(1);// 创建一个行对象  
 
       row.setHeightInPoints(23);// 设置行高23像素  
 
       HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象  
 
       // 设置字体  
 
       HSSFFont font = workBook.createFont();// 创建字体对象  
 
       font.setFontHeightInPoints((short) 11);// 设置字体大小  
 
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
 
       font.setFontName("黑体");// 设置为黑体字  
 
       style.setFont(font);// 将字体加入到样式对象  
 
       // 设置对齐方式  
 
       style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中  
 
       style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中  
 
       // 设置边框  
 
       style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线  
 
       style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色  
 
       style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线  
 
       style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框  
 
       style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框  
 
       /*// 声明一个画图的顶级管理器  
       HSSFPatriarch patriarch = sheet.createDrawingPatriarch();  
       // 定义注释的大小和位置,详见文档  
       HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));  
       // 设置注释内容  
       comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));  
       // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.  
       comment.setAuthor("leno");  */
       // 格式化日期  
 
       style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));  
       List<String> list = new ArrayList<String>() ;
       int columnIndex =1; 
       try {
while (resultSet.next()) {
list.add(resultSet.getNString("MODULE_NAME"));
//(columnIndex++));
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
       int xt=0;
       // 创建数据单元格
for (String string : list) {
HSSFCell cell = row.createCell(xt);// 创建单元格  
 
//cell.setCellValue(new Date());// 写入当前日期  
cell.setCellValue(string);// 写入当前日期 
cell.setCellStyle(style);// 应用样式对象  
xt++;
}
 
       // 文件输出流  
 
       FileOutputStream os = new FileOutputStream("style_2003.xls");  
 
       workBook.write(os);// 将文档对象写入文件输出流  
 
       os.close();// 关闭文件输出流  
       
       workBook.close();
       
       System.out.println("创建成功 office 2003 excel");  
   }  
   
   /**  
    * 创建2007版Excel文件  
    *   
    * @throws FileNotFoundException  
    * @throws IOException  
    */  
   private static void creat2007Excel() throws FileNotFoundException,  
           IOException {  
       // HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象  
       XSSFWorkbook workBook = new XSSFWorkbook();  
       XSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象  
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为  
 
       XSSFRow row = sheet.createRow(1);// 创建一个行对象  
 
       row.setHeightInPoints(23);// 设置行高23像素  
 
       XSSFCellStyle style = workBook.createCellStyle();// 创建样式对象  
 
       // 设置字体  
 
       XSSFFont font = workBook.createFont();// 创建字体对象  
 
       font.setFontHeightInPoints((short) 15);// 设置字体大小  
 
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
 
       font.setFontName("黑体");// 设置为黑体字  
 
       style.setFont(font);// 将字体加入到样式对象  
 
       // 设置对齐方式  
 
       style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中  
 
       style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中  
 
       // 设置边框  
 
       style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线  
 
       style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色  
 
       style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线  
 
       style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框  
 
       style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框  
 
       // 格式化日期  
 
       style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));  
 
       XSSFCell cell = row.createCell(1);// 创建单元格  
 
       cell.setCellValue(new Date());// 写入当前日期  
 
       cell.setCellStyle(style);// 应用样式对象  
 
       // 文件输出流  
 
       FileOutputStream os = new FileOutputStream("style_2007.xlsx");  
 
       workBook.write(os);// 将文档对象写入文件输出流  
 
       os.close();// 关闭文件输出流  
       System.out.println("创建成功 office 2007 excel");  
   }  
 
   /**  
    * 创建2003版本的Excel文件  
    */  
   private static void creat2003Excel() throws FileNotFoundException,  
           IOException {  
       HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象  
 
       HSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象  
 
       sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为  
 
       HSSFRow row = sheet.createRow(1);// 创建一个行对象  
 
       row.setHeightInPoints(23);// 设置行高23像素  
 
       HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象  
 
       // 设置字体  
 
       HSSFFont font = workBook.createFont();// 创建字体对象  
 
       font.setFontHeightInPoints((short) 15);// 设置字体大小  
 
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
 
       font.setFontName("黑体");// 设置为黑体字  
 
       style.setFont(font);// 将字体加入到样式对象  
 
       // 设置对齐方式  
 
       style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中  
 
       style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中  
 
       // 设置边框  
 
       style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线  
 
       style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色  
 
       style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线  
 
       style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框  
 
       style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框  
 
       /*// 声明一个画图的顶级管理器  
       HSSFPatriarch patriarch = sheet.createDrawingPatriarch();  
       // 定义注释的大小和位置,详见文档  
      HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));  
      // 设置注释内容  
      comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));  
      // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.  
      comment.setAuthor("leno");  */
       // 格式化日期  
 
       style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));  
 
       HSSFCell cell = row.createCell(1);// 创建单元格  
 
       cell.setCellValue(new Date());// 写入当前日期  
 
       cell.setCellStyle(style);// 应用样式对象  
 
       // 文件输出流  
 
       FileOutputStream os = new FileOutputStream("style_2003.xls");  
 
       workBook.write(os);// 将文档对象写入文件输出流  
 
       os.close();// 关闭文件输出流  
       workBook.close();
       System.out.println("创建成功 office 2003 excel");  
   }  
 
   /**  
    * 对外提供读取excel 的方法  
    */  
   public static List<List<Object>> readExcel(File file) throws IOException {  
       String fileName = file.getName();  
       String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName  
               .substring(fileName.lastIndexOf(".") + 1);  
       if ("xls".equals(extension)) {  
           return read2003Excel(file);  
       } else if ("xlsx".equals(extension)) {  
           return read2007Excel(file);  
       } else {  
           throw new IOException("不支持的文件类型");  
       }  
   }  
 
   /**  
    * 读取 office 2003 excel  
    *   
    * @throws IOException  
    * @throws FileNotFoundException  
    */  
   private static List<List<Object>> read2003Excel(File file)  
           throws IOException {  
       List<List<Object>> list = new LinkedList<List<Object>>();  
       HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));  
       HSSFSheet sheet = hwb.getSheetAt(0);  
       Object value = null;  
       HSSFRow row = null;  
       HSSFCell cell = null;  
       System.out.println("读取office 2003 excel内容如下:");  
       for (int i = sheet.getFirstRowNum(); i <= sheet  
               .getPhysicalNumberOfRows(); i++) {  
           row = sheet.getRow(i);  
           if (row == null) {  
               continue;  
           }  
           List<Object> linked = new LinkedList<Object>();  
           for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {  
               cell = row.getCell(j);  
               if (cell == null) {  
                   continue;  
               }  
               DecimalFormat df = new DecimalFormat("0");// 格式化 number String  
               // 字符  
               SimpleDateFormat sdf = new SimpleDateFormat(  
                       "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串  
               DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字  
               switch (cell.getCellType()) {  
               case XSSFCell.CELL_TYPE_STRING:  
                   // System.out.println(i + "行" + j + " 列 is String type");  
                   value = cell.getStringCellValue();  
                   System.out.print("  " + value + "  ");  
                   break;  
               case XSSFCell.CELL_TYPE_NUMERIC:  
                   // System.out.println(i + "行" + j  
                   // + " 列 is Number type ; DateFormt:"  
                   // + cell.getCellStyle().getDataFormatString());  
                   if ("@".equals(cell.getCellStyle().getDataFormatString())) {  
                       value = df.format(cell.getNumericCellValue());  
 
                   } else if ("General".equals(cell.getCellStyle()  
                           .getDataFormatString())) {  
                       value = nf.format(cell.getNumericCellValue());  
                   } else {  
                       value = sdf.format(HSSFDateUtil.getJavaDate(cell  
                               .getNumericCellValue()));  
                   }  
                   System.out.print("  " + value + "  ");  
                   break;  
               case XSSFCell.CELL_TYPE_BOOLEAN:  
                   // System.out.println(i + "行" + j + " 列 is Boolean type");  
                   value = cell.getBooleanCellValue();  
                   System.out.print("  " + value + "  ");  
                   break;  
               case XSSFCell.CELL_TYPE_BLANK:  
                   // System.out.println(i + "行" + j + " 列 is Blank type");  
                   value = "";  
                   System.out.print("  " + value + "  ");  
                   break;  
               default:  
                   // System.out.println(i + "行" + j + " 列 is default type");  
                   value = cell.toString();  
                   System.out.print("  " + value + "  ");  
               }  
               if (value == null || "".equals(value)) {  
                   continue;  
               }  
               linked.add(value);  
 
           }  
           System.out.println("");  
           list.add(linked);  
       }  
 
       return list;  
   }  
 
   /**  
    * 读取Office 2007 excel  
    */  
 
   private static List<List<Object>> read2007Excel(File file)  
           throws IOException {  
 
       List<List<Object>> list = new LinkedList<List<Object>>();  
       // String path = System.getProperty("user.dir") +  
       // System.getProperty("file.separator")+"dd.xlsx";  
       // System.out.println("路径:"+path);  
       // 构造 XSSFWorkbook 对象,strPath 传入文件路径  
       XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));  
 
       // 读取第一章表格内容  
       XSSFSheet sheet = xwb.getSheetAt(0);  
       Object value = null;  
       XSSFRow row = null;  
       XSSFCell cell = null;  
       System.out.println("读取office 2007 excel内容如下:");  
       for (int i = sheet.getFirstRowNum(); i <= sheet  
               .getPhysicalNumberOfRows(); i++) {  
           row = sheet.getRow(i);  
           if (row == null) {  
               continue;  
           }  
           List<Object> linked = new LinkedList<Object>();  
           for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {  
               cell = row.getCell(j);  
               if (cell == null) {  
                   continue;  
               }  
               DecimalFormat df = new DecimalFormat("0");// 格式化 number String  
               // 字符  
               SimpleDateFormat sdf = new SimpleDateFormat(  
                       "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串  
               DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字  
 
               switch (cell.getCellType()) {  
               case XSSFCell.CELL_TYPE_STRING:  
                   // System.out.println(i + "行" + j + " 列 is String type");  
                   value = cell.getStringCellValue();  
                   System.out.print("  " + value + "  ");  
                   break;  
               case XSSFCell.CELL_TYPE_NUMERIC:  
                   // System.out.println(i + "行" + j  
                   // + " 列 is Number type ; DateFormt:"  
                   // + cell.getCellStyle().getDataFormatString());  
                   if ("@".equals(cell.getCellStyle().getDataFormatString())) {  
                       value = df.format(cell.getNumericCellValue());  
 
                   } else if ("General".equals(cell.getCellStyle()  
                           .getDataFormatString())) {  
                       value = nf.format(cell.getNumericCellValue());  
                   } else {  
                       value = sdf.format(HSSFDateUtil.getJavaDate(cell  
                               .getNumericCellValue()));  
                   }  
                   System.out.print("  " + value + "  ");  
                   break;  
               case XSSFCell.CELL_TYPE_BOOLEAN:  
                   // System.out.println(i + "行" + j + " 列 is Boolean type");  
                   value = cell.getBooleanCellValue();  
                   System.out.print("  " + value + "  ");  
                   break;  
               case XSSFCell.CELL_TYPE_BLANK:  
                   // System.out.println(i + "行" + j + " 列 is Blank type");  
                   value = "";  
                   // System.out.println(value);  
                   break;  
               default:  
                   // System.out.println(i + "行" + j + " 列 is default type");  
                   value = cell.toString();  
                   System.out.print("  " + value + "  ");  
               }  
               if (value == null || "".equals(value)) {  
                   continue;  
               }  
               linked.add(value);  
           }  
           System.out.println("");  
           list.add(linked);  
       }  
       return list;  
   }

private static ResultSet DBOperator (String... sql) {
    java.sql.PreparedStatement preparedStatement = null;
    java.sql.ResultSet resultSet = null;
    Connection connection = null;
    try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
try {
connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.250:1521/pdborcl", "pdsci", "123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    if (sql.length>1) {
    //sql = "select * from ? where ?=?";
    ;
    //preparedStatement= connection.prepareStatement("select * from pub_element where module_code='dc7d576b15b14da1a32bedad7f2874df'");
    preparedStatement= connection.prepareStatement("select * from module_code where ?=?");
    //设置sql语句中查询表的表名称(即要从哪个表查询)
    //preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的条件的字段名称
    preparedStatement.setString(1, sql[1]);
    //设置sql语句中的查询表的的条件的字段名称为指定id
    preparedStatement.setString(2, sql[2]);
} else if(sql.length==1) {
//sql = "select * from PUB_ELEMENT where PUB_MODULE_ID=?";
    preparedStatement= connection.prepareStatement("select * from ? ");
    //设置sql语句中查询表的表名称(即要从哪个表查询)
    preparedStatement.setString(1, sql[1]);
}else {
//sql = "select * from PUB_ELEMENT where PUB_MODULE_ID=?";
    preparedStatement= connection.prepareStatement("select * from PUB_MODULE ");
}

//statement= connection.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    return resultSet;

}
   
   private static List<Map<String, Object>> DBOperatorModule () {
    List<Map<String, Object>> list = new ArrayList<>();
    java.sql.PreparedStatement preparedStatement = null;
    java.sql.ResultSet resultSet = null;
    Connection connection = null;
    try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
try {
//connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.250:1521/pdborcl", "pdsci", "123456");
connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.118:1521/orcl", "pdsci", "123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
   
    preparedStatement= connection.prepareStatement("select * from pub_module where record_status ='Y' order by module_name, module_type_id");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
list=resultSetToList(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    return list;

}
        private static List<Map<String, Object>> DBOperatorElement (String... sql) {
        List<Map<String, Object>> list = new ArrayList<>();
    java.sql.PreparedStatement preparedStatement = null;
    java.sql.ResultSet resultSet = null;
    Connection connection = null;
    try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
try {
//connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.250:1521/pdborcl", "pdsci", "123456");
connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.118:1521/orcl", "pdsci", "123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
       //sql = "select * from ? where ?=?";
    ;
    //preparedStatement= connection.prepareStatement("select * from pub_element where module_code='dc7d576b15b14da1a32bedad7f2874df'");
    preparedStatement= connection.prepareStatement("select * from pub_element where module_code=? order by element_name");
    //设置sql语句中查询表的表名称(即要从哪个表查询)
    //preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的条件的字段名称
    preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的的条件的字段名称为指定id
    //preparedStatement.setString(2, sql[1]);
   //statement= connection.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
list=resultSetToList(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    return list;

}
   private static List<Map<String, Object>> DBOperatorAttribute (String... sql) {
    List<Map<String, Object>> list = new ArrayList<>();
    java.sql.PreparedStatement preparedStatement = null;
    java.sql.ResultSet resultSet = null;
    Connection connection = null;
    try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
try {
//connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.250:1521/pdborcl", "pdsci", "123456");
connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.118:1521/orcl", "pdsci", "123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
       //sql = "select * from ? where ?=?";
    ;
    //preparedStatement= connection.prepareStatement("select * from pub_element where module_code='dc7d576b15b14da1a32bedad7f2874df'");
    preparedStatement= connection.prepareStatement("select * from pub_attribute where element_code=? order by attr_name");
    //设置sql语句中查询表的表名称(即要从哪个表查询)
    //preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的条件的字段名称
    preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的的条件的字段名称为指定id
    //preparedStatement.setString(2, sql[1]);
   //statement= connection.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
list=resultSetToList(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    return list;

}
   
   private static List<Map<String, Object>> DBOperatorAttCode (String... sql) {
    List<Map<String, Object>> list = new ArrayList<>();
    java.sql.PreparedStatement preparedStatement = null;
    java.sql.ResultSet resultSet = null;
    Connection connection = null;
    try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
try {
//connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.250:1521/pdborcl", "pdsci", "123456");
connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.118:1521/orcl", "pdsci", "123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
       //sql = "select * from ? where ?=?";
    //preparedStatement= connection.prepareStatement("select * from pub_element where module_code='dc7d576b15b14da1a32bedad7f2874df'");
    preparedStatement= connection.prepareStatement("select * from pub_attr_code where attr_code=? order by code_value,code_name");
    //设置sql语句中查询表的表名称(即要从哪个表查询)
    //preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的条件的字段名称
    preparedStatement.setString(1, sql[0]);
    //设置sql语句中的查询表的的条件的字段名称为指定id
    //preparedStatement.setString(2, sql[1]);
   //statement= connection.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
    resultSet = preparedStatement.executeQuery();
   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
list=resultSetToList(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    return list;
}
   public static List<Map<String, Object>> resultSetToList(ResultSet rs) throws java.sql.SQLException {   
          if (rs == null)   
              return null;   
          ResultSetMetaData md = rs.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等   
          int columnCount = md.getColumnCount(); //返回此 ResultSet 对象中的列数   
          List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();   
          //Map<String, Object> rowData = new HashMap<String, Object>();   
          while (rs.next()) { 
         Map<String, Object> rowData = new HashMap<String, Object>();  
           //rowData = new HashMap<String, Object>(columnCount);   
           for (int i = 1; i <= columnCount; i++) {   
                   rowData.put(md.getColumnName(i), rs.getObject(i));   
           }             
           
           list.add(rowData);   
           //System.out.println("list:" + list.toString()); 
          }  
          System.out.println("list:" + list.toString()); 
          return list;
          }  
   
   
   
}

 
 

poi操作oracle数据库导出excel文件2的更多相关文章

  1. poi操作oracle数据库导出excel文件

    HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象 HSSFSheet sheet = workBook.createSheet( ...

  2. PHP从数据库导出EXCEL文件

    参考博客链接:http://www.cnblogs.com/huangcong/p/3687665.html 我的程序代码 原生导出Excel文件 <?phpheader('Content-ty ...

  3. docker容器中oracle数据库导出dmp文件

    Oracle数据库安装在docker容器中 1首先查看容器 docker ps 2进入oracle容器 docker exec -it 7f0f3f2d4f88 /bin/bash 3导出整个库:这个 ...

  4. Oracle导入导出dmp文件

    目 录 目             录...3 1      说明...3 2      导出dmp文件...3 3      导入dmp文件...5 3.1            环境准备...5 ...

  5. java POI导出Excel文件数据库的数据

    在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...

  6. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

  7. loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试

    调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...

  8. 通过命令窗口导入导出oracle数据库到dmp文件

    通过命令窗口导入导出oracle数据库到dmp文件 很多时候我们需要备份Oracle的数据库,然后将数据导入其他数据库,因为有大文本字段会导致insert无法完全导出,只能导出为dmp文件,前提是wi ...

  9. 将Oracle数据库导出为txt格式

    将Oracle数据库导出为txt格式: 方法1: 对于Windows系统,可以采用以下方式: 选择控制面板-->管理工具-->数据源(ODBC),添加一个新的数据源(系统或用户DSN均可) ...

随机推荐

  1. [转]TCP、UDP数据包大小的确定

       TCP.UDP数据包大小的确定   http://blog.163.com/jianlizhao%40126/blog/static/1732511632013410101827640/   U ...

  2. UML 小结(1)- 整体阐述

    前言:              UML( Unified Modeling Language) 又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形 ...

  3. 使用OPTIMIZE TABLE命令来整理表碎片实践

    操作环境:ubuntu 14.10   mysql 5.6.25 对含有BLOB或TEXT字段的表,若经常做修改或删除类的操作,需要定期执行OPTIMIZE TABLE命令来整理碎片. 1.creat ...

  4. Xcode8之后 XMPP 重定义问题 Redefinition of module 'dnssd'

    在升级Xcode到8之后,原来的关于XMPP的项目运行报错,错误信息为: Redefinition of module 'dnssd' 系统和XMPP框架同时用到了 'dnssd',大概就是错误的原因 ...

  5. 国内最大的 Node.js 社区将 New Relic 的监控产品换成了 OneAPM

    国内最知名的 CNode 社区把 New Relic 的监控产品换成了 OneAPM .难道 APM 的老大 New Relic 已经被 OneAPM 超越? 毋庸置疑,在全球应用性能管理 SaaS ...

  6. HDU 1087 Super Jumping! Jumping! Jumping!(最长上升子序列,dp)

    以下引用自:http://www.cnblogs.com/Lyush/archive/2011/08/31/2161314.html沐阳 该题可以算是一道经典的DP题了,题中数据是这样的.以 3 1 ...

  7. POJ 1844

    #include <iostream> #define MAXN 20 using namespace std; int value[MAXN]; int place[MAXN]; ]; ...

  8. Kibana

    https://github.com/moonstack/moon-kibana.git

  9. struts2配置文件中action的name属性

    struts2配置文件中action的name属性的第一个字符不要加斜杠 <action name="see" class="baoxiuManage_seeAct ...

  10. 【POJ3358】

    题目描述: 题意: 就是给定一个a/b,求a/b的结果变成二进制之后的小数.这个小数后面会有一段循环节,只要求输出循环节开始循环的位置和循环长度. 分析: 这题我是这么想的,比如说样例中的1/5,我们 ...