文档章节

java通过apache POI读取Excel文件生成JSON数据

菩提_
 菩提_
发布于 2016/02/16 11:52
字数 407
阅读 91
收藏 3
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
            <scope>test</scope>
        </dependency>
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;


public class CreateProvinceJsonUtil {

  /**
   * @return
   * @throws FileNotFoundException
   * @description: 根据excel文件生成对应的json字符串
   */
  public static String createJson() throws FileNotFoundException {
    InputStream is = new FileInputStream("D:\\a.xls");
    StringBuilder buffer = new StringBuilder();
    try {
      Workbook workbook = new HSSFWorkbook(is);
      HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);
      String key = "";
      String value = "";
      buffer.append("[");
      for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
        HSSFRow row = sheet.getRow(i);
        for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
          HSSFCell cell = row.getCell(j);
          if (i == 0) {
            if (j == 0) {
              key = cell.getStringCellValue();
            }
            if (j == 1) {
              value = cell.getStringCellValue();
            }
          } else {
            if (j == 0) {
              buffer.append("{\"").append(key).append("\"").append(":").append("\"").append(getCellValue(cell)).append("\"").append(",");
            }
            if (j == 1) {
              buffer.append("\"").append(value).append("\"").append(":").append("\"").append(getCellValue(cell)).append("\"}");
            }

          }
        }
        if (sheet.getPhysicalNumberOfRows() - 1 != i && i != 0) {
          buffer.append(",");
        }
        buffer.append("\r");
      }
      buffer.append("]");
    } catch (IOException e) {
      System.out.println("出现异常");
      e.printStackTrace();
    }

    return buffer.toString();
  }

  /**
   * 获取当前单元格内容
   */
  private static String getCellValue(Cell cell) {
    String value = "";
    if (cell != null) {
      switch (cell.getCellType()) {
        case Cell.CELL_TYPE_NUMERIC:
          if (HSSFDateUtil.isCellDateFormatted(cell)) { //日期类型 
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
            value = sdf.format(date);
          } else {
            Integer data = (int) cell.getNumericCellValue();
            value = data.toString();
          }
          break;
        case Cell.CELL_TYPE_STRING:
          value = cell.getStringCellValue();
          break;
        case Cell.CELL_TYPE_BOOLEAN:
          Boolean data = cell.getBooleanCellValue();
          value = data.toString();
          break;
        case Cell.CELL_TYPE_ERROR:
          System.out.println("单元格内容出现错误");
          break;
        case Cell.CELL_TYPE_FORMULA:
          value = String.valueOf(cell.getNumericCellValue());
          if (value.equals("NaN")) {// 如果获取的数据值非法,就将其装换为对应的字符串 
            value = cell.getStringCellValue();
          }
          break;
        case Cell.CELL_TYPE_BLANK:
          System.out.println("单元格内容 为空值 ");
          break;
        default:
          value = cell.getStringCellValue();
          break;
      }
    }
    return value;
  }

  /**
   * @param args
   * @throws IOException
   * @description: 将生成的字符串输出到一个文件中
   */
  public static void main(String[] args) throws IOException {
    String str = createJson();
    OutputStream os = new FileOutputStream("D:\\provinceCode.json");
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
    ObjectOutputStream oos = null;
    try {
      bw.write(str);
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      bw.close();
      os.close();
    }
  }

}





© 著作权归作者所有

共有 人打赏支持
菩提_
粉丝 2
博文 113
码字总数 24338
作品 0
朝阳
程序员
私信 提问
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0
使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

简介: 在实际的项目开发中经常会遇到需要在不同的操作系统平台上统计 Microsoft Office 系列文档页数的要求。Apache POI 提供了一套完整的用于访问微软格式文档的 Java API。但是 Apache P...

IBMdW
2012/10/26
1K
0
使用 Apache 的 POI 和 HSSF 将 Excel 电子表格数据加载到 DB2

简介 在 developerWorks DB2 上本文的 先行篇 中,我们研究了 Apache 的 POI 项目的开放源代码产品。期间,我们开始在了解 SQL 的技术专家和通常将电子表格选作工具的商务专家之间架起一座桥...

红薯
2008/12/05
918
0
POI框架:Java程序读取Excel

What:POI是什么? Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 HOW:如何使用java程序读取Excel文件中的内容? 1.坐标(导...

aboyliupu
07/31
0
0
Java Apache POI 操作 Excel 导出

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82655653 Java Apache POI 操作 Excel 导出 Java 可以通过 Apache POI......

asing1elife
09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx-使用简单总结

下载nginx:http://nginx.org/en/download.html 下载后解压 有很多种方法启动nginx (1)直接双击nginx.exe, 双击后一个黑色的弹窗一闪而过 (2)打开cmd命令窗口,切换到nginx解压目录下, 输入...

Java搬砖工程师
18分钟前
3
0
通过修改控制文件scn推进数据库scn

在数据库遇到ora-600[2662],scn不一致(又没有日志)的时候,我们首先想到的就是去推进数据库的scn,让数据库能够open起来,抢救其中的数据,但是由于各种乱用的情况,oraclescn的pach出来后(11.2...

突突突酱
19分钟前
1
0
Underscore _.template 方法使用详解

https://github.com/hanzichi/underscore-analysis/issues/26 前文 浅谈 Web 中前后端模板引擎的使用 我们简单了解了模板引擎在前后端的应用场景,本文重点深入 Underscore 的模板函数 _.te...

壹峰
20分钟前
1
0
前端缩短数字的长度解决方案[10进制转化为64进制]

function string10to64 (number) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$'.split(''), radix = chars.length, qutient =......

未来cc
20分钟前
1
0
十年架构师不到400行手写一个Spring MVC

首先,我们先来介绍一下Spring的三个阶段,配置阶段、初始化阶段和运行阶段(如图): 配置阶段:主要是完成application.xml配置和Annotation配置。 初始化阶段:主要是加载并解析配置信息,...

小刀爱编程
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部