public class CopyExcelSheetToAnotherExcelSheet {

  public static void main(String[] args) throws FileNotFoundException, IOException {
    String fromPath = "D:\\share\\jiemu_new\\";// excel存放路径
    String toPath = "c:\\ok\\";// 保存新EXCEL路径
    // 新的excel 文件名
    String excelName = "节目访问量";
    // 创建新的excel
    HSSFWorkbook wbCreat = new HSSFWorkbook();
    File file = new File(fromPath);
    for (File excel : file.listFiles()) {
      // 打开已有的excel
      String strExcelPath = fromPath + "\\" + excel.getName();
      InputStream in = new FileInputStream(strExcelPath);
      HSSFWorkbook wb = new HSSFWorkbook(in);
      for (int ii = 0; ii < wb.getNumberOfSheets(); ii++) {
        HSSFSheet sheet = wb.getSheetAt(ii);
        HSSFSheet sheetCreat = wbCreat.createSheet(sheet.getSheetName());
        // 复制源表中的合并单元格
        MergerRegion(sheetCreat, sheet);
        int firstRow = sheet.getFirstRowNum();
        int lastRow = sheet.getLastRowNum();
        for (int i = firstRow; i <= lastRow; i++) {
          // 创建新建excel Sheet的行
          HSSFRow rowCreat = sheetCreat.createRow(i);
          // 取得源有excel Sheet的行
          HSSFRow row = sheet.getRow(i);
          // 单元格式样
          int firstCell = row.getFirstCellNum();
          int lastCell = row.getLastCellNum();
          for (int j = firstCell; j < lastCell; j++) {
            // 自动适应列宽 貌似不起作用
            //sheetCreat.autoSizeColumn(j);
            System.out.println(row.getCell(j));
            rowCreat.createCell(j);
            String strVal ="";
            if (row.getCell(j)==null) {
             
            }else{
              strVal = removeInternalBlank(row.getCell(j).getStringCellValue());
            }
            rowCreat.getCell(j).setCellValue(strVal);
          }
        }
      }
    }
    FileOutputStream fileOut = new FileOutputStream(toPath + excelName + ".xls");
    wbCreat.write(fileOut);
    fileOut.close();
  }

  /**
  * 复制原有sheet的合并单元格到新创建的sheet
  *
  * @param sheetCreat
  *      新创建sheet
  * @param sheet
  *      原有的sheet
  */
  private static void MergerRegion(HSSFSheet sheetCreat, HSSFSheet sheet) {
    int sheetMergerCount = sheet.getNumMergedRegions();
    for (int i = 0; i < sheetMergerCount; i++) {
      Region mergedRegionAt = sheet.getMergedRegionAt(i);
      sheetCreat.addMergedRegion(mergedRegionAt);
    }

  }

  /**
  * 去除字符串内部空格
  */
  public static String removeInternalBlank(String s) {
    // System.out.println("bb:" + s);
    Pattern p = Pattern.compile("\\s*|\t|\r|\n");
    Matcher m = p.matcher(s);
    char str[] = s.toCharArray();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < str.length; i++) {
      if (str[i] == ' ') {
        sb.append(' ');
      } else {
        break;
      }
    }
    String after = m.replaceAll("");
    return sb.toString() + after;
  }
}

java 实现 excel sheet 拷贝到另一个Excel文件中 poi的更多相关文章

  1. java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  2. 如何调用另一个python文件中的代码

    模块的搜索路径 模块的搜索路径都放在了sys.path列表中,如果缺省的sys.path中没有含有自己的模块或包的路径,可以动态的加入(sys.path.apend)即可.下面是sys.path在Wi ...

  3. 怎样将多个CSS文件导入一个CSS文件中

    问题: 在HTML中引入css的其中的两个方法:    导入式和链接式的目的都是将一个独立的css文件引入一个文件中,二者的区别不大,事实上,二者最大的区别在于链接式使用html的标记引入外部css文 ...

  4. 在VS中让一个JS文件智能提示另一个JS文件中的成员

    “在VS中如何让一个JS文件智能提示另一个JS文件中的成员” 有时候会有这种情况:当我的一个Web页面引用了两个JS文件(假如分别叫common.js和JScript1.js),如果JScript1. ...

  5. 多个.txt文件合并到一个.txt文件中

    如果想要将多个.txt文件合并到一个.txt文件中,可以先将所有.txt文件放到一个文件夹中,然后使用.bat文件完成任务. 例如,在一个文件夹下有1.txt, 2.txt, 3.txt三个文件,想把 ...

  6. shell如何传递变量到另一个脚本文件中

    http://www.jbxue.com/article/shell/20707.html本文介绍了shell脚本传递变量到另一个脚本文件中的方法,在脚本中调用另一脚本,即创建了一个子进程,感兴趣的朋 ...

  7. java 将一张图片拷贝到另外一个地方。(IO流)

    package com.beiwo.inputstream; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...

  8. 如何将一个Excel文件中的sheet移动到另外一个Excel?

    背景 工作中往往会有多个excel维护的情况,随着业务的变化, 将一个Excel合并到另外一个Excel,成为必须. 如何移动sheet,对于不会的人,这是一个好问题, 也许你经过多次尝试都没有成功. ...

  9. python excel操作 练习:#生成一个excel文件,生成3个sheet,每个sheet的a1写一下sheet的名称。每个sheet有个底色

    练习:#生成一个excel文件,生成3个sheet,每个sheet的a1写一下sheet的名称.每个sheet有个底色 #coding=utf-8 from openpyxl import Workb ...

随机推荐

  1. IHE-PIX 备注

    IHE给出了各个Actor之间如何通讯的建议: 1.       应用程序通讯时必须用MLLP包装或者解析. 2.       客户端建立连接后,服务器端必须用此连接进行应答.客户端可以继续用此连接启 ...

  2. java计算两个时间相差(天、小时、分钟、秒)

    public static Long dateDiff(String startTime, String endTime, String format, String str) { // 按照传入的格 ...

  3. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

    2017-03-16 11:23:29.601 1238 ERROR nova.compute.manager [instance: 3f195047-250a-4eb5-8da0-63bea6e26 ...

  4. php学习笔记-PHP中的几个取整函数

    floor是向下取整,比如4.5,它是在4和5之间的一个数,那么结果就是4. ceil是向上取整,比如3.7,它是在3和4之间的一个数,那么结果就是4. round是对一个数四舍五入,小数部分如果小于 ...

  5. .NET&nbsp;下的&nbsp;POP3&nbsp;编程代码共享

    前一段时间在论坛上看见有人问如何使用.net进行POP3编程,其实POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码. 1.打开VS.NET 20 ...

  6. 算法java实现--回溯法--图的m着色问题

    (转自:http://blog.csdn.net/lican19911221/article/details/26264471) 图的m着色问题的Java实现(回溯法) 具体问题描述以及C/C++实现 ...

  7. 3. docker容器内信息获取、命令的执行、容器的导入和导出

    一.依附容器 依附操作attach通常用在由docker start或者docker restart启动的交互型容器中.由于docker start启动的交互型容器并没有具体终端可以依附,而容器本身是 ...

  8. iOS ipa包重签名

    背景:公司做游戏SDK的,提供SDK给第三方后,他们打包过来我们需要分发在不同的渠道,这个时候需要修改SDK的配置文件,ipa文件修改后是需要手机越狱或者ipa重签名才能安装成功的,所以研究了一下重签 ...

  9. 图解SynchronousQueue原理详解-非公平模式

    SynchronousQueue原理详解-非公平模式 开篇 说明:本文分析采用的是jdk1.8 约定:下面内容中Ref-xxx代表的是引用地址,引用对应的节点 前面已经讲解了公平模式的内容,今天来讲解 ...

  10. 【问题总结】万万没想到,竟然栽在了List手里

    说明 昨天同事开发的时候遇到了一个奇怪的问题. 使用Guava做缓存,往里面存一个List,为了方便描述,称它为列表A,在另一个地方取出来,再跟列表B中的元素进行差集处理,简单来说,就像是下面这样: ...