zoukankan      html  css  js  c++  java
  • java 读写 excle 完整版

    pom.xml

    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version>
    </dependency>
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.14</version>
    </dependency>
    <!-- 处理excel和上面功能是一样的-->
    <dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.10</version>
    </dependency>

    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>shade</goal>
    </goals>
    <configuration>
    <transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <mainClass>com.baozun.util.DecryptAndEncrypt</mainClass>
    </transformer>
    </transformers>
    </configuration>
    </execution>
    </executions>
    </plugin>





    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
    <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
    <manifest>
    <mainClass></mainClass>
    </manifest>
    </archive>
    </configuration>
    <executions>
    <execution>
    <id>make-assembly</id>
    <phase>package</phase>
    <goals>
    <goal>single</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
    <archive>
    <addMavenDescriptor>false</addMavenDescriptor>
    </archive>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.3.5.RELEASE</version>
    <configuration>
    <mainClass>com.bj.util.ExcelReaderWrite</mainClass>
    </configuration>
    <executions>
    <execution>
    <goals>
    <goal>repackage</goal>
    </goals>
    </execution>
    </executions>
    </plugin>




    </plugins>

    </build>

    部分参考:http://www.codepub.cn/2017/06/13/Maven-introduces-local-dependency-jar-to-executable-jar-packages/
         https://www.cnblogs.com/523823-wu/p/7635358.html

    代码部分

    package com.baozun.util;
    
    import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    public class ExcelReaderWrite {
        private static final String EXCEL_XLS = "xls";
        private static final String EXCEL_XLSX = "xlsx";
        private  static String filePath=null;
        private  static String sheetName=null;
        private static Workbook workBook;
        private static Sheet sheet;
        private Object[][] results;
        private List<List<String>> listData;
        private  static FileInputStream in ;
    
         public ExcelReaderWrite(String filePath, String sheetName) {
            this.filePath = filePath;
            this.sheetName = sheetName;
            innit();
        }
    
        public void innit() {
            workBook = getWorkbok(filePath);
            sheet = workBook.getSheet(sheetName);
        }
    
        public Workbook getWorkbok(String filePath) {
            try {
                File file = new File(filePath);
                if (file.exists()) {
                    in  = new FileInputStream(file);
                    if (file.getName().endsWith(EXCEL_XLS)) {     //Excel&nbsp;2003
    
                        return new HSSFWorkbook(in);
                    } else if (file.getName().endsWith(EXCEL_XLSX)) {    // Excel 2007/2010
                        return new XSSFWorkbook(in);
                    }
                } else {
                    System.out.println(filePath + "不存在 !");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public void setCellData(int rowNum, int colNum, String content) {
            rowNum -= 1;
            colNum -= 1;
            FileOutputStream out = null;
            if (null == sheet.getRow(rowNum)) {
                Row row = sheet.createRow(rowNum);
                if (null == row.getCell(colNum)) {
                    row.createCell(colNum).setCellValue(content);
                } else {
                    row.getCell(colNum).setCellValue(content);
                }
            } else {
                sheet.getRow(rowNum).createCell(colNum).setCellValue(content);
            }
    
            try {
                out = new FileOutputStream(filePath);
                workBook.write(out);
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
    
                    out.flush();
                    out.close();
                    in.close();
                  innit();
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
        }
        private String getCellValue(Cell cell) {
            String cellValue = "";
            DataFormatter formatter = new DataFormatter();
            if (cell != null) {
                switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_NUMERIC:
                        if (HSSFDateUtil.isCellDateFormatted(cell)) {
                            cellValue = formatter.formatCellValue(cell);
                        } else {
                            double value = cell.getNumericCellValue();
                            int intValue = (int) value;
                            cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);
                        }
                        break;
                    case Cell.CELL_TYPE_STRING:
                        cellValue = cell.getStringCellValue();
                        break;
                    case Cell.CELL_TYPE_BOOLEAN:
                        cellValue = String.valueOf(cell.getBooleanCellValue());
                        break;
                    case Cell.CELL_TYPE_FORMULA:
                        cellValue = String.valueOf(cell.getCellFormula());
                        break;
                    case Cell.CELL_TYPE_BLANK:
                        cellValue = "";
                        break;
                    case Cell.CELL_TYPE_ERROR:
                        cellValue = "";
                        break;
                    default:
                        cellValue = cell.toString().trim();
                        break;
                }
            }
            return cellValue.trim();
        }
        public String getCellData(String sheetName, int rowNum, int colNum) {
            if (rowNum <= 0 || colNum <= 0) {
                return null;
            } else if (workBook.getSheet(sheetName) == null || workBook.getSheet(sheetName).getRow(rowNum - 1) == null) {
    
                return filePath + " 中 " + sheetName + " 不存在,或者" + rowNum + " 行不存在 ! ";
            } else {
                return getCellValue(workBook.getSheet(sheetName).getRow(rowNum - 1).getCell(colNum - 1));
            }
    
        }
        public String getCellData(int rowNum, int colNum) {
            if (rowNum <= 0 || colNum <= 0) {
                return null;
            } else if (workBook.getSheet(sheetName) == null || workBook.getSheet(sheetName).getRow(rowNum - 1) == null) {
    
                return filePath + " 中 " + sheetName + " 不存在,或者" + rowNum + " 行不存在 ! ";
            } else {
                return getCellValue(workBook.getSheet(sheetName).getRow(rowNum - 1).getCell(colNum - 1));
            }
    
        }
        private List<List<String>> getSheetData() {
            listData = new ArrayList<List<String>>();
            int numOfRows = sheet.getLastRowNum()+1;
            System.out.println("sheet.getLastRowNum()="+sheet.getLastRowNum());
            for (int i = 0; i < numOfRows; i++) {
                Row row = sheet.getRow(i);
                Map<String, String> map = new HashMap<String, String>();
                List<String> list = new ArrayList<String>();
                if (row != null) {
                    for (int j = 0; j < row.getLastCellNum(); j++) {
                        Cell cell = row.getCell(j);
                        list.add(this.getCellValue(cell));
                    }
                }
                listData.add(list);
            }
    
            return listData ;
        }
    
        public void printSheetData() {
            // 测试数据excel数据用 ;
    
            List<List<String>> list   = getSheetData();
            System.out.println("总共有 "+list.size()+"   行!");
            for (int i = 0; i < list.size(); i++) {
                System.out.println("第 "+(i+1)+" 行有 "+list.get(i).size()+" 单元格有值 : "+list.get(i).toString());
            }
        }
    
        public static void main(String[] args) {
           // String filePath_1 = "D:/writeExcel.xlsx";
            String filePath_2 = "D:/writeExcel97.xls";
            String sheetName = "Sheet1";
         /*   int lastNum_1 = new ExcelReaderWrite(filePath_1, sheetName).getWorkbok().getSheet(sheetName).getLastrowNum();
            int lastNum_2 = new ExcelReaderWrite(filePath, sheetName).getWorkbok().getSheet(sheetName).getLastrowNum();
            System.out.println(lastNum_1);
            System.out.println(lastNum_2);
            for (int i = 0; i <10 ; i++) {
                new ExcelReaderWrite(filePath_1, sheetName).setCellData(i,3,filePath_1+"_"+String.valueOf(System.currentTimeMillis()));
                new ExcelReaderWrite(filePath_2, sheetName).setCellData(i,3,filePath_2+"_"+String.valueOf(System.currentTimeMillis()));
            }
            String dataValue=  new ExcelReaderWrite(filePath_1, sheetName).getCellData(sheetName, 1, 1);
            System.out.println(dataValue);
            new ExcelReaderWrite(filePath_1, sheetName).printSheetData();
           new ExcelReaderWrite(filePath_2, sheetName).printSheetData();
           */
            ExcelReaderWrite eh=  new ExcelReaderWrite(filePath_2, sheetName);
            eh.setCellData(1,1,"1");
            eh.setCellData(1,2,"1_2");
            eh.printSheetData();
            eh.setCellData(2,1,"22_1");
            eh.setCellData(2,2,"22_2");
    
            eh.printSheetData();
            System.out.println("2row2col="+eh.getCellData(2, 2));
    //        eh.setCellData(1,3,String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(1,4,String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(1, 5, String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(2,5,String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(2,5,String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(2,5,String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(2,5,String.valueOf(System.currentTimeMillis()));
    
    
    
    
    // eh.setCellData(3,2,String.valueOf(System.currentTimeMillis()));
    //        eh.setCellData(3,3,String.valueOf(System.currentTimeMillis()));
    //s        eh.setCellData(3,4,String.valueOf(System.currentTimeMillis()));
    
    
        }
    
    
    }
    View Code

    解决了  一个对象重复写入时的错误 ;

  • 相关阅读:
    Mysql登录错误:ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded
    Docker配置LNMP环境
    Docker安装mysqli扩展和gd扩展
    Docker常用命令
    Ubuntu常用命令
    单例模式的优缺点和使用场景
    ABP 多租户数据共享
    ABP Core 后台Angular+Ng-Zorro 图片上传
    ERROR Error: If ngModel is used within a form tag, either the name attribute must be set or the form control must be defined as 'standalone' in ngModelOptions.
    AbpCore 执行迁移文件生成数据库报错 Could not find root folder of the web project!
  • 原文地址:https://www.cnblogs.com/linbo3168/p/9939992.html
Copyright © 2011-2022 走看看