zoukankan      html  css  js  c++  java
  • apache poi 读取xlsx并导出为json(没考虑xls)

    1、用到的jar包:fastjson-1.2.9、poi(poi-3.15、poi-ooxml-3.15、poi-ooxml-schemas-3.15、xmlbeans-2.6.0、commons-collections4-4.1)

    很简单,直接上代码:

    2、导出类,两个WrapAll类字符串数组都是excel文件名,如item.xlsx,写死的读取sheet 第 0 页

    ParseJson方法导出为json,list是行,Map key-value:字段名-值

      1 package com.ojcgame.warp;
      2 
      3 import java.io.FileInputStream;
      4 import java.io.FileWriter;
      5 import java.io.IOException;
      6 import java.io.InputStream;
      7 import java.lang.reflect.InvocationTargetException;
      8 import java.util.ArrayList;
      9 import java.util.HashMap;
     10 import java.util.List;
     11 import java.util.Map;
     12 
     13 import org.apache.poi.hssf.usermodel.HSSFCell;
     14 import org.apache.poi.xssf.usermodel.XSSFCell;
     15 import org.apache.poi.xssf.usermodel.XSSFRow;
     16 import org.apache.poi.xssf.usermodel.XSSFSheet;
     17 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     18 import org.eclipse.core.runtime.IProgressMonitor;
     19 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
     20 import org.eclipse.jface.operation.IRunnableWithProgress;
     21 
     22 import com.alibaba.fastjson.JSON;
     23 import com.ojcgame.common.EnvironmentManager;
     24 import com.ojcgame.common.OJCUtils;
     25 
     26 public class WarpDataManager {
     27     String[] filesArr;
     28 
     29     public void WarpAll(String[] files) {
     30         filesArr = files;
     31         ProgressMonitorDialog progress = new ProgressMonitorDialog(null);
     32         IRunnableWithProgress progressTask = new IRunnableWithProgress() {
     33             @Override
     34             public void run(IProgressMonitor monitor)
     35                     throws InvocationTargetException, InterruptedException {
     36                 monitor.beginTask("正在导出数据", IProgressMonitor.UNKNOWN);
     37                 WarpAll(filesArr, monitor);
     38             }
     39         };
     40 
     41         try {
     42             progress.run(true, false, progressTask);
     43         } catch (InvocationTargetException e) {
     44             e.printStackTrace();
     45         } catch (InterruptedException e) {
     46             e.printStackTrace();
     47         } finally {
     48             filesArr = null;
     49         }
     50     }
     51 
     52     @SuppressWarnings("deprecation")
     53     private void WarpAll(String[] files, IProgressMonitor monitor) {
     54         InputStream is = null;
     55         XSSFWorkbook xssfWorkbook = null;
     56         List<String> titles = null;
     57         Map<String, Object> oneCellData = null;
     58         List<Map<String, Object>> AllDataList = null;
     59         int fileIndex = 0;
     60         try {
     61             for (int f = 0, fLength = files.length; f < fLength; ++f) {
     62                 fileIndex = f;
     63                 // System.out.println("正在尝试导出:" + files[f]);
     64                 monitor.subTask("尝试导出:" + files[f]);
     65                 is = new FileInputStream(EnvironmentManager.getInstance()
     66                         .getDataSourcesFloderPath() + "\" + files[f]);
     67                 xssfWorkbook = new XSSFWorkbook(is);
     68                 // 读取sheet1
     69                 XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
     70                 if (xssfSheet == null)
     71                     continue;
     72 
     73                 titles = new ArrayList<String>();
     74                 AllDataList = new ArrayList<Map<String, Object>>();
     75                 // 先读取字段
     76                 XSSFRow titleRow = xssfSheet.getRow(0);
     77                 for (int rowIndex = 0, mLength = titleRow.getLastCellNum() + 1; rowIndex < mLength; ++rowIndex) {
     78                     if (null == titleRow.getCell(rowIndex)
     79                             || titleRow.getCell(rowIndex).getCellType() == HSSFCell.CELL_TYPE_BLANK) {
     80                         break;
     81                     } else {
     82                         try {
     83                             // System.out.println(titles.get(cellNum) + "---"
     84                             // + xssfCell.getStringCellValue());
     85                             titles.add(titleRow.getCell(rowIndex)
     86                                     .getStringCellValue());
     87                         } catch (IllegalStateException e) {
     88                             // System.out.println("rowIndex number:" + rowIndex
     89                             // + " ---- " + files[f]);
     90                             // System.out.println(titles.get(cellNum) + "---"
     91                             // + xssfCell.getNumericCellValue());
     92                             titles.add(titleRow.getCell(rowIndex)
     93                                     .getNumericCellValue() + "");
     94                         }
     95                     }
     96                 }
     97                 // System.out.println(xssfSheet
     98                 // .getLastRowNum() + 1);
     99                 // 读取行
    100                 for (int rowNum = 2, rLength = xssfSheet.getLastRowNum() + 1; rowNum < rLength; ++rowNum) {
    101                     XSSFRow xssfRow = xssfSheet.getRow(rowNum);
    102                     if (xssfRow == null) {
    103                         continue;
    104                     }
    105                     oneCellData = new HashMap<String, Object>();
    106                     // 读取列
    107                     for (int cellNum = 0; cellNum < titles.size(); ++cellNum) {
    108                         XSSFCell xssfCell = xssfRow.getCell(cellNum);
    109                         if (null == xssfCell)
    110                             continue;
    111 
    112                         if (xssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
    113                             // System.out.println(titles.get(cellNum) + "---"
    114                             // + xssfCell.getNumericCellValue());
    115                             oneCellData.put(titles.get(cellNum),
    116                                     xssfCell.getNumericCellValue());
    117                         } else if (xssfCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
    118                             // System.out.println(titles.get(cellNum) + "---"
    119                             // + xssfCell.getStringCellValue());
    120                             oneCellData.put(titles.get(cellNum),
    121                                     xssfCell.getStringCellValue());
    122                         } else if (xssfCell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
    123                             // System.out.println(cellNum + "--- kong=======" +
    124                             // rowNum);
    125                             // System.out
    126                             // .println(titles.get(cellNum) + "--- kong");
    127                             oneCellData.put(titles.get(cellNum), "");
    128                         } else if (xssfCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
    129                             try {
    130                                 // System.out.println(titles.get(cellNum) +
    131                                 // "---"
    132                                 // + xssfCell.getStringCellValue());
    133                                 oneCellData.put(titles.get(cellNum),
    134                                         xssfCell.getStringCellValue());
    135                             } catch (IllegalStateException e) {
    136                                 // System.out.println(titles.get(cellNum) +
    137                                 // "---"
    138                                 // + xssfCell.getNumericCellValue());
    139                                 oneCellData.put(titles.get(cellNum),
    140                                         xssfCell.getNumericCellValue());
    141                             }
    142                         }
    143                     }
    144 
    145                     AllDataList.add(oneCellData);
    146                 }
    147 
    148                 if (null != xssfWorkbook)
    149                     xssfWorkbook.close();
    150                 if (null != is)
    151                     is.close();
    152 
    153                 ParseJson(AllDataList, OJCUtils.GetFileName(files[f], ".xlsx"));
    154 
    155                 monitor.worked(f + 1);
    156             }
    157 
    158         } catch (Exception e) {
    159             e.printStackTrace();
    160             OJCUtils.ShowDialog("导出失败:" + files[fileIndex]);
    161         } finally {
    162             monitor.done();
    163             try {
    164                 if (null != xssfWorkbook)
    165                     xssfWorkbook.close();
    166             } catch (IOException e) {
    167                 e.printStackTrace();
    168                 OJCUtils.ShowDialog("导出失败:" + files[fileIndex]);
    169             } finally {
    170                 try {
    171                     if (null != is)
    172                         is.close();
    173                 } catch (Exception e) {
    174                     e.printStackTrace();
    175                     OJCUtils.ShowDialog("导出失败:" + files[fileIndex]);
    176                 }
    177             }
    178         }
    179     }
    180 
    181     private void ParseJson(List<Map<String, Object>> pContents, String pFileName) {
    182         String jsonStr = JSON.toJSONString(pContents, true);
    183         if (null == jsonStr || jsonStr.isEmpty()) {
    184             return;
    185         }
    186         FileWriter writer = null;
    187         try {
    188             writer = new FileWriter(EnvironmentManager.getInstance()
    189                     .getDataTargetFloderPath() + "\" + pFileName + ".json");
    190             writer.write(jsonStr);
    191             writer.flush();
    192         } catch (Exception e) {
    193             e.printStackTrace();
    194             OJCUtils.ShowDialog("导出JSON失败:" + pFileName);
    195         } finally {
    196             try {
    197                 if (null != writer) {
    198                     writer.flush();
    199                     writer.close();
    200                 }
    201             } catch (Exception e) {
    202                 e.printStackTrace();
    203                 OJCUtils.ShowDialog("导出JSON失败:" + pFileName);
    204             }
    205         }
    206     }
    207 
    208 //    public static void main(String[] args) {
    209 //        ProgressMonitorDialog progress = new ProgressMonitorDialog(null);
    210 //        IRunnableWithProgress progressTask = new IRunnableWithProgress() {
    211 //            @Override
    212 //            public void run(IProgressMonitor monitor)
    213 //                    throws InvocationTargetException, InterruptedException {
    214 //                monitor.beginTask("正在导出数据", IProgressMonitor.UNKNOWN);
    215 //                WarpDataManager wdMgr = new WarpDataManager();
    216 //                wdMgr.WarpAll(new String[] { "skill.xlsx" }, monitor);
    217 //                monitor.done();
    218 //            }
    219 //        };
    220 //
    221 //        try {
    222 //            progress.run(true, false, progressTask);
    223 //        } catch (InvocationTargetException e) {
    224 //            e.printStackTrace();
    225 //        } catch (InterruptedException e) {
    226 //            e.printStackTrace();
    227 //        }
    228 //    }
    229 }
  • 相关阅读:
    2014.3.3 图像旋转方法
    2014.2.23 datagridview显示图片的方法
    2016.10.8 文件读取和两种模式写入
    2016.8.11 DataTable合并及排除重复方法
    2016.8.17服务器端数据库用户导入导出方法 expdp和impdp
    2016.8.11 禁用360进程防护功能
    2016.7.27 VS搜索正则表达式,在UltraEdit中可选用Perl正则引擎,按C#语法搜索
    2016.6.18主窗体、子窗体InitializeComponent()事件、Load事件发生顺序以及SeleChanged事件的发生
    delphi之猥琐的webserver实现
    HTTP协议中GET、POST和HEAD的介绍
  • 原文地址:https://www.cnblogs.com/verlout/p/5969569.html
Copyright © 2011-2022 走看看