`
hcmfys
  • 浏览: 357525 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java excel 导入

    博客分类:
  • java
 
阅读更多

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;

public class ExcelApp {

 /**
  * @param args
  */
 public static void main(String[] args) throws IOException {

  try {
   HSSFWorkbook wb = new HSSFWorkbook();
   HSSFSheet sheet = wb.createSheet("new   sheet");
   HSSFCellStyle style = wb.createCellStyle(); // 样式对象

   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
   HSSFRow row = sheet.createRow((short) 0);
   HSSFRow row2 = sheet.createRow((short) 1);

   sheet.addMergedRegion(new Region(0, (short) 0, 1, (short) 0));
   HSSFCell ce = row.createCell((short) 0);
   ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理
   ce.setCellValue("项目\\日期"); // 表格的第一行第一列显示的数据
   ce.setCellStyle(style); // 样式,居中
   int num = 0;
   for (int i = 0; i < 9; i++) { // 循环9次,每一次都要跨单元格显示
    // 计算从那个单元格跨到那一格
    int celln = 0;
    int celle = 0;
    if (i == 0) {
     celln = 0;
     celle = 1;
    } else {
     celln = (i * 2);
     celle = (i * 2 + 1);
    }
    // 单元格合并
    // 四个参数分别是:起始行,起始列,结束行,结束列
    sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,
      (short) (celle + 1)));
    HSSFCell cell = row.createCell((short) (celln + 1));
    cell.setCellValue("merging" + i); // 跨单元格显示的数据
    cell.setCellStyle(style); // 样式
    // 不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额”
    HSSFCell cell1 = row2.createCell((short) celle);
    HSSFCell cell2 = row2.createCell((short) (celle + 1));
    cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell1.setCellValue("数量");
    cell1.setCellStyle(style);
    cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell2.setCellValue("金额");
    cell2.setCellStyle(style);
    num++;
   }

   // 在后面加上合计百分比

   // 合计 在最后加上,还要跨一个单元格
   sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,
     (short) (2 * num + 2)));
   HSSFCell cell = row.createCell((short) (2 * num + 1));
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell.setCellValue("合计");
   cell.setCellStyle(style);
   HSSFCell cell1 = row2.createCell((short) (2 * num + 1));
   HSSFCell cell2 = row2.createCell((short) (2 * num + 2));
   cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell1.setCellValue("数量");
   cell1.setCellStyle(style);
   cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell2.setCellValue("金额");
   cell2.setCellStyle(style);

   // 百分比 同上
   sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,
     (short) (2 * num + 4)));
   HSSFCell cellb = row.createCell((short) (2 * num + 3));
   cellb.setEncoding(HSSFCell.ENCODING_UTF_16);
   cellb.setCellValue("百分比");
   cellb.setCellStyle(style);
   HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));
   HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));
   cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);
   cellb1.setCellValue("数量");
   cellb1.setCellStyle(style);
   cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);
   cellb2.setCellValue("金额");
   cellb2.setCellStyle(style);

   FileOutputStream fileOut = new FileOutputStream("workbook.xls");
   wb.write(fileOut);
   fileOut.close();
   System.out.print("OK");
  } catch (Exception ex) {
   ex.printStackTrace();
  }

  test();

 }

 /**
  * 导出excel
  *
  * @param aServiceAccountList
  */

 static void test() {
  ArrayList listResult = new ArrayList();
  /** test--- */
  SServiceAccount sc = new SServiceAccount();
  sc.set_planId(931195);
  sc.set_orgId(10);
  sc.set_total(13);
  listResult.add(sc);
  sc = new SServiceAccount();
  sc.set_planId(931193);
  sc.set_orgId(3);
  sc.set_total(14);
  listResult.add(sc);
  //
  sc = new SServiceAccount();
  sc.set_planId(931193);
  sc.set_orgId(11);
  sc.set_total(15);
  listResult.add(sc);
  sc.set_planId(931193);
  sc.set_orgId(2);
  sc.set_total(16);
  listResult.add(sc);
  //
  sc = new SServiceAccount();
  sc.set_planId(931193);
  sc.set_orgId(1);
  sc.set_total(17);
  listResult.add(sc);
  //
  sc = new SServiceAccount();
  sc.set_planId(931193);
  sc.set_orgId(10);
  sc.set_total(12);
  listResult.add(sc);

  sc = new SServiceAccount();
  sc.set_planId(9311934);
  sc.set_orgId(10);
  sc.set_total(19);
  listResult.add(sc);
  exportExcel(listResult);
 }

 static void exportExcel(ArrayList sServiceAccountList) {

  try {
   HSSFWorkbook wb = new HSSFWorkbook();

   HSSFSheet sheet = wb.createSheet("product export");
   sheet.setDefaultColumnWidth((short)45);
   HSSFCellStyle style = wb.createCellStyle(); // 样式对象
   
   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
   HSSFRow row = sheet.createRow(0);
   
   HSSFCell orgCell = row.createCell((short) 0);
   orgCell.setEncoding(HSSFCell.ENCODING_UTF_16);
   orgCell.setCellValue("局向编号");
   orgCell.setCellStyle(style);
   

   HSSFCell orgName = row.createCell((short) 1);
   orgName.setEncoding(HSSFCell.ENCODING_UTF_16);
   orgName.setCellValue("局向名称");
   orgName.setCellStyle(style);

   HSSFCell productName = row.createCell((short) 2);
   productName.setEncoding(HSSFCell.ENCODING_UTF_16);
   productName.setCellValue("产品名称");
   productName.setCellStyle(style);

   HSSFCell productCountse = row.createCell((short) 3);
   productCountse.setEncoding(HSSFCell.ENCODING_UTF_16);
   productCountse.setCellValue("产品数目");
   productCountse.setCellStyle(style);

   // export excel

   // 第一步 获取 局向 的的数目
   int size = sServiceAccountList.size();
   ArrayList tmpList = new ArrayList();
   ArrayList orgList = new ArrayList();
   for (int i = 0; i < size; i++) {
    SServiceAccount sc = (SServiceAccount) sServiceAccountList
      .get(i);
    String orgidStr = sc.get_orgId() + "";
    if (!tmpList.contains(orgidStr)) {
     tmpList.add(orgidStr);
     orgList.add(sc);
    }
   }

   // 第二 通过局向id获取对应产品的数目
   int orgSize = orgList.size();
   ArrayList excelArrayList = new ArrayList();
   for (int i = 0; i < orgSize; i++) {
    ProductExcelInfo info = new ProductExcelInfo();

    SServiceAccount sc = (SServiceAccount) orgList.get(i);
    info.setOrgId(sc.get_orgId());
    // 第三部 获取 orgid的 所有的产品信息
    ArrayList productList = new ArrayList();
    int counts = 0;
    for (int j = 0; j < size; j++) {
     SServiceAccount tmpSc = (SServiceAccount) sServiceAccountList
       .get(j);
     if (sc.get_orgId() == tmpSc.get_orgId()) {
      productList.add(tmpSc);
      counts += tmpSc.get_total();
     }
    }
    info.setProductList(productList);
    info.setTotalCounts(counts);
    excelArrayList.add(info);
   }

   // 导出成excel

   int excelCount = excelArrayList.size();
   System.out.println("excelCount=" + excelCount);
   int rowNumber = 1;
   for (int i = 0; i < excelCount; i++) {

    ProductExcelInfo excelProduct = (ProductExcelInfo) excelArrayList.get(i);
    int totalRows = excelProduct.getProductList().size() ;
    for (int j = 0; j < totalRows; j++) {
     SServiceAccount sc = (SServiceAccount) excelProduct.getProductList().get(j);
     
    
     HSSFRow curRow = sheet.createRow((short) (rowNumber + j));
     //orgId
     if(j==0) {
      HSSFCell orgIdCell = curRow.createCell((short) 0); 
      sheet.addMergedRegion(new Region(rowNumber, (short) (  0), rowNumber+totalRows,(short) ( 0)));
      orgIdCell.setEncoding(HSSFCell.ENCODING_UTF_16);
      orgIdCell.setCellValue(excelProduct.getOrgId() + "");
      orgIdCell.setCellStyle(style);
      
      //orgName
      HSSFCell orgNameCell = curRow.createCell((short) 1); 
      sheet.addMergedRegion(new Region(rowNumber, (short) (  1), rowNumber+totalRows,(short) ( 1)));
      orgNameCell.setEncoding(HSSFCell.ENCODING_UTF_16);
      orgNameCell.setCellValue(excelProduct.getOrgId() + "");
      orgNameCell.setCellStyle(style);
     }
       //产品名称
     HSSFCell productNameCell = curRow.createCell((short) 2);                 
     productNameCell.setEncoding(HSSFCell.ENCODING_UTF_16);
     productNameCell.setCellValue(sc.get_planId() + "");
     productNameCell.setCellStyle(style);
                     //产品数目
     HSSFCell productCountCell = curRow.createCell((short) 3);
     productCountCell.setEncoding(HSSFCell.ENCODING_UTF_16);
     productCountCell.setCellValue(sc.get_total() + "");
     productCountCell.setCellStyle(style);
    }
    //统计数目的 行
    HSSFRow statRow = sheet.createRow((short) (rowNumber + totalRows));
    
    HSSFCell totalCell = statRow.createCell((short) 2);

    totalCell.setEncoding(HSSFCell.ENCODING_UTF_16);
    totalCell.setCellValue(  "合计");
    totalCell.setCellStyle(style);

    HSSFCell numCountCell = statRow.createCell((short) 3);
    numCountCell.setEncoding(HSSFCell.ENCODING_UTF_16);
    numCountCell.setCellValue(excelProduct.getTotalCounts());
    numCountCell.setCellStyle(style);
    
    rowNumber += totalRows + 1;

   }
   FileOutputStream fileOut = new FileOutputStream("export.xls");
   wb.write(fileOut);
   fileOut.close();
   System.out.print("OK");
  } catch (Exception e) {

   e.printStackTrace();
  }

 }
}

分享到:
评论

相关推荐

    java excel导入数据库/java excel导入

    struts+hibernate实现excel导入数据库 注意:Excel导入是指读服务器端的数据,也就是说,如果想用客户端的Excel是需要把Excel文件先上传到服务器上的,然后再导入,我也是前几天才发现的。

    java excel 读写 java excel 导入数据库

    Java Excel 读写与导入数据库是Java开发中常见的任务,特别是在数据处理和分析场景下。以下将详细讲解这个主题,并提供一些关键知识点。 首先,Java处理Excel文件主要依赖于两个库:Apache POI 和 JExcelAPI。...

    java Excel导入导出

    ### Java Excel导入导出知识点详解 #### 一、Java Excel导入导出背景与意义 在企业级应用开发中,Excel文件作为一种常见的数据交换格式,其处理能力成为了许多开发者必须掌握的一项技能。Java作为广泛使用的编程...

    java excel 导入手机号码(包括对手机的验证)

    * 此代码是完成从excel导入电话号码,将正确的电话号码保存到set集合中,因为set集合对于重复的值会覆盖,所以达到了去重复的值的用例,并累计了不正确的电话号码的个数,对电话号码进行了验证有效性。所需要的 dom4...

    javaexcel导入数据库.pdf

    由于给定的内容中存在一些OCR识别错误和重复文字,我将基于提供的有效信息,对Java操作Excel并将其数据导入数据库的知识点进行详细说明。为方便理解和执行,我会先修正可能的OCR扫描错误,并排除重复内容,然后详细...

    java excel导入mysql的demo

    Java Excel导入MySQL是一个常见的数据处理任务,特别是在数据分析和批量数据录入场景中。在这个示例中,我们使用了Maven作为项目构建工具,并结合了jxl库来读取Excel文件,然后将数据导入到MySQL数据库中。以下是这...

    java excel导入导出

    "java excel导入导出"这个主题涉及到如何使用Java来读取、修改和写入Excel文件。这里我们将深入探讨相关的技术点,包括使用的库、基本操作以及一些实用示例。 1. **Java与Excel的交互库** - Apache POI:这是一个...

    java excel 导入导出

    2. **Excel导入**:在Java程序中,首先需要创建一个`Workbook`对象来表示Excel文件,然后通过`Sheet`对象来操作具体的工作表。使用`Cell`接口来访问和修改单元格的值。对于日期类型的Excel单元格,jxl提供了一个`...

    基于注解研发的Java Excel导入导出工具设计源码

    该项目是一款基于注解的Java Excel导入导出工具设计源码,包含44个文件,涵盖30个Java源文件、5个XML配置文件、5个PNG图片文件、2个Markdown文档文件、1个Git忽略文件、1个Idea项目文件。该工具支持丰富的导出和导入...

    java excel导入导出和模板下载

    Java Excel导入导出和模板下载是Java开发中常见的需求,特别是在数据分析、报表生成以及用户交互等场景中。本文将深入探讨使用Java处理Excel文件的核心技术,主要包括Apache POI库的运用,以及如何实现Excel模板的...

    java excel导入数据库

    标题与描述中的“java excel导入数据库”涉及到的关键知识点主要包括Java编程语言、Apache POI库、Excel文件处理以及数据库操作,具体细节如下: ### Java编程语言 Java是一种广泛使用的面向对象的编程语言,由Sun...

    javaexcel导入数据库[借鉴].pdf

    JavaExcel 导入数据库知识点 JavaExcel 是一个基于 Java 语言的 Excel 文件处理库,它提供了对 Excel 文件的读取、写入和操作功能。在本文中,我们将探讨如何使用 JavaExcel 将 Excel 文件导入到数据库中。 Java...

    java实现Excel导入(POI)

    **六、Excel导入的优化** 1. **内存管理**:大量数据可能导致内存溢出,可以考虑分批读取或使用SXSSF(一个内存效率更高的API)。 2. **错误处理**:在处理Excel数据时,可能遇到格式错误、空值等问题,需要设置...

    Java实现Excel导入导出

    Excel源代码,导入导出各种工具类 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi-scratchpad 代码实例: String path = ""; byte[] bytes; vo.setCurrentPage(0); vo....

    简单Java excel导入数据库 附数据库(mysql)

    这个“简单Java excel导入数据库 附数据库(mysql)”的项目旨在提供一个基础的学习示例,虽然可能存在一些问题,但其主要功能已经实现,能够帮助初学者理解如何操作。 首先,我们要了解涉及的主要技术点: 1. **...

    最新java实现Excel导入导出

    用Java实现的Excel的导入导出,简洁明了,高质量代码。

    java EXCEL导入导出工具类

    java EXCEL导入导出工具类 包含具体代码 课根据需求改造

    java excel导入导出操作

    Java Excel导入导出操作是Java开发中常见的需求,特别是在数据处理、报表生成和数据分析等领域。在Java中,我们可以使用各种库来实现Excel文件的读取和写入,其中一个常用的库就是jxl.jar。这个库提供了方便的API,...

    基于apache poi的java excel导入导出工具,支持xls和xlsx.zip

    这个“基于apache poi的java excel导入导出工具”很可能是一个能够帮助开发者高效地进行数据导入导出的解决方案,它既支持旧版的xls格式,也支持较新的xlsx格式。 在Java中使用Apache POI进行Excel操作主要包括以下...

Global site tag (gtag.js) - Google Analytics