使用JExcel导出excel文件

package org.aaa.portal.tools;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class ExcelUtils {
    public static final String COLUMN_KEY="key";    //列的键,对应JSONObject的key
    public static final String COLUMN_TEXT="text";    //列头名称
    /**
     * 把JSONArray存储为Excel
     * @param fileName    完整文件路径名称
     * @param sheetName    sheet 名称
     * @param ja JSONArray
     * @param columns    
     *     List<Map<String, String>> 按照list Item的顺序生成列
     *    Map格式:        
             Map<String,String> column1 =new HashMap<String,String>();
            column1.put(ExcelUtils.COLUMN_KEY, "sUserName");
            column1.put(ExcelUtils.COLUMN_TEXT, "用户名");
            columns.add(column1);
     */
    public static boolean exportFromJSONArray(String fileName, String sheetName,JSONArray ja,
            List<Map<String, String>> columns) {
        boolean isSuccess=true;
        WritableWorkbook book;
        try {
            //确保保存文件目录存在
            String filePathStr=fileName.substring(0,fileName.lastIndexOf(File.separatorChar));
            File filePath=new File(filePathStr);
            if(!filePath.exists()){
                filePath.mkdirs();
            }
            //确保保存文件存在
            File file=new File(fileName);
            if(!file.exists()){
                file.createNewFile();
            }
            // 在指定地址创建EXCEL表
            book = Workbook.createWorkbook(file);
            // 设置第一个工作薄的名字
            WritableSheet sheet = book.createSheet(sheetName, 0);

            // 设置列头
            for (int i = 0; i < columns.size(); i++) {
                // 设置列宽
                sheet.setColumnView(i, 20);
                // 设置列头样式
                // 分别设置表头,表元的格式
                WritableFont fontb = new WritableFont(WritableFont.ARIAL, 8,
                        WritableFont.BOLD, false); // 粗体
                WritableCellFormat formatb = new WritableCellFormat(fontb);
                formatb.setAlignment(Alignment.CENTRE); // 水平居中
                formatb.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直居中
                formatb.setBorder(Border.ALL, BorderLineStyle.THIN); // 边框
                // 填充列名
                Label labelb = new Label(i, 0, columns.get(i).get("text"),
                        formatb);
                sheet.addCell(labelb);
            }


            //设置数据单元格格式
            WritableFont fontc = new WritableFont(WritableFont.ARIAL, 8,
                    WritableFont.NO_BOLD, false);
            WritableCellFormat formatc = new WritableCellFormat(fontc);
            formatc.setAlignment(Alignment.CENTRE);
            formatc.setVerticalAlignment(VerticalAlignment.CENTRE);
            formatc.setBorder(Border.ALL, BorderLineStyle.THIN);
            // 填充数据
            for (int i = 0; i < ja.size(); i++) {
                JSONObject jo = ja.getJSONObject(i);
                // 按照预设的列顺序填充
                for (int j = 0; j < columns.size(); j++) {
                    String key = columns.get(j).get("key");
                    Object text = jo.get(key);
                    // 如果是数字,则按照数字的格式填充
                    if (text != null && text.toString().matches("\\d+")) {
                        Number numberc = new Number(j, i+1, Long.parseLong(text.toString()),
                                formatc);
                        sheet.addCell(numberc);
                    } else {
                        //其余全按文字处理
                        Label labelb = new Label(j, i+1, text.toString(), formatc);
                        sheet.addCell(labelb);
                    }
                }
            }

            
            book.write();
            book.close();
        } catch (IOException e) {
            e.printStackTrace();
            isSuccess=false;
        } catch (RowsExceededException e) {
            e.printStackTrace();
            isSuccess=false;
        } catch (WriteException e) {
            e.printStackTrace();
            isSuccess=false;
        }
        return isSuccess;
    }
}

 

更多相关文章
一周排行
  • 


    		    2009年5月軟件設計師考前預測試題及考點解析
    更多试题及要点解析请参见<软件设计师考试考前冲刺预测试卷及考点解析>.< ...
  • From codeproject: http://www.codeproject.com/Articles/20910/Generic-Gap-Buffer
  • DOM(Document Object Model),文件对象模型.HTML(HyperText Markup Language),超文本标记语言.HTML的超类:Node->Document:Node-> ...
  • ABC: Always Be Coding (原地址:https:[email protected]/abc-always-be-coding-d5f8051afce2)   Be honest. A ...
  • 


    		    AEAI CRM客戶關系管理V1.0.3版發版說明
    AEAI CRM客户管理系统包括一些核心的客户关系管理业务功能,如:潜在客户.线索管理.客 ...
  • jquery设置元素的readonly和disabled Jquery的api中提供了对元素应用disabled和readonly属性的方法,在这里记录下.如下: $( '#line2Tr' ).css(" ...
  • 投资中有一个常规的特点,即投资标的的预期报酬越高,投资人所能忍受的波动风险越高:反之,预期报酬越低,波动风险也越低.所以理性的投资人选择投资标的与投资组合的主要目的为:在固定所能承受的风险下,追求最大的报酬:或在固定
  • 爲大家分享一個 Ajax Loading —— spin.js
    我们在做Ajax 异步请求的时候,一般都会利用一个动态的 Gif 小图片来制作一个Ajax
  • 1.while语句结构 while 条件语句 do action done; 例如: #!/bin/bash i=10; while [[ $i -gt 5 ]];do echo $i; ((i--)); done;
  • http://www.cnblogs.com/Terrylee/archive/2007/12/09/the-ultimate-jquery-plugin-list.html