读书人

用jsp方式如何导出有多个sheet内容的e

发布时间: 2012-01-15 22:57:48 作者: rapoo

用jsp方式怎么导出有多个sheet内容的excel,一个sheet的很容易,为什么多个的就不行呢?
想用jsp的方式导出excel,jsp页面模板如下, 平时我们生成的是jsp,只不过现在是以这种方式打开,contentType="Application/msexcel

<%@ page contentType="Application/msexcel; charset=GBK" language="java"%>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">


这种方式能生成多个sheet吗?要是有其它方式也行,只要能生成多个sheet就好,高手们帮帮忙,解决一下,网上找了二天没找到解决方式。。拜托了!!!!

[解决办法]

Java code
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工作簿中建一工作表,其名为缺省值。            //    也可以指定工作表的名字。            //[color=#FF0000]可以多创建几个sheet[/color]            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);    }} 


[解决办法]
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文件的类给你参考,注意其中注记的地方,可以满足你的需求!

读书人网 >J2EE开发

热点推荐