发现poi包中的问题!
最近要做报表,需要了解excel结构,对excel数据导入导出,控制excel。于是便用jakarta 的poi。
最近我发现poi包中有这样一个问题。
把poi-2.0-pre2-20030711.jar文件解开,发现在poi\hssf\usermodel\路径下没有contrib包。这个问题的出现是因为我编译一段代码(代码在后面)时,出现的错误信息表示应该有这个包。我想是不是这个poi包不全呢?于是我去http://jakarta.apache.org/builds/jakarta-poi/dev/bin/又下载了很多其他版本的,但是解开来看发现都没有这个包。于是我有去http://jakarta.apache.org/poi/网站,tree结构显示的确有这个包。这搞得我十分恼火。哪位道上朋友能指点迷津呢?
另附上代码:
/* $Id: HelloWorldExample.java,v 1.1.4.1 2001/11/29 18:28:41 remm Exp $
*
*/
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.usermodel.contrib.HSSFRegionUtil;
import org.apache.poi.hssf.util.*;
import org.apache.poi.hssf.dev.*;
import org.apache.poi.hssf.model.*;
import org.apache.poi.poifs.filesystem.*;
/**
* The simplest possible servlet.
*
* @author James Duncan Davidson
*/
public class HelloWorldExample extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
try{
processRequest(request, response);
}
catch(Exception ex)
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(ex.toString());
}
}
public void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("application/vnd.ms-excel");
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
HSSFCellStyle cs = wb.createCellStyle();
HSSFFont f = wb.createFont();
//set font 1 to 12 point type
f.setFontHeightInPoints((short) 18);
//make it blue
f.setColor( (short)0xc );
// make it bold
//arial is the default font
f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
cs.setFont(f);
cs.setWrapText(true);
cs.setBorderLeft( HSSFCellStyle.BORDER_MEDIUM );
cs.setLeftBorderColor( HSSFColor.BLACK.index );
cs.setRightBorderColor( HSSFColor.BLACK.index );
cs.setTopBorderColor( HSSFColor.BLACK.index );
cs.setBottomBorderColor( HSSFColor.BLACK.index );
// 创建一个新的行,添加几个单元格。
// 行号从0开始计算
HSSFRow row = sheet.createRow((short)0);
// 创建一个单元格,设置单元格的值
HSSFCell cell = row.createCell((short)0);
cell.setCellValue(1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("测试数据");
short rowto =3;
short colto =3;
Region r= new Region(0, rowto, 0,colto);
sheet.addMergedRegion(r);
int rowStart = r.getRowFrom();
int rowEnd = r.getRowTo();
int column = r.getColumnFrom();
for (int i = rowStart; i <= rowEnd; i++) {
sheet.getCell(sheet.getRow(i), column).setCellStyle(cs);
//sheet.createCell((short)i);
}
row.createCell((short)1).setCellValue(1.2);
HSSFCell c=row.createCell((short)2);
c.setEncoding(HSSFCell.ENCODING_UTF_16);
c.setCellValue("测试数据");
c.setCellStyle(cs);
/*
try{
HSSFRegionUtil.setLeftBorderColor(HSSFColor.BLACK.index, r, sheet, wb);
}
catch(Exception ex)
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(ex.toString());
}
*/
row.createCell((short)3).setCellValue(true);
// 写入输出结果
OutputStream out = response.getOutputStream();
wb.write(out);
out.close();
}
}
出错信息:
package import org.apache.poi.hssf.usermodel.contrib.HSSFRegionUtil doesnot exit
symbol: method getCell (org.apache.poi.hssf.usermodel.contrib.HSSFRow,int)
location: class import org.apache.poi.hssf.usermodel.HSSFsheet
sheet.getCell(sheet.getRow(i),column).setCellStyle(cs);
2 errors
分析:1。没有包org.apache.poi.hssf.usermodel.contrib.HSSFRegionUtil,或者没有找到。
2。第二个错误信息显示HSSFsheet.class也有问题。
3.当我屏蔽掉出错处时就可以。并且配置servlet,在一个普通页面通过post,提交后就可以在web上显示新创建的excel。
哪位热心朋友分析一下。另外欢迎讨论报表制作问题。
我觉得关键问题还是poi包的完整性问题,不知道我这样说对还是不对。