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     }

 

posted @ 2019-09-24 10:28  奋进的小土豆  阅读(1459)  评论(0编辑  收藏  举报