各位高手指点论坛下,我用POI做报表时,为...

POI报表问题 - Java EE - 网站开发技术
帮助别人就是帮助自己!
如果这里解决了您的问题,请您点一下推荐
POI报表问题
各位高手进来指导下我用POI做报表时,利用多表查询时,导出excel中只显示一条记录,可是我的数据库中有好几十条呢。大家能否告诉我下是什么原因吗?我把页面发下来大家看看我的问题出哪了?package com.sy.light.import java.io.IOEimport java.io.OutputSimport java.io.UnsupportedEncodingEimport java.util.ArrayLimport java.util.Iimport java.util.Limport javax.annotation.Rimport javax.servlet.http.HttpServletRimport org.apache.poi.hssf.usermodel.HSSFCimport org.apache.poi.hssf.usermodel.HSSFCellSimport org.apache.poi.hssf.usermodel.HSSFFimport org.apache.poi.hssf.usermodel.HSSFRichTextSimport org.apache.poi.hssf.usermodel.HSSFRimport org.apache.poi.hssf.usermodel.HSSFSimport org.apache.poi.hssf.usermodel.HSSFWimport org.apache.poi.hssf.util.CellRangeAimport org.apache.struts2.ServletActionCimport org.apache.struts2.interceptor.ServletResponseAimport com.opensymphony.xwork2.ActionSimport com.sy.light.data.BasicDimport com.sy.light.data.LightDimport com.sy.light.entity.Bimport com.sy.light.fw.action.BaseAimport com.sy.light.service.LightLifeSpublic class ReportAction extends BaseAction&LightData&
/* ActionSupport */implements ServletResponseAware { @Resource(name = "lightLifeService") private LightLifeService lightLifeS private LightData data = new LightData(); private HttpServletR// 创建响应对象 private String format = "xls";// 导出的文件格式 private String fileN// 文件名称 public String exportExcelFile() throws IOException {
this.setResponseHeader();// 调用设置文件头方法
this.exportExcel(response.getOutputStream());// 调用导出方法
response.getOutputStream().flush();
response.getOutputStream().close();
} // /** // * 执行方法 // * **/ // public void execute() throws Exception { // this.setResponseHeader();// 调用设置文件头方法 // this.exportExcel(response.getOutputStream());// 调用导出方法 // response.getOutputStream().flush(); // response.getOutputStream().close(); // } /**
* 设置文件的响应头
* **/ public void setResponseHeader() {
HttpServletResponse response = ServletActionContext.getResponse();// 拿到Response对象
response.setContentType("application/octet-charset=iso-8859-1");// 设置文档类型以及编码格式(以二进制的形式输出)
response.setHeader("Content-Disposition", "filename="
+ java.net.URLEncoder.encode("export.xls", "UTF-8"));// 设置文件的默认属性名称,以附件的形式修改名称并且使用UTF-8转化了字符编码
response.addHeader("Pragma", "no-cache");// 发送给浏览器
// HTTP头信息,不让缓冲存在缓存之中
response.addHeader("Cache-Control", "no-cache");// 指定请求和响应遵循的缓存机制.
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
* 初始化文件名称以及文件类型
* **/ public void setFormat(String format) {
this.format =
if ("xls".equals(format)) {
this.fileName = "export.xls";// 默认的导出文件名称
if ("xlsx".equals(format)) {
this.fileName = "export.xlsx";// 如果excel为高版本时的格式
* 导出数据
* **/ public void exportExcel(OutputStream os) {
HSSFWorkbook workbook =// 创建工作表对象
HSSFSheet sheet =// 创建工作薄
HSSFCell cell =// 创建单元格
HSSFRow row =// 创建行对象
if ("xls".equals(format)) {
workbook = new HSSFWorkbook();
if ("xlsx".equals(format)) {
workbook = new HSSFWorkbook();
HSSFCellStyle style = workbook.createCellStyle();// 创建样式
HSSFFont font = workbook.createFont();// 创建字体
font.setFontHeightInPoints((short) 20);// 设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置为粗体
font.setFontName("黑体");
style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 设置水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置垂直居中
sheet = workbook.createSheet();// 创建工作页
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 6));// 合并前两行以及前七列
sheet.setColumnWidth(0, 5000);//设置第一列的宽度为500
row = sheet.createRow(0);// 创建第一行
cell = row.createCell(0);
row.setHeightInPoints(35);// 设置第一行的高度是30
cell.setCellStyle(style);// 设置样式
cell.setCellValue(new HSSFRichTextString("员工信息明细表"));// 表头标题
row = sheet.createRow(2);// 创建第三行
HSSFCellStyle styles = workbook.createCellStyle();// 创建样式
HSSFFont fonts = workbook.createFont();// 创建字体
fonts.setFontHeightInPoints((short) 12);
fonts.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置字体加粗
fonts.setFontName("宋体");
styles.setFont(fonts);
styles.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 设置水平居中
styles.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置垂直居中
String[] rows = { "人员编号", "人员姓名", "矿灯编号", "矿灯灯位", "是否采集虹膜信息", "是否采集照片" };
for (int j = 0; j & rows. j++) {
cell = row.createCell(j);// 动态的创建单元格
cell.setCellStyle(styles);
cell.setCellValue(new HSSFRichTextString(rows[j]));// 自动填充值
sheet.autoSizeColumn((short) j);// 自动适应列的宽度
styles.setWrapText(true);// 自动换行
data = lightLifeService.query(data);
List list=data.getList();
for (int i = 1; i & list.size(); i++) {
style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 设置水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置垂直居中
Object[] obj = (Object[]) list.get(i - 1);
// Basic basic=list.get(i-1);
row = sheet.createRow(i + 2);// 循环创建行
if (null != obj[0]) {
row.createCell(0).setCellValue(obj[0].toString());
row.createCell(0).setCellValue("A-A");
if (null != obj[1]) {
row.createCell(1).setCellValue(obj[1].toString());
row.createCell(1).setCellValue("A-A");
if (null != obj[2]) {
row.createCell(2).setCellValue(obj[2].toString());
row.createCell(2).setCellValue("A-A");
if (null != obj[3]) {
row.createCell(3).setCellValue(obj[3].toString());
row.createCell(3).setCellValue("A-A");
if (null != obj[4]) {
row.createCell(4).setCellValue(obj[4].toString());
row.createCell(4).setCellValue("A-A");
if (null != obj[5]) {
row.createCell(5).setCellValue(obj[5].toString());
row.createCell(5).setCellValue("A-A");
workbook.write(os);
} catch (Exception e) {
e.printStackTrace();
} } public LightData getData() {
} public void setData(LightData data) {
this.data = } public void setServletResponse(HttpServletResponse response) {
this.response = } public LightData getModel() {
// TODO Auto-generated method stub
HSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1);建议lz利用这样的方式创建row
大侠们,我想问的是POI为什么会只导出来一条数据?而且当导出时,excelz显示25M。吓人呢,但是当你打开后才2.1KB。很郁闷的问题啊!各位大侠帮我解决下吧2366人阅读
创建一个新的Workbook
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
&&&&&&&&&&&&&&&&&&&
创建一个新的 Sheet
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet1 = wb.createSheet("new sheet");
&&& HSSFSheet sheet2 = wb.createSheet("second sheet");
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
&&&&&&&&&&&&&&&&&&&
创建单元格 Cells
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
// 创建一个行row同时在上面设置一些单元格,注意,行是从0开始,这里创建第一行。
HSSFRow row = sheet.createRow((short)0);
&&& // 创建单元格并为他设置一个值,注意,单元格也是从0开始
&&& HSSFCell cell = row.createCell((short)0);
&&& cell.setCellValue(1);
&&& // 可以在同一行创建多个单元格.
&&& row.createCell((short)1).setCellValue(1.2);
&&& row.createCell((short)2).setCellValue("This is a string");
&&& row.createCell((short)3).setCellValue(true);
&&& // 将这些数据输出为Excel
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
&&&&&&&&&&&&&&&&&&&
创建关于时间的单元格 Cells
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&& //创建一个行row同时在上面设置一些单元格,注意,行是从0开始,这里创建第一行
&&& HSSFRow row = sheet.createRow((short)0);
&&& // 创建一个单元格并为其设置时间值,第一个单元格是原始时间值Double类型,没有格式
&&& HSSFCell cell = row.createCell((short)0);
&&& cell.setCellValue(new Date());
&&& // 现在将第二个单元格格式化为日期+时间.&
// 通过workbook创建一个新的单元格风格(cell style)是很重要的&&&
// 否则你在修改这个单元格的风格的时候可能会影响到其他单元格的风格。
HSSFCellStyle cellStyle = wb.createCellStyle();
&&& cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
&&& cell = row.createCell((short)1);
&&& cell.setCellValue(new Date());
&&& cell.setCellStyle(cellStyle);
&&& // 写出文件
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
&&&&&&&&&&&&&&&&&&&
操作不同类型的单元格
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&& HSSFRow row = sheet.createRow((short)2);
&&& row.createCell((short) 0).setCellValue(1.1);
&&& row.createCell((short) 1).setCellValue(new Date());
&&& row.createCell((short) 2).setCellValue("a string");
&&& row.createCell((short) 3).setCellValue(true);
&&& row.createCell((short) 4).setCellType(HSSFCell.CELL_TYPE_ERROR);
&&& // 写出文件
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
fileOut.close();
//一点废话:由此可见,在上面的关于日期的格式化我们不一定要通过poi来做,我们可以将数据都格式化好了以后,转换成String类型来写入Excel,这样从一定程度上统一写入单元格的代码,实现代码复用。
&&&&&&&&&&&&&&&&&&&
示范不同的队列选项(也就是单元格内容居左、居右等等)
&&& public static void main(String[] args)
&&&&&&&&&&& throws IOException
&&&&&&& HSSFWorkbook wb = new HSSFWorkbook();
&&&&&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&&&&&& HSSFRow row = sheet.createRow((short) 2);
&&&&&&& createCell(wb, row, (short) 0, HSSFCellStyle.ALIGN_CENTER);
&&&&&&& createCell(wb, row, (short) 1, HSSFCellStyle.ALIGN_CENTER_SELECTION);
&&&&&&& createCell(wb, row, (short) 2, HSSFCellStyle.ALIGN_FILL);
&&&&&&& createCell(wb, row, (short) 3, HSSFCellStyle.ALIGN_GENERAL);
&&&&&&& createCell(wb, row, (short) 4, HSSFCellStyle.ALIGN_JUSTIFY);
&&&&&&& createCell(wb, row, (short) 5, HSSFCellStyle.ALIGN_LEFT);
&&&&&&& createCell(wb, row, (short) 6, HSSFCellStyle.ALIGN_RIGHT);
&&&&&&& // 写入文件
&&&&&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&&&&&& wb.write(fileOut);
&&&&&&& fileOut.close();
&&&& * 创建一个单元格使其按照某种方式排列
&&&& * @param wb&&&&&&& the workbook
&&&& * @param row&&&&&& 生成单元格的行
&&&& * @param column&&& 在这个行中单元格所处的列数
&&&& * @param align&&&& 单元格内容的排列方式.
&&& private static void createCell(HSSFWorkbook wb, HSSFRow row, short column, short align)
&&&&&&& HSSFCell cell = row.createCell(column);
&&&&&&& cell.setCellValue("Align It");
&&&&&&& HSSFCellStyle cellStyle = wb.createCellStyle();
&&&&& &&cellStyle.setAlignment(align);
&&&&&&& cell.setCellStyle(cellStyle);
&&&&&&&&&&&&&&&&&&&
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&& // 创建一行(row)并为其设置单元格,行从0开始.
&&& HSSFRow row = sheet.createRow((short) 1);
&&& // 创建单元格并为其设置数值.
&&& HSSFCell cell = row.createCell((short) 1);
&&& cell.setCellValue(4);
&&& // 在单元格周围设置边框.
&&& HSSFCellStyle style = wb.createCellStyle();
&&& style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
&&& style.setBottomBorderColor(HSSFColor.BLACK.index);
&&& style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
&&& style.setLeftBorderColor(HSSFColor.GREEN.index);
&&& style.setBorderRight(HSSFCellStyle.BORDER_THIN);
&&& style.setRightBorderColor(HSSFColor.BLUE.index);
&&& style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED);
&&& style.setTopBorderColor(HSSFColor.BLACK.index);
&&& cell.setCellStyle(style);
&&& // 写入文件
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
&&&&&&&&&&&&&&&&&&&
迭代遍历行及其单元格
有时,我们喜欢遍历一个Sheet的所有行,或者一行的所有单元格,这时可以通过循环来遍历还是比较简单的。
幸运的是,我们这有个非常简单的方法。HSSFRow定义了一个CellIterator的内部类来迭代遍历所有的单元格(通过调用row.celIterator获取),而且HSSFSheet也提供了一个rowIterator方法给出了遍历所有行的迭代器。
(Unfortunately, due to the broken and backwards-incompatible way that Java 5 foreach loops were implemented, it isn't possible to use them on a codebase that supports Java 1.4, as POI does)
&&&&&&&& HSSFSheet sheet = wb.getSheetAt(0);
&&&&&&&& for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {
&&&&&&&&&&&&&&&& HSSFRow row = (HSSFRow)rit.next();
&&&&&&&&&&&&&&&& for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {
&&&&&&&&&&&&&&&&&&&&&&&&& HSSFCell cell = (HSSFCell)cit.next();
&&&&&&&&&&&&&&&&&&&&&&&&& // Do something here
&&&&&&&&&&&&&&&& }
&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&& HSSFSheet sheet = wb.getSheetAt(0);
&&&&&&&& for (Iterator&HSSFRow& rit = (Iterator&HSSFRow&)sheet.rowIterator(); rit.hasNext(); ) {
&&&&&&&&&&&&&&&& HSSFRow row = rit.next();
&&&&&&&&&&&&&&&& for (Iterator&HSSFCell& cit = (Iterator&HSSFCell&)row.cellIterator(); cit.hasNext(); ) {
&&&&&&&&&&&&&&&&&&&&&&&&& HSSFCell cell = cit.next();
&&&&&&&&&&&&&&&&&&&&&&&&& // Do something here
&&&&&&&&&&&&&&&& }
&&&&&&&& }
&&&&&&&&&&&&&&&
使用java5的特有的前端循环(foreach loops)遍历行和单元格- OOXML Branch Only
有时候我们需要遍历一个Sheet的所有行或者一行的所有列,这时如果使用java5或者更高版本的话,可以采用这种新的循环方式的处理。
幸运的是,这也非常简单。HSSFSheet和HSSFRow都实现了java.lang.Iterator接口来允许新的循环方式的运行。HSSFRow允许通过CellIterator内部类来处理单元格的循环,HSSFSheet给出了rowIterator方法来遍历所有的行。
&&&&&&&& HSSFSheet sheet = wb.getSheetAt(0);
&&&&&&&& for (HSSFRow row : sheet.rowIterator()) {
&&&&&&&&&&&&&&&& for (HSSFCell cell : row.cellIterator()) {
&&&&&&&&&&&&&&&&&&&&&&&&& // Do something here
&&&&&&&&&&&&&&&& }
&&&&&&&& }
&&&&&&&&&&&&&&&
对于大多数的内容提取需求,标准ExcelExtractor类应该能满足您所有的需求。
&&&&&&&& InputStream inp = new FileInputStream("workbook.xls");
&&&&&&&& HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
&&&&&&&& ExcelExtractor extractor = new ExcelExtractor(wb);
&&&&&&&& extractor.setFormulasNotResults(true);
&&&&&&&& extractor.setIncludeSheetNames(false);
&&&&&&&& String text = extractor.getText();
填充和颜色
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&& // 创建一行,并为其设置单元格,行从0开始 .
&&& HSSFRow row = sheet.createRow((short) 1);
&&& // Aqua 背景色
&&& HSSFCellStyle style = wb.createCellStyle();
&&& style.setFillBackgroundColor(HSSFColor.AQUA.index);
&&& style.setFillPattern(HSSFCellStyle.BIG_SPOTS);
&&& HSSFCell cell = row.createCell((short) 1);
&&& cell.setCellValue("X");
&&& cell.setCellStyle(style);
&&& // Orange "前景色".
&&& style = wb.createCellStyle();
&&& style.setFillForegroundColor(HSSFColor.ORANGE.index);
&&& style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
&&& cell = row.createCell((short) 2);
&&& cell.setCellValue("X");
&&& cell.setCellStyle(style);
&&& // 写入文件
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
&&&&&&&&&&&&&&&&&&&
合并单元格
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&& HSSFRow row = sheet.createRow((short) 1);
&&& HSSFCell cell = row.createCell((short) 1);
&&& cell.setCellValue("This is a test of merging");
&&& sheet.addMergedRegion(new Region(1,(short)1,1,(short)2));
&&& // 写入文件
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
一点废话:关于new Region(1,(short)1,1,(short)2):四个参数分别为起始行、起始列、终止行、终止列,如果要在合并的单元格中写入数据,首先在起始行列的单元格中写入内容,之后从起始行列处开始拉伸合并单元格到终止行列。
&&& HSSFWorkbook wb = new HSSFWorkbook();
&&& HSSFSheet sheet = wb.createSheet("new sheet");
&&& //创建行
&&& HSSFRow row = sheet.createRow((short) 1);
&&& // 创建一个系的呢字体并设置其属性.
&&& HSSFFont font = wb.createFont();
&&& font.setFontHeightInPoints((short)24);
&&& font.setFontName("Courier New");
&&& font.setItalic(true);
&&& font.setStrikeout(true);
&&& // 字体设置给一个HSSFCellStyle对象.
&&& HSSFCellStyle style = wb.createCellStyle();
&&& style.setFont(font);
&&& // 创建一个单元格并为其设置值
&&& HSSFCell cell = row.createCell((short) 1);
&&& cell.setCellValue("This is a test of fonts");
&&& cell.setCellStyle(style);
&&& //写入文件
&&& FileOutputStream fileOut = new FileOutputStream("c://workbook.xls");
&&& wb.write(fileOut);
&&& fileOut.close();
注意:一个workbook中字体数目被限制在32767个以内。你应该在程序中重用字体来代替为每个单元格创建新字体
下面写法是错误的:
&&&&&&& for (int i = 0; i & 10000; i++) {
&&&&&&&&&&& HSSFRow row = sheet.createRow(i);
&&&&&&&&&&& HSSFCell cell = row.createCell((short) 0);
&&&&&&&&&&& HSSFCellStyle style = workbook.createCellStyle();
&&&&&&&&&&& HSSFFont font = workbook.createFont();
&&&&&&&&&&& font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
&&&&&&&&&&& style.setFont(font);
&&&&&&&&&&& cell.setCellStyle(style);
&&&&&&& HSSFCellStyle style = workbook.createCellStyle();
&&&&&&& HSSFFont font = workbook.createFont();
&&&&&&& font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
&&&&&&& style.setFont(font);
&&&&&&& for (int i = 0; i & 10000; i++) {
&&&&&&&&&&& HSSFRow row = sheet.createRow(i);
&&&&&&&&&&& HSSFCell cell = row.createCell((short) 0);
&&&&&&&&&&& cell.setCellStyle(style);
一点废话:将创建字体的代码移出循环体。
如何读取超链接
&&& HSSFSheet sheet = workbook.getSheetAt(0);
&&& HSSFCell cell = sheet.getRow(0).getCell((short)0);
&& &HSSFHyperlink link = cell.getHyperlink();
&&& if(link != null){
&&&&&&& System.out.println(link.getAddress());
如何设置超链接
&&&&HSSFWorkbook wb = new HSSFWorkbook();
&&& //超链接的单元格风格
&&& //超链接默认的是蓝色底边框
&&& HSSFCellStyle hlink_style = wb.createCellStyle();
&&& HSSFFont hlink_font = wb.createFont();
&&& hlink_font.setUnderline(HSSFFont.U_SINGLE);
&&& hlink_font.setColor(HSSFColor.BLUE.index);
&&& hlink_style.setFont(hlink_font);
&&& HSSFSheet sheet = wb.createSheet("Hyperlinks");
&&& cell = sheet.createRow(0).createCell((short)0);
&&& cell.setCellValue("URL Link");
&&& HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
&&& link.setAddress("http://poi.apache.org/");
&&& cell.setHyperlink(link);
&&& cell.setCellStyle(hlink_style);
&&& //链接到当前路径的一个文件
&&& cell = sheet.createRow(1).createCell((short)0);
&&& cell.setCellValue("File Link");
&&& link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE);
&&& link.setAddress("link1.xls");
&&& cell.setHyperlink(link);
&&& cell.setCellStyle(hlink_style);
&&& //链接到e-mail
&&& cell = sheet.createRow(2).createCell((short)0);
&&& cell.setCellValue("Email Link");
&&& link = new HSSFHyperlink(HSSFHyperlink.LINK_EMAIL);
&&& //note, if subject contains white spaces, make sure they are url-encoded
&&& link.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
&&& cell.setHyperlink(link);
&&& cell.setCellStyle(hlink_style);
&&& //链接到 workbook的某个地方
&&& //创建一个目标Sheet和单元格
&&& HSSFSheet sheet2 = wb.createSheet("Target Sheet");
&&& sheet2.createRow(0).createCell((short)0).setCellValue("Target Cell");
&&& cell = sheet.createRow(3).createCell((short)0);
&&& cell.setCellValue("Worksheet Link");
& &&link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
&&& link.setAddress("'Target Sheet'!A1");
&&& cell.setHyperlink(link);
&&& cell.setCellStyle(hlink_style);
&&& FileOutputStream out = new FileOutputStream("c://hssf-links.xls");
&&& wb.write(out);
&&& out.close();
&&&&一点废话:link.setAddress("'Target Sheet'!A1");这一句中,Target Sheet是Sheet的名字,A是Excel中的列号,1是Excel中的行号,A1表示第一行第一列。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:76684次
积分:1237
积分:1237
排名:第16658名
原创:40篇
评论:29条
(1)(1)(2)(7)(4)(1)(1)(6)(3)(1)(9)(5)(7)使用Apache开源POI和jXLS两种API生成报表 - 下载频道 - CSDN.NET
&&&&使用Apache开源POI和jXLS两种API生成报表
&使用Apache开源POI和jXLS两种API生成报表
使用Apache开源POI和jXLS两种API生成报表, 详细介绍两种导出excel的技术
若举报审核通过,可奖励20下载分
被举报人:
billandbiao08
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
评价资源返积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
使用Apache开源POI和jXLS两种API生成报表
所需积分:2
剩余积分:
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
VIP服务公告:

我要回帖

更多关于 指点论坛 的文章

 

随机推荐