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