• Excel区域复制粘贴


    这段工作做的是利用JAVA实现Excel的一块区域的复制并粘贴。

    就本身对于 Excel跟 鼠标来说,这也是一个非常简单的操作。

    但是 用 java的poi来做,还是 有点儿吃力的。

    下面是之前做的一个demo。

    为了跑动 poi,需要在 pom.xml里面

    加入 这个 依赖

            <!-- XSSFWorkbook poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
            

    调用

      1 package com.example.demo.controller;
      2 
      3 import java.io.FileInputStream;
      4 import java.io.IOException;
      5 import java.io.InputStream;
      6 import java.io.OutputStream;
      7 import java.util.List;
      8 import java.util.Set;
      9 import java.util.TreeSet;
     10 
     11 import javax.servlet.http.HttpServletResponse;
     12 
     13 import org.apache.poi.ss.usermodel.Cell;
     14 import org.apache.poi.ss.usermodel.Row;
     15 import org.apache.poi.ss.usermodel.Sheet;
     16 import org.apache.poi.ss.usermodel.Workbook;
     17 import org.apache.poi.ss.util.CellRangeAddress;
     18 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     19 
     20 public class ExcelOutputController {
     21     
     22     
     23     public void outputExcel(HttpServletResponse response) throws IOException {
     24         InputStream excelFile = new FileInputStream("c:/test.xlsx");
     25         
     26         
     27         Workbook wbsrc = new XSSFWorkbook(excelFile);
     28         
     29         Sheet oldSheet = wbsrc.getSheetAt(0);
     30         
     31         Sheet newSheet = wbsrc.getSheetAt(1);
     32         
     33         int startRow = 0,endRow = 11;
     34         
     35         int startCol = 0,endCol = 11;
     36         
     37         int newCellRow = 3,newCellCol =3;
     38         
     39         copyArea(oldSheet,startRow,endRow,startCol,endCol,newSheet,newCellRow,newCellCol);
     40         
     41         OutputStream out = null;
     42         
     43         out = response.getOutputStream();
     44         
     45         response.setContentType("application/vnd.ms-excel");
     46         
     47         response.setCharacterEncoding("UTF-8");
     48         
     49         response.setHeader("Content-Disposition", "attachment;filename=fff.xlsx");
     50         
     51         wbsrc.write(out);
     52         wbsrc.close();
     53         
     54     }
     55 
     56     private void copyArea(Sheet oldSheet, int startRow, int endRow, int startCol, int endCol, Sheet newSheet,
     57             int newCellRow, int newCellCol) {
     58         
     59         Row oldRow = null;
     60         Row newRow = null;
     61         
     62         Cell oldCell = null;
     63         Cell newCell = null;
     64         
     65         List<CellRangeAddress> mergedRegions = oldSheet.getMergedRegions();
     66         
     67         Set<String> newMergedRegions = new TreeSet<>();
     68         
     69         for(int i = startRow;i<=endRow;i++) {
     70             oldRow = oldSheet.getRow(i);
     71             newRow = newSheet.getRow(newCellRow+i);
     72             
     73             if(newRow==null) {
     74                 newRow = newSheet.createRow(newCellRow+i);
     75             }
     76             for(int j= startCol;j<=endCol;j++) {
     77                 oldCell = oldRow.getCell(j);
     78                 boolean isNew = false;
     79                 CellRangeAddress mergedRegion = judgeMergedRegion(mergedRegions,oldCell);
     80                 if(mergedRegion !=null) {
     81                     CellRangeAddress newMergedRegion = new CellRangeAddress(mergedRegion.getFirstRow()+newCellRow,
     82                             mergedRegion.getLastRow()+newCellRow,mergedRegion.getFirstColumn()+newCellCol,mergedRegion.getLastColumn()+newCellCol);
     83                     if(judgeRegionExisted(newMergedRegion,newMergedRegions)) {
     84                         isNew = false;
     85                         
     86                     } else {
     87                         newMergedRegions.add(newMergedRegion.formatAsString());
     88                         newSheet.addMergedRegion(newMergedRegion);
     89                         isNew =true;
     90                     }
     91                 } else { //not a mergedRegion
     92                     isNew = true;
     93                 }
     94                 newCell = newRow.getCell(newCellCol+j);
     95                 if(newCell == null) {
     96                     newCell = newRow.createCell(newCellCol+j);
     97                 }
     98                 newCell.setCellStyle(oldCell.getCellStyle());
     99                 if(isNew) {
    100                     switch(oldCell.getCellType()) {
    101                     case Cell.CELL_TYPE_NUMERIC:
    102                         newCell.setCellValue(oldCell.getNumericCellValue());
    103                         break;
    104                     case Cell.CELL_TYPE_STRING:
    105                         newCell.setCellValue(oldCell.getStringCellValue());
    106                         break;
    107                     case Cell.CELL_TYPE_FORMULA:
    108                         newCell.setCellFormula(oldCell.getCellFormula());
    109                         break;
    110                     case Cell.CELL_TYPE_BLANK:
    111                         newCell.setCellType(Cell.CELL_TYPE_BLANK);
    112                         break;
    113                     case Cell.CELL_TYPE_BOOLEAN:
    114                         newCell.setCellValue(oldCell.getBooleanCellValue());
    115                         break;
    116                     case Cell.CELL_TYPE_ERROR:
    117                         newCell.setCellValue(oldCell.getErrorCellValue());
    118                         break;
    119                     default:
    120                         break;
    121                         
    122                     }
    123                 }
    124             }
    125         }
    126     }
    127 
    128     private boolean judgeRegionExisted(CellRangeAddress newMergedRegion, Set<String> newMergedRegions) {
    129         return newMergedRegions.contains(newMergedRegion.formatAsString());
    130     }
    131 
    132     private CellRangeAddress judgeMergedRegion(List<CellRangeAddress> mergedRegions, Cell cell) {
    133         
    134         for(CellRangeAddress cra:mergedRegions){
    135             if(cra.isInRange(cell))
    136                 return cra;
    137         }
    138         return null;
    139     }
    140     
    141     
    142 
    143 }

    等哪天我能跑交互以后,做一个 跑动的样例出来。

  • 相关阅读:
    宋体桌面Windows 8小技巧
    现实世界的Windows Azure:采访Cenzic的市场总监Mandeep Khera
    现实世界的Windows Azure:采访Transparencia Sp. z o.o的Grzegorz SkowronMoszkowicz
    云计算的思想领袖:与Tier3的创始人和首席技术官Jared Wray的谈话
    在Windows Azure上使用WAS和IIS托管服务
    现实世界的Windows Azure:采访InishTech的销售及市场部主管Andrew O’Connor
    现实世界的Windows Azure:访问ThinPrint有限公司的首席执行官Henning Volkmer
    Windows Azure AppFabric应用程序
    Windows Azure部署和虚拟IP
    现已可用:帮助ISV在Windows Azure上开发多租户SaaS解决方案的构建模块
  • 原文地址:https://www.cnblogs.com/letben/p/11391673.html
Copyright © 2020-2023  润新知