用POI,可以把多个sheet放到一个excel里,百度搜索一下例子

解决方案 »

  1.   


    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    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.Region;/**
     * 去http://jakarta.apache.org/site/downloads/downloads_poi.cgi下载poi项目相关的jar包和文档
     */
    public class TestPOI {    /**
         * 新建一个Excel文件,里面添加5行5列的内容,再添加两个高度为2的大单元格。
         * 
         * @param fileName
         */
        @SuppressWarnings("deprecation")
    public void writeExcel(String fileName) {        //目标文件
            File file = new File(fileName);
            FileOutputStream fOut = null;
            try {
                //    创建新的Excel 工作簿
                HSSFWorkbook workbook = new HSSFWorkbook();            //    在Excel工作簿中建一工作表,其名为缺省值。
                //    也可以指定工作表的名字。
                //可以多创建几个sheet
                HSSFSheet sheet = workbook.createSheet("Test_Table");            //  创建字体,红色、粗体
                HSSFFont font = workbook.createFont();
                font.setColor(HSSFFont.COLOR_RED);
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);            //  创建单元格的格式,如居中、左对齐等
                HSSFCellStyle cellStyle = workbook.createCellStyle();
                //  水平方向上居中对齐
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                //  垂直方向上居中对齐
                cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                //  设置字体
                cellStyle.setFont(font); //文字自动换行,未测试
    //HSSFCellStyle cs=workbook.createCellStyle(); 
    //cs.setWrapText(true); 
    //cell.setCellStyle(cs);             //下面将建立一个4行3列的表。第一行为表头。
                int rowNum = 0;//行标
                int colNum = 0;//列标
                //建立表头信息
                //    在索引0的位置创建行(最顶端的行)
                HSSFRow row = sheet.createRow((short) rowNum);
                //  单元格
                HSSFCell cell = null;
                for (colNum = 0; colNum < 5; colNum++) {
                    //    在当前行的colNum列上创建单元格
                    cell = row.createCell((short) colNum);                //    定义单元格为字符类型,也可以指定为日期类型、数字类型
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                    //  定义编码方式,为了支持中文,这里使用了ENCODING_UTF_16
                    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                    //  为单元格设置格式
                    cell.setCellStyle(cellStyle);                //    添加内容至单元格
                    cell.setCellValue("表头名-" + colNum);
                }
                rowNum++;
                for (; rowNum < 5; rowNum++) {
                    //  新建第rowNum行
                    row = sheet.createRow((short) rowNum);
                    for (colNum = 0; colNum < 5; colNum++) {
                        // 在当前行的colNum位置创建单元格
                        cell = row.createCell((short) colNum);
                        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                        cell.setCellStyle(cellStyle);
                        cell.setCellValue("值-" + rowNum + "-" + colNum);
                    }
                }            //  合并单元格
                //  先创建2行5列的单元格,然后将这些单元格合并为2个大单元格
                rowNum = 5;
                for (; rowNum < 7; rowNum++) {
                    row = sheet.createRow((short) rowNum);
                    for (colNum = 0; colNum < 5; colNum++) {
                        // 在当前行的colNum位置创建单元格
                        cell = row.createCell((short) colNum);
                    }
                }
                //建立第一个大单元格,高度为2,宽度为2
                rowNum = 5;
                colNum = 0;
                Region region = new Region(rowNum, (short) colNum, (rowNum + 1),
                        (short) (colNum + 1));
                sheet.addMergedRegion(region);
                //获得第一个大单元格
                cell = sheet.getRow(rowNum).getCell((short) colNum);
                cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("第一个大单元格");            //建立第二个大单元格,高度为2,宽度为3
                colNum = 2;
                region = new Region(rowNum, (short) colNum, (rowNum + 1),
                        (short) (colNum + 2));
                sheet.addMergedRegion(region);
                //获得第二个大单元格
                cell = sheet.getRow(rowNum).getCell((short) colNum);
                cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("第二个大单元格");            //表格宽度自动适应
                sheet.autoSizeColumn((short)0); //调整第一列宽度
                sheet.autoSizeColumn((short)1); //调整第二列宽度
                sheet.autoSizeColumn((short)2); //调整第三列宽度
                sheet.autoSizeColumn((short)3); //调整第四列宽度
                
                
                //  工作薄建立完成,下面将工作薄存入文件
                //    新建一输出文件流
                fOut = new FileOutputStream(file);
                //    把相应的Excel 工作簿存盘
                workbook.write(fOut);
                fOut.flush();
                //    操作结束,关闭文件
                fOut.close();            System.out.println("Excel文件生成成功!Excel文件名:" + file.getAbsolutePath());
            } catch (Exception e) {
                System.out.println("Excel文件" + file.getAbsolutePath()  + "生成失败:" + e);
            } finally {
                if (fOut != null){
                    try {
                        fOut.close();
                    } catch (IOException e1) {
                    }
                }
            }
        }    /**
         * 读Excel文件内容
         * 
         * @param fileName
         */
        @SuppressWarnings("deprecation")
    public void readExcel(String fileName) {
            
            File file = new File(fileName);
            FileInputStream in = null;
            try {
                //    创建对Excel工作簿文件的引用
                in = new FileInputStream(file);
                HSSFWorkbook workbook = new HSSFWorkbook(in);            //    创建对工作表的引用。
                //    这里使用按名引用
                HSSFSheet sheet = workbook.getSheet("Test_Table");
                //    也可用getSheetAt(int index)按索引引用,
                //    在Excel文档中,第一张工作表的缺省索引是0,其语句为:
                //    HSSFSheet sheet = workbook.getSheetAt(0);            //下面读取Excel的前5行的数据
                System.out.println("下面是Excel文件" + file.getAbsolutePath() + "的内容:");
                HSSFRow row = null;
                HSSFCell cell = null;
                int rowNum = 0;//行标
                int colNum = 0;//列标
                for (; rowNum < 5; rowNum++) {
                    //  获取第rowNum行
                    row = sheet.getRow((short) rowNum);
                    for (colNum = 0; colNum < 5; colNum++) {
                        // 获取当前行的colNum位置的单元格
                        cell = row.getCell((short) colNum);
                        System.out.print(cell.getStringCellValue() + "\t");
                    }
                    //换行
                    System.out.println();
                }            in.close();
            } catch (Exception e) {
                System.out.println("读取Excel文件" + file.getAbsolutePath() + "失败:" + e);
            }  finally {
                if (in != null){
                    try {
                        in.close();
                    } catch (IOException e1) {
                    }
                }
            }    }
        public static void main(String[] args) throws Exception {
            TestPOI excel = new TestPOI();
            String fileName = "d:/test.xls";
            excel.writeExcel(fileName);
            //excel.readExcel(fileName);
        }
    }
      

  2.   

    package com.jerry.commonutils;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Locale;
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.WorkbookSettings;
    import jxl.format.Colour;
    import jxl.read.biff.BiffException;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;
    /*
     * java 操作EXCEL文件的类,需集合jxl.jar包
     * 读取并显示EXCEL数据  , 向EXCEL文件内写入数据
     * author: jerry.gao
     * time:  2008-07-08 11:10
     * 
     */
    public class ExcelUtils {/* public static void main(String[] args) {
    System.out.println(":====");
    File file = new File("E:\\Book1.xls");
    ExcelUtils eu = new ExcelUtils();
    eu.readExcel(file, 0);

    System.out.println(":====");
    File file = new File("E:\\Book2.xls");

    ExcelUtils eu = new ExcelUtils();
    String[] title = {"xingming" , " nianling "};
    eu.addDateToExcelFile(file, null, "jerry.gao", title); }*/ public ExcelUtils() {
    super();
    // TODO Auto-generated constructor stub
    }
    //读取EXCEL 文件 ,num 为第几张sheet , 将结果显示出来
    public void readExcel(File file, int num) { try {
    Workbook wb = Workbook.getWorkbook(file);
    Sheet sheet = wb.getSheet(num); //获取第几张SHEET表
    for (int r = 0; r < sheet.getRows(); r++) {
    for (int c = 0; c < sheet.getColumns(); c++) {
    System.out.print(sheet.getCell(c, r).getContents() + "   |  ");
    }
    System.out.print("\n");
    }
    } catch (BiffException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }


    /*
    * 添加数据生产EXCEL文件
    *  file 为生成的EXCEL文件 , list 添加的数据集合 ,sheetname 工作表名 ,title 为列名
    */
    public void addDateToExcelFile(File file, List list, String sheetname,
    String[] title) {
    try {
    if (file.exists()) {
    if (file.delete()) {
    }
    }
    WorkbookSettings wbs = new WorkbookSettings();
    wbs.setLocale(new Locale("zh", "CN"));
    workbook = Workbook.createWorkbook(file, wbs);
    WritableSheet sheet = workbook.createSheet(sheetname, 0);   //创建第一张sheet, 名字为sheetname
    workbook.setColourRGB(Colour.BLUE, 0xff, 0, 0);
    Label lb = null;

    //添加列的名称
    for(int c = 0 ; c < title.length; c ++ ){
    sheet.setColumnView(c, 40);                //设置列的宽度 , 前参数为第几列 , 后参数为列宽
    lb = new Label(c , 0 , title[c]);    //添加列名
    sheet.addCell(lb);
    }

        //添加数据
    for(int r = 0 ; r < list.size() ; r++){
    sheet.setRowView(r, 18); //设置行的高度 , 前参数为第几行 , 后参数为行高
    lb = new Label(0 , r+1 , list.get(r).toString());   //前参数为第几列 后参数为第几行
    sheet.addCell(lb);
    }

    workbook.write();
    workbook.close();

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (RowsExceededException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (WriteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    private WritableWorkbook workbook;
    }
    发个读,写EXCEL文件的类给你参考,注意其中注记的地方,可以满足你的需求!