//在Excel文档中,第一张工作表的缺省索引是0 Sheet st = rwb.getSheet("Sheet1");
//通用的获取cell值的方式,getCell(int column, int row) 行和列 int Rows=st.getRows(); int Cols=st.getColumns(); System.out.println("当前工作表的名字:"+st.getName()); System.out.println("总行数:"+Rows); System.out.println("总列数:"+Cols);
首先需要到网上下个jxl.jar的包练习代码如下:(注意里面的图片替换成自己的就可以了)import java.io.*;
import java.util.Random;
import java.util.Date;
import jxl.*;
import jxl.format.UnderlineStyle;
import jxl.write.*;
import jxl.write.Number;
import jxl.write.Boolean;
public class CreateXL
{
public CreateXL()
{
}
public static void main(String[] args)
{
//读Excel
//CreateXL.readExcel("d:/abc.xls");
//创建新的Excel
CreateXL.writeExcel("d:/new.xls");
//更新Excel
CreateXL.updateExcel("d:/new.xls");
}
//jxl暂时不提供修改已经存在的数据表,这里通过一个小办法来达到这个目的,不适合大型数据更新!
//这里是通过覆盖原文件来更新的.
public static void updateExcel(String filePath)
{
try
{
Workbook rwb = Workbook.getWorkbook(new File(filePath));
WritableWorkbook wwb = Workbook.createWorkbook(new File("d:/new.xls"),rwb);//copy
WritableSheet ws = wwb.getSheet(0);
WritableCell wc = ws.getWritableCell(0,0);
//判断单元格的类型,做出相应的转换
Label label = (Label)wc;
label.setString("The value has been modified");
wwb.write();
wwb.close();
rwb.close();
}
catch(Exception e)
{
e.printStackTrace();
}
} public static void writeExcel(String filePath)
{
try
{
//创建工作薄
WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
//创建工作表
WritableSheet ws = wwb.createSheet("Sheet1",0);
//System.out.println("create ok!");
//添加标签文本
Random rnd=new Random((new Date()).getTime());
int forNumber=rnd.nextInt(100);
for(int i=0;i<forNumber;i++)
{
ws.addCell(new Number(rnd.nextInt(50),rnd.nextInt(50),rnd.nextInt(1000)));
}
//添加图片(注意此处jxl暂时只支持png格式的图片)
//0,1分别代表x,y 2,5代表宽和高占的单元格数
ws.addImage(new WritableImage(0,1,2,5,new File("png\\cs.png")));
wwb.write();
wwb.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
public static void readExcel(String filePath)
{
/**
*后续考虑问题,比如Excel里面的图片以及其他数据类型的读取
**/
try
{
InputStream is=new FileInputStream(filePath);
//声名一个工作薄
Workbook rwb = Workbook.getWorkbook(is);
//获得工作薄的个数
//rwb.getNumberOfSheets();
//在Excel文档中,第一张工作表的缺省索引是0
Sheet st = rwb.getSheet("Sheet1");
//通用的获取cell值的方式,getCell(int column, int row) 行和列
int Rows=st.getRows();
int Cols=st.getColumns();
System.out.println("当前工作表的名字:"+st.getName());
System.out.println("总行数:"+Rows);
System.out.println("总列数:"+Cols);
Cell c;
for(int i=0;i<Cols;++i)
{
for(int j=0;j<Rows;++j)
{
//getCell(Col,Row)获得单元格的值
System.out.print((st.getCell(i,j)).getContents()+"\t");
}
System.out.print("\n");
}
//操作完成时,关闭对象,释放占用的内存空间
rwb.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
} 这是在网上找的,我都实验过了。有你想要的功能可以创建execl,
cell分3种,从数据库里查找到数据,创建execl,再创建sheet,再创建cell放入sheet就可以了
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.ResultSet;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import com.actionsoft.db.MysqlDb;public class ExExcel {
//Excel 文件要存放的位置,假定在D盘根目录下,命名规则是以当前系统时间的毫秒数
static long timea = System.currentTimeMillis();
public static String outputFile="D:/excels/"+timea+".xls";
public static void main(String argv[]){
ExExcel.exExcel();
}
public static void exExcel(){
HSSFWorkbook workbook = new HSSFWorkbook();
try{
//创建新的Excel文件
int sheetnum = 0;
//第1个SQL查询,是为了获得表中的分组数据
String sql = "select * from t_color group by color_name";
MysqlDb mdb = new MysqlDb();
ResultSet rs = mdb.query(sql);
while(rs.next()){
String yanseid = rs.getString("color_id");
String yansename = rs.getString("color_name");
//在Excel工作簿中建一个sheet,其名为默认值
//如要新建一名为"XXX名字"的sheet表,其语句为:HSSFSheet sheet = workbook.createSheet("XXX名字");
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow((short)0);//在索引0的位置创建行(最顶端的行)
HSSFCell cell = row.createCell((short)0);//在索引0的位置创建单元格(左上端)
cell.setCellType(HSSFCell.CELL_TYPE_STRING);//定义单元格为字符串类型
cell.setCellValue("颜色ID");//在单元格中输入需要的内容
row = sheet.createRow((short)0);
cell = row.createCell((short)1);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("颜色名称");
//创建第2个SQL查询
MysqlDb mdb1 = new MysqlDb();
String sql1 = "select * from t_color where color_name='"+yansename+"'";
ResultSet rs1 = mdb1.query(sql1);
int j = 1;
while(rs1.next()){
row = sheet.createRow((short)j);
cell = row.createCell((short)0);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(rs1.getString("color_id"));
row = sheet.createRow((short)j);
cell = row.createCell((short)1);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(rs1.getString("color_name"));
//新建一输出文件流
FileOutputStream fOut = new FileOutputStream(outputFile);
//把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
//操作结束,关闭文件
fOut.close();
j++;
}
String sheetname = yanseid+yansename;
workbook.setSheetName(sheetnum, sheetname, HSSFWorkbook.ENCODING_UTF_16);
sheetnum++;
}
System.out.println("EXCEL文件已生成至..."+outputFile);
}catch(Exception e) {
System.out.println("错误" + e );
}
/**
* 实现文件压缩
*/
int BUFFER = 2048;//预设缓冲区成员(位元阵列)为2048元组
long l = System.currentTimeMillis();//获得当前系统时间的毫秒数
try {
BufferedInputStream origin = null;//设置输入流
FileOutputStream dest = new FileOutputStream("E:\\"+l+".zip");//创建一个文件输出流
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));//实例化一个ZIP输出流并实例化缓冲区
byte data[] = new byte[BUFFER];//获得一个字节数组
File f = new File("D:/excels");//获得需压缩的原始文件夹
File files[] = f.listFiles();//返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
//循环路径名数组,向ZIP中写入
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);//通过路径数组来创建文件写入流
origin = new BufferedInputStream(fi, BUFFER);//实例化一个有缓冲区大小的输入流
ZipEntry entry = new ZipEntry(files[i].getName());//通过指定的名称创建ZIP文件
out.putNextEntry(entry);//输出ZIP文件
int count;//设置变量
//将输入流中最多BUFFER个数据字节读入字节数组。以整数形式返回实际读取的字节数,若到达末尾没有数据了,返回-1
while ((count = origin.read(data, 0, BUFFER)) != -1)
{
out.write(data, 0, count);//输出ZIP数据
}
origin.close();//关闭输入流
}
out.close();//关闭ZIP输出流
System.out.println("压缩文件生成...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
我是这样想的,如果是要多个sheet,那你就循环创建sheet, WritableSheet ws = wwb.createSheet("Sheet"+i,i);
然后你再一个sheet一个的往里填数据就是了嘛如果是多个execl文件,如果要填的数据符合一定规律,或者根本就是一样的, public static void writeExcel(String filePath)
{
}
那你就循环调用这个函数不就是了吗?写个通用的。。
,但是第二个excel却并没有显示....看下载的默认路径也没有看到第二个excel被导出...
是我哪里设置问题么?