SpaceCity 发表于 2013-2-3 13:47:22

Excel 写入(jxl)

package com.suning.crawler.util;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
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;
import org.apache.log4j.Logger;

/**
* 将数据导出Excel
*
* @author xxx
*/
public class ExcelWrite
{
    // 日志记录
    private Logger logger = Logger.getLogger(ExcelWrite.class);

    /**
   * 标题行
   */
    private List<String> title;

    /**
   * 构造函数
   *
   * @param titles 标题,用","分隔
   */
    public ExcelWrite(String titles)
    {
      title = new ArrayList<String>();
      // 标题
      if (null != titles)
      {
            for (String titleName : titles.split(","))
            {
                title.add(titleName);

            }
      }
    }

    /**
   * 构造函数
   *
   * @param title 标题
   */
    public ExcelWrite(List<String> title)
    {
      this.title = title;
    }

    /**
   * 将数据信息写入Excel文件
   *
   * @param datas 数据信息
   * @param fileName 文件名称
   * @param filePath 导出文件路径,默认路径是output
   */
    public void WriteData(List<List<String>> datas, String fileName, String filePath)
    {
      // 目录
      File dir = new File(filePath);
      if (!dir.exists())
      {
            dir.mkdirs();
      }

      // 创建文件
      File file = new File(filePath + fileName);
      WriteData(datas, file);
    }

    /**
   * 将数据信息写入Excel文件
   *
   * @param datas 数据信息
   * @param file 文件
   */
    public void WriteData(List<List<String>> datas, File file)
    {
      String sheetName = file.getName();
      sheetName = sheetName.substring(0, sheetName.lastIndexOf("."));

      WritableWorkbook wb = null;
      try
      {
            // 打开文件
            wb = Workbook.createWorkbook(file);
            WritableSheet sheet = wb.createSheet(sheetName, 0);

            // 创建标题
            Label[] titleLabels = getLabel(0, title);
            for (Label label : titleLabels)
            {
                sheet.addCell(label);
            }

            // 把内容写入文件中
            int index = 0;
            if (null != title && !title.isEmpty())
            {
                index = 1;
            }
            for (List<String> record : datas)
            {
                Label[] productLabels = getLabel(index, record);
                for (Label label : productLabels)
                {
                  sheet.addCell(label);
                }
                ++index;
            }
            wb.write();
      }
      catch (RowsExceededException e)
      {
            logger.error("Exception is happened when jxl write rows is exceeded.", e);
      }
      catch (WriteException e)
      {
            logger.error("Write the file exception", e);
      }
      catch (IOException e)
      {
            logger.error("write the file fails", e);
      }
      catch (Exception e)
      {
            logger.error("other exception", e);
      }
      finally
      {
          // 关闭写
            if (null != wb)
            {
                try
                {
                  wb.close();
                }
                catch (WriteException e)
                {
                  logger.error("write the file fails", e);
                }
                catch (IOException e)
                {
                  logger.error("write the file fails", e);
                }
            }
      }

    }

    /**
   * 将商品信息封装成Excel列
   *
   * @param row Excel行
   * @param datas 数据信息
   * @return 数据信息对应的列
   */
    private Label[] getLabel(int row, List<String> datas)
    {
      Label[] label = new Label;
      for (int i = 0; i < datas.size(); i++)
      {
            label = new Label(i, row, datas.get(i));
      }

      return label;
    }

}
页: [1]
查看完整版本: Excel 写入(jxl)