`
haofenglemon
  • 浏览: 245669 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生成excel表格

 
阅读更多
导出Excel表格的类
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import com.shxy.exception.FileOperationException;
import com.shxy.util.Verify;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
* 生成excel表格
* @author
*
*/
public class ExcelExport {
/**
  * 构造器
  *
  */
public ExcelExport() {

}
/**
  * 生成具有一定格式excel
  * @param sheetName sheet名称,默认为sheet1
  * @param nf 数字类型的格式 如:jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");默认无格式
  * @param content 二维数组,要生成excel的数据来源
  * @param 合并项 每一项的数据格式为0,1,0,2 即:把(0,1)和(0,2)合并--->第1列的第一、二个元素合并
  * @param os excel输出流
  * @param row 需要水平居中的行,默认居左。以逗号分隔的字符串
  * @param col 需要水平居中的列,默认居左。以逗号分隔的字符串
  * @throws FileOperationException
  */
public void export(String sheetName, NumberFormat nf,  String[][] content, String[] mergeInfo, OutputStream os, String row, String col)
   throws FileOperationException {
  if (Verify.isNullObject(content, os)
    || Verify.isNull2DArray(content)) {
   return;
  }
  //默认名称
  if(Verify.isNullObject(sheetName)){
   sheetName="sheet1";
  }
  Set<Integer>rows=this.getInfo(row);
  Set<Integer>cols=this.getInfo(col);
  WritableWorkbook workbook = null;
  try {
   workbook = Workbook.createWorkbook(os);
   WritableSheet sheet = workbook.createSheet(sheetName, 0);
   for (int i = 0; i < content.length; i++) {
    for (int j = 0; j < content[i].length; j++) {
     if(content[i][j]==null){
      content[i][j]="";
     }
     if (isNumber(content[i][j])&&!rows.contains(i)&&!cols.contains(j)) {//处理数字
      Number number=null;
      if(Verify.isNullObject(nf)){//数字无格式
       number = new Number(j, i, Double
         .valueOf(content[i][j]));
      }else{//如果有格式,按格式生成
       jxl.write.WritableCellFormat wcfn = new jxl.write.WritableCellFormat(nf);
       number = new Number(j, i, Double
         .valueOf(content[i][j]),wcfn);
      }
      sheet.addCell(number);
     } else {//处理非数字
      WritableCellFormat format=new WritableCellFormat();
      if(rows.contains(i)||cols.contains(j)){
       format.setAlignment(jxl.format.Alignment.CENTRE);
      }else{
       format.setAlignment(jxl.format.Alignment.LEFT);
      }
      format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
      Label label = new Label(j, i, content[i][j],format);
      sheet.addCell(label);
     }
    }
   }
   this.merge(sheet, mergeInfo);
   workbook.write();
  } catch (Exception e) {
   e.printStackTrace();
   throw new FileOperationException(e);
  }finally {
   try {
    workbook.close();
   } catch (WriteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
}

/**
  * 生成固定格式的excel,表格都为文本,水平居左,垂直居中
  * @param sheetName sheet名称,默认为sheet1
  * @param content 二维数组,要生成excel的数据来源
  * @param os excel输出流
  * @throws FileOperationException
  */
public void exportFormatExcel(String[][] content, String sheetName, OutputStream os)
throws FileOperationException {
  if (Verify.isNullObject(content, os)
    || Verify.isNull2DArray(content)) {
   return;
  }
//  默认名称
  if(Verify.isNullObject(sheetName)){
   sheetName="sheet1";
  }
  WritableWorkbook workbook = null;
  try {
   workbook = Workbook.createWorkbook(os);
   WritableSheet sheet = workbook.createSheet(sheetName, 0);
  
   for (int i = 0; i < content.length; i++) {
    for (int j = 0; j < content[i].length; j++) {
     if(content[i][j]==null){
      content[i][j]="";
     }
     WritableCellFormat format=new WritableCellFormat();
     format.setAlignment(jxl.format.Alignment.LEFT);
     format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
     Label label = new Label(j, i, content[i][j],format);
     sheet.addCell(label);
    }
   }
  
  
   workbook.write();
  } catch (Exception e) {
   e.printStackTrace();
   throw new FileOperationException(e);
  }finally {
   try {
    workbook.close();
   } catch (WriteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
}

/**
  * 生成固定格式的excel,表格都为文本,水平居左,垂直居中
  * @param sheetName sheet名称,默认为sheet1
  * @param content Map,要生成excel的数据来源
  * @param os excel输出流
  * @throws FileOperationException
  */
public void exportFormatExcel(Map<String, String[][]> content,String[] salary_name_array, String sheetName, OutputStream os)
throws FileOperationException {
  if (Verify.isNullObject(content, os)
    || content.size()==0) {
   return;
  }
//  默认名称
  if(Verify.isNullObject(sheetName)){
   sheetName="sheet1";
  }
  WritableWorkbook workbook = null;
  try {
   workbook = Workbook.createWorkbook(os);
   WritableSheet sheet = workbook.createSheet(sheetName, 0);
   int index = 0;
   for (int k = 0; k < salary_name_array.length; k++) {
    String[][] value = (String[][])content.get(salary_name_array[k]);
    if(value!=null&&value.length>0){
         if(index!=0){
         index++;
         }
      WritableCellFormat format1=new WritableCellFormat();
      format1.setAlignment(jxl.format.Alignment.LEFT);
      format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
      Label label1 = new Label(0, index, salary_name_array[k] ,format1);
      sheet.addCell(label1);
     for (int i = 0; i < value.length; i++) {
      index ++ ;
      for (int j = 0; j < value[i].length; j++) {
       if(value[i][j]==null){
        value[i][j]="";
       }
       WritableCellFormat format=new WritableCellFormat();
       format.setAlignment(jxl.format.Alignment.LEFT);
       format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
      
       Label label = new Label(j, index, value[i][j],format);
       sheet.addCell(label);
      }
     }
    }
   }
   workbook.write();
  } catch (Exception e) {
   e.printStackTrace();
   throw new FileOperationException(e);
  }finally {
   try {
    workbook.close();
   } catch (WriteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
}


/**
  * 合并表格
  * @param sheet 工作表
  * @param mergeInfo 要合并的表格的信息
  * @throws RowsExceededException
  * @throws NumberFormatException
  * @throws WriteException
  */
private void merge(WritableSheet sheet,String[]mergeInfo) throws RowsExceededException, NumberFormatException, WriteException{
  if(Verify.isNullObject(sheet)||Verify.isNull1DArray(mergeInfo)){
   return;
  }else if(!this.isMergeInfo(mergeInfo)){
   return;
  }else{
   for(String str:mergeInfo){
    String[]temp=str.split(",");
    sheet.mergeCells(Integer.parseInt(temp[1]), Integer.parseInt(temp[0]), Integer.parseInt(temp[3]), Integer.parseInt(temp[2]));
   }
  }
}
/**
  * 处理要居中的行或列的数据
  * @param indexes 行标或列标
  * @return 行坐标或列坐标组成的集合
  */
private Set<Integer> getInfo(String indexes){
  Set<Integer>set=new HashSet<Integer>();
  if(Verify.isNullObject(indexes)){
   return set;
  }
  String[]temp=indexes.split(",",0);
  for(String str:temp){
   if(isNumeric(str)){
    set.add(Integer.parseInt(str));
   }
  }
  return set;
}
/**
  * 判断字符串是否由纯数字组成
  * @param str 源字符串
  * @return true是,false否
  */
private boolean isNumeric(String str) {
  if (Verify.isNullObject(str)){
   return false;
  }
  Pattern pattern = Pattern.compile("[0-9]*");
  return pattern.matcher(str).matches();
}
/**
  * 判断字符串是否是数字
  * @param str 源字符串
  * @return true是,false否
  */
private boolean isNumber(String number) {
  //判断参数
  if (Verify.isNullObject(number)){
   return false;
  }
  //查看是否有小数点
  int index = number.indexOf(".");
  if (index < 0) {
   return isNumeric(number);
  } else {
   //如果有多个".",则不是数字
   if(number.indexOf(".")!=number.lastIndexOf(".")){
    return false;
   }
   String num1 = number.substring(0, index);
   String num2 = number.substring(index + 1);
   return isNumeric(num1) && isNumeric(num2);
  }
}
/**
  * 判断合并项内容是否合法
  * @param mergeInfo 合并项 每一项的数据格式为0,1,0,2即把(0,1)和(0,2)合并
  * @return true合法,false非法
  */
private boolean isMergeInfo(String[]mergeInfo){
  if(Verify.isNull1DArray(mergeInfo)){
   return false;
  }else{
   for(String str:mergeInfo){
    String[]temp=str.split(",");
    if(Verify.isNull1DArray(temp)||temp.length!=4){
     return false;
    }else{
     for(String s:temp){
      if(!isNumeric(s)){
       return false;
      }
     }
    }
   }
  }
  return true;
}
public static void main(String[] args) {
  ExcelExport ee=new ExcelExport();
  String[][]content=new String[][]{{"测试","第一列",null,"第三列"},{"第一行","aa","2.00","22"},{"第二行","bb","3.01","3"},{"第三行","cc","4.00","4"}};
  try {
   OutputStream os=new FileOutputStream("D://test//test.xls");
//   ee.export(null,null, content,null, os);
   ee.export(null,null, content,new String[]{"0,1,0,2","1,0,3,0"}, os,"0,1","0");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
}
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    VB FlexCell控件生成Excel表格效果.rar

    VB FlexCell控件生成Excel表格效果,FlexCell表格制作系统,自学VB一年有余,深知编程之苦之乐,有时为某一功能的实现要花费许多时间,概因周围无可交流人员。为使后学者在某些方面少走弯路,特制作此软件,并公布源...

    poi生成excel表格

    在这个场景中,我们关注的是如何使用POI库在Java中生成Excel表格。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **Apache POI 简介** Apache POI 是Java平台上的一个库,它允许开发者读写Microsoft ...

    C# 生成Excel表格(非office)

    在IT行业中,生成Excel表格是常见的数据导出需求,尤其在Web应用或数据分析场景下。在标题"**C# 生成Excel表格(非office)**"中,提及的关键点是使用C#编程语言来创建Excel文件,而不依赖于Microsoft Office的安装...

    PHPExcel生成excel表格

    它提供了丰富的API,允许开发者在Web应用中方便地生成Excel表格,处理数据导入和导出功能,尤其适用于需要大量处理表格数据的场景。下面将详细介绍PHPExcel的使用方法、功能以及与之相关的知识点。 一、安装和配置 ...

    jquery.table2excel.js 一键生成Excel表格

    jquery.table2excel.js 可一键生成Excel表格,需要jQuery.js支持 详细使用方法可见我的博客 https://blog.csdn.net/weixin_42571089/article/details/108799543

    Java生成excel表格设置公式并填充数据

    Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

    如何利用VC++自动生成Excel表格

    ### 如何利用VC++自动生成Excel表格 #### 一、引言 在现代工程设计与数据分析领域中,Excel因其强大的数据处理能力而受到广泛青睐。然而,在面对大量数据时手动输入不仅耗时且容易出错。为了提高工作效率及准确性...

    公司固定资产统计电脑配置信息生成EXCEL表格

    EXCEL表格生成默认在C盘里,可以编辑更改为其他盘里,或者内网共享服务器里都可以 EXCEL表格生成:姓名、计算机名、OS、CPU、内存 、硬盘、IP地址、MAC地址、显卡、主板、显示器 IT IT OS: Microsoft Windows 7 ...

    VC操作excel生成excel表格的步骤

    在VC++环境中,生成Excel表格通常涉及到Microsoft Office的自动化接口,这是一个允许外部程序控制Office应用程序如Excel的方法。本文将详细讲解如何使用VC++通过Microsoft Office的COM接口来创建和操作Excel表格。 ...

    c# dataGridView数据高效快速生成Excel表格

    以下是如何高效快速地从dataGridView生成Excel表格的详细步骤: 1. **创建Excel应用程序对象**:首先,我们需要创建一个Excel应用程序实例,这可以通过使用`Microsoft.Office.Interop.Excel`命名空间中的`...

    php生成excel表格

    标题"php生成excel表格"指的是利用PHP编程语言来创建和处理Excel文件的过程。这通常涉及到以下几个关键知识点: 1. **PHPExcel库**:PHPExcel是PHP中一个功能强大的库,能够读取和写入多种电子表格格式,包括...

    ASP.NET(c#) 动态生成Excel表格

    用C#编程实现绘制Excel表格并填充数据和公式,生成表格或报表。 不是服务器端自动化。 使用的是PageOffice,除了提供Word/Excel动态数据填充,格式控制,Word/Excel用户输入提交,Word/Excel/PowerPoint/WPS等...

    java生成excel表格

    在Java编程中,生成Excel表格是一项常见的任务,特别是在数据处理、报表生成或导出功能上。本示例将介绍如何使用Java来创建和操作Excel文件,主要依赖于一个名为JExcelApi的库,对应的jar文件为`jxl-2.6.12.jar`。 ...

    一键生成excel,封装生成excel表格的工具类

    在IT行业中,生成Excel表格是一项常见的任务,尤其在数据分析、报表制作或数据交换时。针对这一需求,开发者经常需要编写自定义的代码来处理。本文将深入解析标题为"一键生成excel,封装生成excel表格的工具类"的...

    C++利用XML代码快速生成EXCEL表格

    本示例中,我们探讨了如何利用C++结合XML技术来快速生成Excel表格(.XLS格式)。XML,全称为Extensible Markup Language,是一种用于存储和传输数据的标准化格式,其结构清晰,易于解析,使得它成为数据交换的理想...

    jxl方式生成excel表格.zip

    在IT行业中,生成Excel表格是常见的数据处理任务,特别是在数据导入导出、报表生成和数据分析等领域。本资源提供了一个利用jxl库实现Java程序中生成Excel表格的解决方案。jxl是一个广泛使用的开源Java库,它允许...

    vb生成EXCEL表格的样例

    在VB(Visual Basic)编程环境中,生成Excel表格是一项常见的任务,尤其在数据处理、报告生成或数据分析时。这个“vb生成EXCEL表格的样例”很可能是为了展示如何使用VB的自动化功能与Microsoft Excel进行交互,创建...

    java生成excel表格需要的3个jar包

    在Java编程环境中,生成Excel表格是一项常见的任务,特别是在数据处理和报表生成的场景下。为了实现这个功能,开发者通常会依赖一些外部库,其中Apache POI是一个非常流行的选择。Apache POI是一个开源项目,它提供...

    java代码生成excel表并下载

    在Java编程领域,生成Excel表格是一项常见的需求,尤其在数据导出、报表生成或数据分析时。本主题聚焦于“java代码生成excel表并下载”,这是一个关键的后端功能,允许用户自定义表格内容并选择下载路径。下面我们将...

    生成Excel表格代码

    用于将从数据库输出的数据输出到Excel文件的代码,生成Excel表格文件的类

Global site tag (gtag.js) - Google Analytics