文档章节

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

菩提_
 菩提_
发布于 2016/02/16 11:52
字数 407
阅读 84
收藏 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
朝阳
程序员
使用 Apache POI 处理 Microsoft Office 文档

原文同步至:http://www.waylau.com/apache-poi-handle-microsoft-documents/ POI 概述 Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准...

waylau
2015/02/01
0
0
Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者...

MiniBu
2015/04/08
0
0
JAVA使用POI操作excel

一直想写一个poi的使用的总结,话说我第一份正式工作接到的第一个工作就是当时TL让我去整理项目的数据字典,即把内容插入到CSV上,然后把csv的内容插入到数据库中,而且我印象极深的当时使用...

王小明123
2013/01/09
0
12
java excel 的POI导入

Excel导入: 使用apache 的POI进行excel的导入, 1. pom.xml中添加依赖 commons-fileupload commons-fileupload 1.3.2 org.apache.poi poi-oox...

u010398771
04/17
0
0
基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能。过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好。 序 由于 poi 本身只是针对于 ...

倚楼听风雨_
2017/05/22
0
22

没有更多内容

加载失败,请刷新页面

加载更多

下一页

49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
48分钟前
0
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
0
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
0
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部