• java 解析Word文档以及Excel表格数据带有图片(2003/2007)


    一、解析Word文档表格数据

      1.解析Word2007文档表格数据(docx格式)

     1 public static String getWordContent(String filePath) throws Exception{
     2         //定义解析文档图片存储路径
     3         String storepicpath = filePath.substring(0, filePath.lastIndexOf("."));//获取路径最后以文件名命名的文件夹路径
     4         storepicpath = storepicpath.replaceAll("\s*", "").replaceAll("\.", "@@").replaceAll("\#", "@@@").replaceAll("\%", "@@@@");//去掉路径中的空格
     5         //开始解析文档
     6         FileInputStream fis = new FileInputStream(filePath);
     7         //解析上传引证商标明细文件
     8         XWPFDocument xwpf = new XWPFDocument(fis);//得到word文档的信息
     9         Iterator<XWPFTable> it = xwpf.getTablesIterator();//迭代得到word中的表格
    10         String content = "";//定义文档表格内容
    11         while(it.hasNext()){
    12             XWPFTable table = it.next();//获取文档中的表格
    13              List<XWPFTableRow> rows=table.getRows();//获取所有行数据
    14              //读取每一行数据
    15             for (int i = 0; i < rows.size(); i++) {
    16                 if(i==4 || i==12){
    17                     XWPFTableRow  row = rows.get(i);
    18                     //读取每一列数据
    19                     List<XWPFTableCell> cells = row.getTableCells(); 
    20                     for (int j = 1; j < cells.size(); j++) {
    21                         XWPFTableCell cell=cells.get(j);
    22                         //输出当前的单元格的数据
    23                         if(j == 2){
    24                             //******************************开始解析表格中的商标图样图片信息************************//
    25                             String picPath = "";
    26                             List<XWPFParagraph> xwpfParagraphs =  cell.getParagraphs();
    27                             if(xwpfParagraphs == null) return null;
    28                             for(XWPFParagraph xwpfParagraph:xwpfParagraphs){
    29                                 List<XWPFRun> xwpfRunList = xwpfParagraph.getRuns();
    30                                 if(xwpfRunList==null) return null;
    31                                 for(XWPFRun xwpfRun:xwpfRunList){
    32                                     List<XWPFPicture> xwpfPictureList =  xwpfRun.getEmbeddedPictures();
    33                                     if(xwpfParagraph==null) return null;
    34                                     for(XWPFPicture xwpfPicture:xwpfPictureList){
    35                                         xwpfPicture.getPictureData().getData();
    36                                         xwpfPicture.getPictureData().getFileName();
    37                                         storepicpath = storepicpath.replace("\", "/");
    38                                         storepicpath = storepicpath.replaceAll("C:/Users/v-guoxiao/Desktop/Reference-Marks2", "D:/TradeMark/Tomcat8/webapps/ROOT/trademarkimage/ReferencePicture");
    39                                         File file = new File(storepicpath);
    40                                         if(!file.exists()){
    41                                             file.mkdirs();
    42                                         }
    43                                         picPath = storepicpath+"/"+ xwpfPicture.getPictureData().getFileName();//拼写到存放数据的值
    44                                         byte2image( xwpfPicture.getPictureData().getData(),storepicpath+"/"+ xwpfPicture.getPictureData().getFileName());
    45                                     }
    46                                 }
    47                             }
    48                             content = content +"&@#"+ picPath;
    49                         }else{
    50                             content = content +"&@#"+ cell.getText();
    51                         }
    52                     }
    53                 }else {
    54                     XWPFTableRow  row = rows.get(i);
    55                     //读取每一列数据
    56                     List<XWPFTableCell> cells = row.getTableCells(); 
    57                     for (int j = 1; j < cells.size(); j++) {
    58                         XWPFTableCell cell=cells.get(j);
    59                         //输出当前的单元格的数据
    60                         content = content +"&@#"+ cell.getText();
    61                     }
    62                 }
    63             }
    64         }
    65         fis.close();
    66         return content;
    67     }
    68     
    69     /**
    70      * 解析 DOCX 文档中图片工具方法
    71      * @param data
    72      * @param path
    73      */
    74     public static  void byte2image(byte[] data,String path){
    75         if(data.length<3||path.equals("")) return;
    76         FileImageOutputStream imageOutput = null;
    77         try{
    78             imageOutput = new FileImageOutputStream(new File(path));
    79             imageOutput.write(data, 0, data.length);
    80         } catch(Exception ex) {
    81             System.out.println("Exception: " + ex);
    82             ex.printStackTrace();
    83         }finally {
    84             try {
    85                 imageOutput.close();
    86             } catch (IOException e) {
    87                 e.printStackTrace();
    88             }
    89         }
    90     }

      2.解析Word2003文档表格数据(doc格式)

      1 public static List<Map<String, Object>> getBigFotfmContent(String filePath) throws Exception{
      2         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
      3         FileInputStream fis = new FileInputStream(filePath);
      4         String storepath = filePath.substring(0, filePath.lastIndexOf("."));//获取图片存储路径
      5         storepath = storepath.replaceAll("\s*", "").replaceAll("\.", "@@").replaceAll("\#", "@@@").replaceAll("\%", "@@@@");
      6         String content = "";//定义文档表格内容
      7         POIFSFileSystem pfs = new POIFSFileSystem(fis);//得到word文档的信息
      8         HWPFDocument hd = new HWPFDocument(pfs);
      9         Range range = hd.getRange();
     10         TableIterator it = new TableIterator(range);
     11         int p = 1;
     12         while(it.hasNext()){
     13             Table table = it.next();//获取表格
     14             //读取每一行数据
     15             for (int i = 0; i < table.numRows(); i++) {
     16                 if(i == 0){
     17                     TableRow  row = table.getRow(i);
     18                     //读取每一列数据
     19                     for (int j = 0; j < row.numCells(); j++) {
     20                         if(j == 1){
     21                             TableCell cell = row.getCell(j);
     22                             PicturesTable pt = hd.getPicturesTable();
     23                             CharacterRun cr = cell.getCharacterRun(0);
     24                             if(pt.hasPicture(cr)){
     25                                 Picture picture = pt.extractPicture(cr, true);
     26                                 byte[] picbyte = picture.getContent();
     27                                 storepath = storepath.replace("\", "/");
     28                                 storepath = storepath.replaceAll("C:/Users/v-guoxiao/Desktop/Reference-Marks2", "D:/TradeMark/Tomcat8/webapps/ROOT/trademarkimage/ReferencePicture");
     29                                 File file = new File(storepath);
     30                                 if(!file.exists()){
     31                                     file.mkdirs();
     32                                 }
     33                                 String picpath = storepath + "/image" + p + ".jpg";
     34                                 FileOutputStream fos = new FileOutputStream(picpath);
     35                                 fos.write(picbyte);
     36                                 fos.close();
     37                                 content = content + "&@#" + picpath;
     38                             }
     39                         }else{
     40                             TableCell cell=row.getCell(j);
     41                             //输出当前的单元格的数据
     42                             for(int k =0; k < cell.numParagraphs(); k++){
     43                                 Paragraph paragraph = cell.getParagraph(k);
     44                                 String tradmark = paragraph.text().replaceAll("", "");
     45                                 if(!tradmark.equals("") && !tradmark.equals(null)){
     46                                     content = content + "&@#" + tradmark.replaceAll(":", "");
     47                                 }
     48                             }
     49                         }
     50                     }
     51                 }else {
     52                     TableRow  row = table.getRow(i);//获取行数据
     53                     //读取每一列数据
     54                     for (int j = 0; j < row.numCells(); j++) {
     55                         TableCell cell=row.getCell(j);//获取单元格数据
     56                         //输出当前的单元格的数据
     57                         for(int k =0; k < cell.numParagraphs(); k++){
     58                             Paragraph paragraph = cell.getParagraph(k);
     59                             String cellcontent = paragraph.text().replaceAll("", "");
     60                             if(!cellcontent.equals("") && !cellcontent.equals(null)){
     61                                 content = content + "&@#" + cellcontent.replaceAll(":", "");
     62                             }
     63                         }
     64                     }
     65                 }
     66             }
     67             p++;
     68         }
     69         //分割文档内容,存储到map集合中
     70         String[] tables = content.split("Trademark");
     71         for(int i = 1; i < tables.length; i++){
     72             String data = "Trademark"+tables[i];
     73             data = data.replaceAll("\s*", "").replaceAll("Trademark&@#&@#&@#", "Trademark&@#").replaceAll("Goods/Services&@#&@#", "Goods/Services&@#").replaceAll("Address&@#&@#", "Address&@#");
     74             String[] cellData = data.split("&@#",-1);
     75             Map<String, Object> map =new HashMap<String, Object>();
     76             if(i < tables.length-1){
     77                 if (cellData.length > 17) {
     78                     for(int m = 0; m < cellData.length-1; m++){
     79                         if(m < 10 || m > 15){
     80                             if(m%2 == 0 && m < cellData.length-1){
     81                                 map.put(cellData[m], cellData[m+1]);
     82                             }
     83                         }else if(m == 10 || m == 13){
     84                             map.put(cellData[m], cellData[m+1] + cellData[m+2]);
     85                         }
     86                     }
     87                 }else{
     88                     for(int m = 0; m < cellData.length-1; m++){
     89                         if(m%2 == 0 && m < cellData.length-1){
     90                             map.put(cellData[m], cellData[m+1]);
     91                         }
     92                     }
     93                 }
     94             }else{
     95                 if(cellData.length > 17){
     96                     for(int m = 0; m < cellData.length; m++){
     97                         if(m < 10 || m > 15){
     98                             if(m%2 == 0 && m < cellData.length-1){
     99                                 map.put(cellData[m], cellData[m+1]);
    100                             }
    101                         }else if(m == 10 || m == 13){
    102                             map.put(cellData[m], cellData[m+1] + cellData[m+2]);
    103                         }
    104                     }
    105                 }else{
    106                     for(int m = 0; m < cellData.length; m++){
    107                         if(m%2 == 0 && m < cellData.length-1){
    108                             map.put(cellData[m], cellData[m+1]);
    109                         }
    110                     }
    111                 }
    112             }
    113             list.add(map);
    114         }
    115         return list;
    116     }

      3.解析Excel2003表格数据(xls格式)

      1 public static String getDataFromExcelXls(String filePath) throws Exception{
      2         //获取路径中的Excel表的文件名称
      3         File file = new File(filePath.trim());
      4         String fileName = file.getName();//文件名称
      5         fileName = fileName.substring(0, fileName.lastIndexOf(".")).replaceAll("\s*", "");
      6         String exContent = "";//定义接收循环表格的数据
      7         FileInputStream fis = null;//定义输出流
      8         Workbook workbook = null;//定义工作簿
      9         Sheet sheet = null;//定义sheet
     10         //根据扩展名判断解析Excel格式
     11         fis = new FileInputStream(filePath);
     12         workbook = new HSSFWorkbook(fis);//获取工作簿
     13         Map<String, PictureData> maplist = null;
     14         //开始遍历Excel表中多个sheet
     15         for(int i = 0; i < workbook.getNumberOfSheets(); i++){//工作簿中多个sheet,循环遍历出获取每个sheet表中数据
     16             sheet = workbook.getSheetAt(i);//获取sheet表
     17             String sheetName = sheet.getSheetName().replaceAll("\s*", "").replaceAll("\.", "");//获取sheet名称
     18             maplist = getXlsPicture((HSSFSheet)sheet);
     19             //取存图片
     20             try {
     21                 getExcelImage(maplist, fileName, sheetName);
     22             } catch (Exception e) {
     23                 e.printStackTrace();
     24             }
     25             
     26             //开始解析表格数据
     27             Date date;//定义所有日期
     28             //获取数据的总行数
     29             int totalRowNum = sheet.getLastRowNum();
     30             //定义获取的数据属性名称
     31             String filingNum = "";//申请/注册号
     32             String type = "";//类型
     33             String mark = "";//图样
     34             String properter = "";//申请人
     35             String filingDate = "";//申请日期
     36             String startDate = "";//开始日期
     37             String endDate = "";//结束日期
     38             String status = "";//当前状态
     39             String isCancel= "";//是否取消
     40             String goodsDescriptionEN = "";//商品英文描述
     41             for(int m = 6; m <= totalRowNum; m++){
     42                 Row row = sheet.getRow(m);//获取第 m 行的数据
     43                 //获取每列数据
     44                 Cell cell = row.getCell(0);
     45                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************申请/注册号
     46                     cell.setCellType(CellType.STRING);
     47                     filingNum = cell.getStringCellValue();
     48                     exContent = exContent + "&@#filingNum&@#" + filingNum;
     49                 }
     50                 cell = row.getCell(1);
     51                 String picPath = "D:/TradeMark/Tomcat8/webapps/ROOT/trademarkimage/ReferencePicture/" + fileName + "/" + sheetName;//定义图片存储地址
     52                 if(cell.getCellTypeEnum() == CellType.BLANK){//****************************************图片地址
     53                     cell.setCellType(CellType.STRING);
     54                     mark = picPath + "/" + (m+1) + "_" + 2 + ".jpg";
     55                     exContent = exContent + "&@#mark&@#" + mark;
     56                 }
     57                 cell = row.getCell(2);
     58                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************申请日期
     59                     if (cell.getCellTypeEnum() == CellType.STRING) {//判断单元格内容的类型
     60                         cell.setCellType(CellType.STRING);
     61                         filingDate = cell.getStringCellValue();
     62                         exContent = exContent + "&@#filingDate&@#" + filingDate;
     63                     }else{
     64                         cell.setCellType(CellType.NUMERIC);
     65                         date = cell.getDateCellValue();
     66                         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
     67                         filingDate = sdf.format(date);
     68                         exContent = exContent + "&@#filingDate&@#" + filingDate;
     69                     }
     70                 }else{
     71                     cell.setCellType(CellType.STRING);
     72                     filingDate = cell.getStringCellValue();
     73                     exContent = exContent + "&@#filingDate&@#" + filingDate;
     74                 }
     75                 cell = row.getCell(3);
     76                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************注册日期
     77                     if (cell.getCellTypeEnum() == CellType.STRING) {
     78                         cell.setCellType(CellType.STRING);
     79                         startDate = cell.getStringCellValue();
     80                         exContent = exContent + "&@#startDate&@#" + startDate;
     81                     }else{
     82                         cell.setCellType(CellType.NUMERIC);
     83                         date = cell.getDateCellValue();
     84                         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
     85                         startDate = sdf.format(date);
     86                         exContent = exContent + "&@#startDate&@#" + startDate;
     87                     }
     88                 }else{
     89                     cell.setCellType(CellType.STRING);
     90                     startDate = cell.getStringCellValue();
     91                     exContent = exContent + "&@#startDate&@#" + startDate;
     92                 }
     93                 cell = row.getCell(4);
     94                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************类型
     95                     cell.setCellType(CellType.STRING);
     96                     type = cell.getStringCellValue();
     97                     exContent = exContent + "&@#type&@#" + type;
     98                 }
     99                 cell = row.getCell(5);
    100                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************商品英文描述
    101                     cell.setCellType(CellType.STRING);
    102                     goodsDescriptionEN = cell.getStringCellValue();
    103                     exContent = exContent + "&@#goodsDescriptionEN&@#" + goodsDescriptionEN;
    104                 }else{
    105                     exContent = exContent + "&@#goodsDescriptionEN&@#" + goodsDescriptionEN;
    106                 }
    107                 cell = row.getCell(6);
    108                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************申请人
    109                     cell.setCellType(CellType.STRING);
    110                     properter = cell.getStringCellValue();
    111                     exContent = exContent + "&@#properter&@#" + properter;
    112                 }
    113                 cell = row.getCell(7);
    114                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************注册到期日
    115                     if (cell.getCellTypeEnum() == CellType.STRING) {
    116                         cell.setCellType(CellType.STRING);
    117                         endDate = cell.getStringCellValue();
    118                         exContent = exContent + "&@#endDate&@#" + endDate;
    119                     }else{
    120                         cell.setCellType(CellType.NUMERIC);
    121                         date = cell.getDateCellValue();
    122                         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    123                         endDate = sdf.format(date);
    124                         exContent = exContent + "&@#endDate&@#" + endDate;
    125                     }
    126                 }else{
    127                     cell.setCellType(CellType.STRING);
    128                     endDate = cell.getStringCellValue();
    129                     exContent = exContent + "&@#endDate&@#" + endDate;
    130                 }
    131                 cell = row.getCell(8);
    132                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************当前状态
    133                     cell.setCellType(CellType.STRING);
    134                     status = cell.getStringCellValue();
    135                     exContent = exContent + "&@#status&@#" + status;
    136                 }
    137                 cell = row.getCell(9);
    138                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************是否取消
    139                     cell.setCellType(CellType.STRING);
    140                     isCancel = cell.getStringCellValue();
    141                     exContent = exContent + "&@#isCancel&@#" + isCancel;
    142                 }
    143             }
    144         }
    145         return exContent;
    146     }

      4.解析Excel2007表格数据(xlsx格式)

      1 public static String getDataFromExcelXlsx(String filePath) throws Exception{
      2         //获取路径中的Excel表的文件名称
      3         File file = new File(filePath.trim());
      4         String fileName = file.getName();//文件名称
      5         fileName = fileName.substring(0, fileName.lastIndexOf(".")).replaceAll("\s*", "");
      6         String exContent = "";//定义接收循环表格的数据
      7         FileInputStream fis = null;//定义输出流
      8         Workbook workbook = null;//定义工作簿
      9         Sheet sheet = null;//定义sheet
     10         //根据扩展名判断解析Excel格式
     11         fis = new FileInputStream(filePath);
     12         workbook = new XSSFWorkbook(fis);//获取工作簿
     13         Map<String, PictureData> maplist = null;
     14         //开始遍历Excel表中多个sheet
     15         for(int i = 0; i < workbook.getNumberOfSheets(); i++){//工作簿中多个sheet,循环遍历出获取每个sheet表中数据
     16             sheet = workbook.getSheetAt(i);//获取sheet表
     17             String sheetName = sheet.getSheetName().replaceAll("\s*", "");//获取sheet名称
     18             maplist = getXlsxPicture((XSSFSheet)sheet);
     19             //取存图片
     20             try {
     21                 getExcelImage(maplist, fileName, sheetName);
     22             } catch (Exception e) {
     23                 e.printStackTrace();
     24             }
     25             //开始解析表格数据
     26             Date date;//定义所有日期
     27             //获取数据的总行数
     28             int totalRowNum = sheet.getLastRowNum();
     29             //定义获取的数据属性名称
     30             String filingNum = "";//申请/注册号
     31             String type = "";//类型
     32             String mark = "";//图样
     33             String properter = "";//申请人
     34             String filingDate = "";//申请日期
     35             String startDate = "";//开始日期
     36             String endDate = "";//结束日期
     37             String filingAddress = "";//申请地址
     38             String goodsDescriptionCN = "";//商品中文描述
     39             String goodsDescriptionEN = "";//商品英文描述
     40             for(int m = 1; m <= totalRowNum; m++){
     41                 Row row = sheet.getRow(m);//获取第 m 行的数据
     42                 //获取每列数据
     43                 Cell cell = row.getCell(1);
     44                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************申请/注册号
     45                     cell.setCellType(CellType.STRING);
     46                     filingNum = cell.getStringCellValue();
     47                     exContent = exContent +"&@#filingNum&@#"+filingNum;
     48                 }
     49                 cell = row.getCell(2);
     50                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************类型
     51                     cell.setCellType(CellType.STRING);
     52                     type = cell.getStringCellValue();
     53                     exContent = exContent + "&@#type&@#" + type;
     54                 }
     55                 cell = row.getCell(3);//此处图片得到的单元格内容为空值
     56                 String picPath = "D:/TradeMark/Tomcat8/webapps/ROOT/trademarkimage/ReferencePicture/" + fileName + "/" + sheetName;//定义图片存储地址
     57                 if(cell.getCellTypeEnum() == CellType.BLANK){//****************************************存储图片地址
     58                     cell.setCellType(CellType.STRING);
     59                     mark = picPath + "/" + (m+1) + "_" + 4 + ".jpg";
     60                     exContent = exContent + "&@#mark&@#" + mark;
     61                 }
     62                 cell = row.getCell(4);
     63                 String[] filingPerson;
     64                 String CNproperter = "";
     65                 String ENproperter = "";
     66                 String regp = "[^u4e00-u9fa5]";//定义中文正则表达式
     67                 String sp = "";
     68                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************申请人
     69                     cell.setCellType(CellType.STRING);
     70                     properter = cell.getStringCellValue();
     71                     sp = properter.replaceAll(regp, "");
     72                     if(!sp.equals("") && !sp.equals(null)){
     73                         if(properter.contains(";")){
     74                             filingPerson = properter.split(";");
     75                             CNproperter = filingPerson[0].toString();
     76                             ENproperter = filingPerson[1].toUpperCase();
     77                             exContent = exContent + "&@#CNproperter&@#" + CNproperter;
     78                             exContent = exContent + "&@#ENproperter&@#" + ENproperter;
     79                         }else if(properter.contains(";")){
     80                             filingPerson = properter.split(";");
     81                             CNproperter = filingPerson[0].toString();
     82                             ENproperter = filingPerson[1].toUpperCase();
     83                             exContent = exContent + "&@#CNproperter&@#" + CNproperter;
     84                             exContent = exContent + "&@#ENproperter&@#" + ENproperter;
     85                         }else{
     86                             CNproperter = properter;
     87                             exContent = exContent + "&@#CNproperter&@#" + CNproperter;
     88                             exContent = exContent + "&@#ENproperter&@#" + ENproperter;
     89                         }
     90                     }else{
     91                         ENproperter = properter;
     92                         exContent = exContent + "&@#CNproperter&@#" + CNproperter;
     93                         exContent = exContent + "&@#ENproperter&@#" + ENproperter;
     94                     }
     95                 }
     96                 cell = row.getCell(5);
     97                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************申请日期
     98                     if (cell.getCellTypeEnum() == CellType.STRING) {//判断单元格内容的数据类型
     99                         cell.setCellType(CellType.STRING);
    100                         filingDate = cell.getStringCellValue();
    101                         exContent = exContent + "&@#filingDate&@#" + filingDate;
    102                     }else{
    103                         cell.setCellType(CellType.NUMERIC);
    104                         date = cell.getDateCellValue();
    105                         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    106                         filingDate = sdf.format(date);
    107                         exContent = exContent + "&@#filingDate&@#" + filingDate;
    108                     }
    109                 }else{//申请日期单元格为空
    110                     cell.setCellType(CellType.STRING);
    111                     filingDate = cell.getStringCellValue();
    112                     exContent = exContent + "&@#filingDate&@#" + filingDate;
    113                 }
    114                 cell = row.getCell(6);
    115                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************注册日期
    116                     if (cell.getCellTypeEnum() == CellType.STRING) {
    117                         cell.setCellType(CellType.STRING);
    118                         startDate = cell.getStringCellValue();
    119                         exContent = exContent + "&@#startDate&@#" + startDate;
    120                     }else{
    121                         cell.setCellType(CellType.NUMERIC);
    122                         date = cell.getDateCellValue();
    123                         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    124                         startDate = sdf.format(date);
    125                         exContent = exContent + "&@#startDate&@#" + startDate;
    126                     }
    127                 }else{//注册日期单元格为空
    128                     cell.setCellType(CellType.STRING);
    129                     startDate = cell.getStringCellValue();
    130                     exContent = exContent + "&@#startDate&@#" + startDate;
    131                 }
    132                 cell = row.getCell(7);
    133                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************注册到期日
    134                     if (cell.getCellTypeEnum() == CellType.STRING) {
    135                         cell.setCellType(CellType.STRING);
    136                         endDate = cell.getStringCellValue();
    137                         exContent = exContent + "&@#endDate&@#" + endDate;
    138                     }else{
    139                         cell.setCellType(CellType.NUMERIC);
    140                         date = cell.getDateCellValue();
    141                         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    142                         endDate = sdf.format(date);
    143                         exContent = exContent + "&@#endDate&@#" + endDate;
    144                     }
    145                 }else{//注册到期日单元格为空
    146                     cell.setCellType(CellType.STRING);
    147                     endDate = cell.getStringCellValue();
    148                     exContent = exContent + "&@#endDate&@#" + endDate;
    149                 }
    150                 cell = row.getCell(8);
    151                 String[] address;//定义注册地址分割
    152                 String CNAddress = "";//定义中文地址
    153                 String ENAddress = "";//定义英文地址
    154                 String reg = "[^u4e00-u9fa5]";//定义中文正则表达式
    155                 String cc = "";
    156                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************注册地址
    157                     cell.setCellType(CellType.STRING);
    158                     filingAddress = cell.getStringCellValue();
    159                     cc = filingAddress.replaceAll(reg, "");
    160                     if(!cc.equals(null) && !cc.equals("")){
    161                         if(filingAddress.contains(";")){
    162                             address = filingAddress.split(";");
    163                             CNAddress = address[0].toString();//截取中文地址
    164                             ENAddress = address[1].toUpperCase();//截取英文地址并转换成大写
    165                             exContent = exContent + "&@#CNAddress&@#" + CNAddress;
    166                             exContent = exContent + "&@#ENAddress&@#" + ENAddress;
    167                         }else{
    168                             address = filingAddress.split(";");
    169                             CNAddress = address[0].toString();//截取中文地址
    170                             ENAddress = address[1].toUpperCase();//截取英文地址并转换成大写
    171                             exContent = exContent + "&@#CNAddress&@#" + CNAddress;
    172                             exContent = exContent + "&@#ENAddress&@#" + ENAddress;
    173                         }
    174                     }else{
    175                         ENAddress = filingAddress;
    176                         exContent = exContent + "&@#CNAddress&@#" + CNAddress;
    177                         exContent = exContent + "&@#ENAddress&@#" + ENAddress;
    178                     }
    179                 }else{//注册地址为空
    180                     exContent = exContent + "&@#CNAddress&@#" + CNAddress;
    181                     exContent = exContent + "&@#ENAddress&@#" + ENAddress;
    182                 }
    183                 cell = row.getCell(9);
    184                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************商品中文描述
    185                     cell.setCellType(CellType.STRING);
    186                     goodsDescriptionCN = cell.getStringCellValue();
    187                     exContent = exContent + "&@#goodsDescriptionCN&@#" + goodsDescriptionCN;
    188                 }else{//商品中文描述为空
    189                     exContent = exContent + "&@#goodsDescriptionCN&@#" + goodsDescriptionCN;
    190                 }
    191                 cell = row.getCell(10);
    192                 if(cell.getCellTypeEnum() != CellType.BLANK){//****************************************商品英文描述
    193                     cell.setCellType(CellType.STRING);
    194                     goodsDescriptionEN = cell.getStringCellValue();
    195                     exContent = exContent + "&@#goodsDescriptionEN&@#" + goodsDescriptionEN;
    196                 }else{//商品英文描述为空
    197                     exContent = exContent + "&@#goodsDescriptionEN&@#" + goodsDescriptionEN;
    198                 }
    199             }
    200         }
    201         return exContent;
    202     }

    上述解析文档方法工具方法:

     1 /**
     2      * 一键解析所有文档工具方法,获取多层文件夹下全部的最终文件
     3      * @param filePath
     4      * @param listName
     5      */
     6     public static void getAllFiles(String filePath, ArrayList<String> listName){
     7         File file =  new File(filePath);
     8         File[] files = file.listFiles();
     9         String[] names = file.list();
    10         if (names != null) {
    11             String[] completNames = new String[names.length];
    12             for(int i = 0; i < names.length; i++){
    13                 completNames[i] = filePath + names[i];
    14             }
    15             listName.addAll(Arrays.asList(completNames));
    16         }
    17         for(File f : files){
    18             if (f.isDirectory()) {
    19                 getAllFiles(f.getAbsolutePath()+"\", listName);
    20             }
    21         }
    22     }
    23 
    24 
    25 
    26 /**
    27      * 拷贝文件,文件夹及子文件夹
    28      * @param data
    29      * @param dest
    30      */
    31     public static void copyFolderAndFiles(String oldPath, String newPath){
    32         try {
    33             File file = new File(newPath);
    34             if(!file.exists()){
    35                 file.mkdirs();
    36             }
    37             File oFile = new File(oldPath);
    38             String[] files = oFile.list();
    39             File temp = null;
    40             for(int i = 0; i < files.length; i++){
    41                 if(oldPath.endsWith(File.separator)){
    42                     temp = new File(oldPath+files[i]);
    43                 }else{
    44                     temp = new File(oldPath+File.separator+files[i]);
    45                 }
    46                 if(temp.isFile()){//判断是否为文件
    47                     FileInputStream fis = new FileInputStream(temp);
    48                     FileOutputStream fos = new FileOutputStream(newPath + "/" + (temp.getName()).toString());
    49                     byte[] bs = new byte[1024*5];
    50                     int len;
    51                     while((len=fis.read(bs)) != -1){
    52                         fos.write(bs, 0, len);
    53                     }
    54                     fos.flush();
    55                     fos.close();
    56                     fis.close();
    57                 }
    58                 if(temp.isDirectory()){
    59                     copyFolderAndFiles(oldPath+"/"+files[i], newPath+"/"+files[i]);
    60                 }
    61             }
    62         } catch (FileNotFoundException e) {
    63             // TODO Auto-generated catch block
    64             e.printStackTrace();
    65         } catch (IOException e) {
    66             // TODO Auto-generated catch block
    67             e.printStackTrace();
    68         }
    69     }

    Excel表格工具方法(图片)

     1 /**
     2      * 解析获取2003版xls文件的图片
     3      * @param sheet
     4      * @return
     5      */
     6     public static Map<String, PictureData> getXlsPicture(HSSFSheet sheet){
     7         Map<String, PictureData> map = new HashMap<String, PictureData>();
     8         List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();
     9         for(HSSFShape shape : list){
    10             if(shape instanceof HSSFPicture){
    11                 HSSFPicture picture = (HSSFPicture) shape;
    12                 HSSFClientAnchor anchor = (HSSFClientAnchor) picture.getAnchor();
    13                 PictureData data = picture.getPictureData();
    14                 String key = (anchor.getRow1()+1) + "_" + (anchor.getCol1()+1);
    15                 map.put(key, data);
    16             }
    17         }
    18         return map;
    19     }
    20     
    21     
    22     public static Map<String, PictureData> getXlsPicture2(HSSFSheet sheet, HSSFWorkbook workbook){
    23         Map<String, PictureData> map = new HashMap<String, PictureData>();
    24         List<HSSFPictureData> list = workbook.getAllPictures();
    25         if(!list.isEmpty()){
    26             for(HSSFShape shape : sheet.getDrawingPatriarch().getChildren()){
    27                 HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
    28                 if(shape instanceof HSSFPicture){
    29                     HSSFPicture picture = (HSSFPicture) shape;
    30                     int pictureIndex = picture.getPictureIndex() - 1;
    31                     HSSFPictureData pictureData = list.get(pictureIndex);
    32                     String picIndex = String.valueOf(anchor.getRow1()+1) + "_" + String.valueOf(anchor.getCol1()+1);
    33                     map.put(picIndex, pictureData);
    34                 }
    35             }
    36             return map;
    37         }else{
    38             return map;
    39         }
    40     } 
    41     
    42     
    43     
    44     /**
    45      * 解析获取2007版xlsx文件的图片
    46      * @param sheet
    47      * @return
    48      */
    49     public static Map<String, PictureData> getXlsxPicture(XSSFSheet sheet){
    50         Map<String, PictureData> map = new HashMap<String, PictureData>();
    51         List<POIXMLDocumentPart> list = sheet.getRelations();
    52         for(POIXMLDocumentPart part : list){
    53             if(part instanceof XSSFDrawing){
    54                 XSSFDrawing drawing = (XSSFDrawing) part;
    55                 List<XSSFShape> shapes = drawing.getShapes();
    56                 for(XSSFShape shape : shapes){
    57                     XSSFPicture picture = (XSSFPicture) shape;
    58                     XSSFClientAnchor anchor = picture.getPreferredSize();
    59                     CTMarker marker = anchor.getFrom();
    60                     String key = (marker.getRow()+1) + "_" + (marker.getCol()+1);
    61                     map.put(key, picture.getPictureData());
    62                 }
    63             }
    64         }
    65         return map;
    66     }
    67     
    68     /**
    69      * 解析输出保存获取的图片
    70      * @throws Exception 
    71      */
    72     public static void getExcelImage(Map<String, PictureData> sheetlist, String fileName, String sheetName) throws Exception{
    73         Object[] key = sheetlist.keySet().toArray();
    74         String filepath = "";
    75         for(int i = 0; i < sheetlist.size(); i++){
    76             PictureData data = sheetlist.get(key[i]);
    77             String picName = key[i].toString();
    78             byte[] bs = data.getData();
    79             String path = "D:/TradeMark/Tomcat8/webapps/ROOT/trademarkimage/ReferencePicture/" + fileName + "/" + sheetName;
    80             filepath = path + "/" + picName + ".jpg";
    81             File file = new File(path);
    82             if(!file.exists()){
    83                 file.mkdirs();
    84             }
    85             //保存输出图片
    86             FileOutputStream fos = new FileOutputStream(filepath);
    87             fos.write(bs);
    88             fos.close();
    89         }
    90     }
  • 相关阅读:
    JavaScript中出现这个statement expected
    java: 非法字符: 'ufeff' 需要class, interface或enum
    码云如何配置公钥
    Git命令
    配置git签名
    Scanner练习总结
    怎么将项目在Eclipse中生成doc文档
    java文件使用命令生成doc文档
    包机制总结
    变量和运算符总结
  • 原文地址:https://www.cnblogs.com/xiaoyue1606bj/p/11576876.html
Copyright © 2020-2023  润新知