我使用jxl向一个excel的其中一个sheet中写入数据,然后下载到本地,打开后,发现其他sheet中的矩形框都丢失了。
请问该处理解决?
谢谢。

解决方案 »

  1.   

     package com.along;import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;public class ExportExcel {
    public static void main(String args[]) {
    ExportExcel excel = new ExportExcel();
    // excel的第一行标题
    String[] title = { "编号", "姓名", "班级", "老师", "生日", "籍贯" };
    List list = new ArrayList();
    // 要导出的数据
    list.add(new Object[] { "s1", "s2", "s3", "s4", "s5", "s6" });
    list.add(new Object[] { 1, 2, 3, 4, 5, 6 });
    list.add(new Object[] { 0.02, 2, 3, 4, 5, 6 });
    list.add(new Object[] { new Date(), 2, 3, 4, 5, 6 });
    list.add(new Object[] { "05001", "李四", "一班", "张老师", "1983-11-07",
    "北京" });
    excel.export("D:\\exportExcel.xls", list, title);
    } // 导出excel的方法,filepath为要导出的文件的完整地址,list为要导出的数据,title为要导出的数据的标题
    public boolean export(String filepath, List list, String[] title) { OutputStream os = null;
    try {
    os = new FileOutputStream(filepath);
    HashMap map = null;
    // 创建工作薄
    WritableWorkbook workbook = Workbook.createWorkbook(os);
    // 创建第一个工作表,name:工作表名称
    WritableSheet worksheet = workbook.createSheet("record", 0);
    // 开始写入第一行,即标题栏
    for (int i = 0; i < title.length; i++) {
    //用于写入文本内容到工作表中去
    Label label = null;
    //参数依次代表列数、行数、内容
    label = new Label(i, 0, title[i]);
    worksheet.addCell(label);// 写入单元格
    }
    // 开始写入内容
    for (int i = 0; i < list.size(); i++) {
    // 获取一条记录
    Object[] row_data = (Object[]) list.get(i);
    // 数据是文本时是用label写入,于写入文本内容到工作表中去
    for (int j = 0; j < row_data.length; j++) {
    Object item_data = row_data[j];
    writeCell(worksheet, item_data, j, i + 1);
    }
    }
    workbook.write();
    workbook.close(); } catch (Exception e) {
    e.printStackTrace();
    return false ;
    } finally {
    try {
    if (os != null)
    os.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return true;
    }
    //写每一个单元格,处理不同的数据格式。
    private void writeCell(WritableSheet sheet, Object cellValue, int column,
    int row) throws RowsExceededException, WriteException {
    if (cellValue instanceof String) {
    jxl.write.Label label;
    label = new jxl.write.Label(column, row, (String) cellValue); 
    sheet.addCell(label);
    } else if (cellValue instanceof Number) {// 如果是数字 if (cellValue instanceof Integer) {
    // 添加带有formatting的Number对象
    jxl.write.Number labelNF = new jxl.write.Number(column, row,
    (Integer) cellValue);
    sheet.addCell(labelNF);
    } else if (cellValue instanceof Short) {
    jxl.write.Number labelNF = new jxl.write.Number(column, row,
    (Short) cellValue);
    sheet.addCell(labelNF);
    } else if (cellValue instanceof Double) {
    // 添加带有formatting的Number对象
    jxl.write.NumberFormat nf = new jxl.write.NumberFormat("0.00");
    ;
    jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(
    nf);
    jxl.write.Number labelNF = new jxl.write.Number(column, row,
    (Double) cellValue, wcfN);
    sheet.addCell(labelNF);
    } else if (cellValue instanceof Long) {
    jxl.write.Number labelNF = new jxl.write.Number(column, row,
    (Long) cellValue);
    sheet.addCell(labelNF);
    }
    } else if (cellValue instanceof Date) {
    // 添加带有formatting的DateFormat对象
    jxl.write.DateFormat df = new jxl.write.DateFormat(
    "yyyy-MM-dd hh:mm:ss");
    jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(
    df);
    jxl.write.DateTime labelDTF = new jxl.write.DateTime(column, row,
    (Date) cellValue, wcfDF); sheet.addCell(labelDTF); } else if (cellValue instanceof Boolean) {
    jxl.write.Boolean labelB = new jxl.write.Boolean(column, row, false);
    sheet.addCell(labelB);
    }
    }
    }
      

  2.   

    exportexcel.jsp<%@ page language="java" contentType="text/html; charset=gb2312"%>
    <%@page import="java.util.*"%>
    <%
     String filepath = request.getParameter("filepath");
     com.along.ExportExcel excel= new com.along.ExportExcel();
     // excel的第一行标题
     String[] title = { "编号", "姓名", "班级", "老师", "生日", "籍贯" };
     List list = new ArrayList();
     // 要导出的数据
     list.add(new Object[] { "s1", "s2", "s3", "s4", "s5", "s6" });
     list.add(new Object[] { 1, 2, 3, 4, 5, 6 });
     list.add(new Object[] { 0.02, 2, 3, 4, 5, 6 });
     list.add(new Object[] { new Date(), 2, 3, 4, 5, 6 });
     list.add(new Object[] { "05001", "李四", "一班", "张老师", "1983-11-07",
    "北京" });
     boolean flag=excel.export(filepath,list,title);%>
    <script type="text/javascript">
    var flag=<%=flag%>;
    if(flag==true){
    alert("文件生成成功!");
    }else{
    alert("文件生成失败!");
    }</script>
      

  3.   

    downloadfile.jsp<%@ page language="java" contentType="text/html; charset=gb2312"%>
    <%@page import="java.util.*"%>
    <%@page import="java.io.*"%>
    <%@page import="java.net.*"%>
    <%
    //下载时保存的文件名称
    String filename = request.getParameter("filename");
    //要下载的文件的完整路径
    String filepath = request.getParameter("filepath");
    System.out.println("filename=" + filename);
    System.out.println("filepath=" + filepath);
    //response.setHeader("Cache-Control", "max-age=" + no-cache);
    response.reset();
    response.setContentType("application/x-download");//设置为下载application/x-download
    response.setHeader("Content-Disposition", "attachment;filename="
    + filename);
    response.setHeader("Pragma", "No-cache");
    //filename应该是编码后的(utf-8)
    try {
    File file = new File(filepath);
    long filelength = file.length();
    System.out.println("filelength=" + filelength);
    response.setContentLength(new Integer(filelength + "")
    .intValue()); OutputStream outputStream = response.getOutputStream();
    InputStream inputStream = new FileInputStream(filepath); byte[] buffer = new byte[1024 * 1024];
    int i = -1;
    int sum = 0;
    while ((i = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, i);
    sum = sum + i;
    }
    outputStream.flush();
    outputStream.close();
    inputStream.close();
    out.clear();
    out=pageContext.pushBody(); 
    } catch (Exception e) {
    e.printStackTrace();
    } finally { }
    %>
      

  4.   

    模板要填充的格式:format = sheet.getCell(2, 2).getCellFormat();
    填充内容并设置格式:sheet.addCell(new Label(2, 2, "测试",format));
      

  5.   

    边框丢失是因为你没给单元格指定格式!
    noteFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
    可以参考我刚写的一篇博文,上面写的很清楚:http://blog.csdn.net/monitor1394/archive/2010/12/22/6091272.aspx