根据目录将含有多个Sheet的Excel拆分成多个Excel

原谅我的表述能力有限,刚接到这个小活的时候,我以为很简单,但当我打开那个含有300+sheet页的excel表格时,我开始慌了。这300多个sheet中其中有30多个目录页,我的工作就是根据这30多个目录拆分excel。方法也许很麻烦,但是我实在不想重复点链接,复制,粘贴这无休止的工作方式。
首先我利用java根据这些目录把该目录下的sheet名拿到:

public static void main(String[] args) {
        try {
            HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("D://jhc.xls"));
            int sum = wb.getNumberOfSheets();
            int num = 0;
            for(int i=1;i<sum;i++){
                HSSFSheet sheet = wb.getSheetAt(i);
                Map map = new HashMap();
                for(Row row :sheet){
                    for(Cell cell : row){
                        if(cell.getHyperlink()!=null){
                            String str = cell.getHyperlink().getAddress();
                            str = str.replaceAll("!A1", "").replaceAll("'", "");
                            Sheet sheet1 = wb.getSheet(str);
                            int location = wb.getSheetIndex(str);
                            map.put(str, location);
                        }
                    }               
                }
                if(map.size()!=0){
                    num++;
                    map.put(sheet.getSheetName(), i);
                    Iterator<String> iter = map.keySet().iterator();
                    while (iter.hasNext()) {
                        String key = iter.next();
                        int value = (int) map.get(key);
                        System.out.print("\""+key+"\",");
                    }

                }
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

接下来我尝试用java来代替我完成复制粘贴的工作,但是合并单元格的情况我没有考虑到,导致程序运行失败,后来查资料的时候发现了一个更简单的方法,打开要拆分的excel以及一个新建的excel表格 Alt+F11点击工具进入宏,输入以下代码:

Sub copy()

Dim arrs() As Variant
Dim arr As Variant
arrs = Array("这里添加java输出的那一段字符串")
For Each arr In arrs
Workbooks("copy.xlsx").Worksheets.Add().Name = arr
Next
For Each arr In arrs
Workbooks("jhc.xlsx").Sheets(arr).Cells.copy Destination:=Workbooks("copy.xlsx").Sheets(arr).Cells(1, 1)

Next

End Sub

OK了,整个工作结束了,研究这些耗费了我两天的时间。其实如果一个一个复制粘贴的话也许耗时比这更短,但是我本着能用代码解决的问题尽量少BB的原则完成这项任务。很享受这两天的经历,毕竟打两天代码比复制粘贴有意义的多。这是我的第一篇博客。以后我会把我工作遇到的有意思的事情与大家一起分享!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值