我用的是JXL做的,但为什么导出的EXCEL里面没有数据呢?
下面是我的生成代码:
public static void CreateExcel() {
try{
WritableWorkbook book=
Workbook.createWorkbook(new File("测试.xls"));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,"test");
//将定义好的单元格添加到工作表中
sheet.addCell(label);
/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
下面是我的生成代码:
public static void CreateExcel() {
try{
WritableWorkbook book=
Workbook.createWorkbook(new File("测试.xls"));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,"test");
//将定义好的单元格添加到工作表中
sheet.addCell(label);
/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
如果是长数字避免以科学技术法在excel中显示的话,可在数字前加英文的单引号进行解决
try{
response.reset();//清除Buffer
response.setContentType("application/vnd.ms-excel");
File fileWrite = new File("f:/testWrite.xls");
fileWrite.createNewFile();
new FileOutputStream(fileWrite);
excel.writeExcel(new FileOutputStream(fileWrite));
}catch(Exception e){
System.out.println(e);
}
服务启动后页面提示打开还是保存EXCEL,我保存下来打开是空的,但在f:/testWrite.xls这打开这个文件里又是对的,请问为什么页面上打开的EXCEL是空的呢?
你把路径改下:
response.setContentType("application/vnd.ms-excel");
OutputStream os = response.getOutputStream();
WritableWorkbook book = Workbook.createWorkbook(os);
WritableSheet sheet=book.createSheet("first",0);
……
public static void CreateExcel(OutputStream os) {
try{
WritableWorkbook book=
Workbook.createWorkbook(os);
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
Label label=new Label(0,0,"test",wcfF);
//将定义好的单元格添加到工作表中
sheet.addCell(label);
/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number number = new jxl.write.Number(1,0,789.123,wcfN);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
但在页面上打开时还是空的,但在f:/testWrite.xls这个目录下打开是有数据的
try{
os = response.getOutputStream();
……
excel.writeExcel(new FileOutputStream(fileWrite));
你也别写什么传递参数了
我直接把代码写全public static void CreateExcel() {
try{
response.setContentType("application/vnd.ms-excel");
OutputStream os = response.getOutputStream();
WritableWorkbook book=Workbook.createWorkbook(os);
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
Label label=new Label(0,0,"test",wcfF);
//将定义好的单元格添加到工作表中
sheet.addCell(label);
/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number number = new jxl.write.Number(1,0,789.123,wcfN);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}