文档章节

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

说多了都是泪呀
 说多了都是泪呀
发布于 2016/02/16 11:52
字数 407
阅读 125
收藏 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();
    }
  }

}





© 著作权归作者所有

说多了都是泪呀
粉丝 3
博文 114
码字总数 24591
作品 0
朝阳
程序员
私信 提问
加载中

评论(0)

Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

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

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

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

IBMdW
2012/10/26
2.3K
0
Java读取Excel数据:基于Apache POI(一)

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/85302347 Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Exc...

zhangphil
2018/12/27
0
0
使用 Apache 的 POI 和 HSSF 将 Excel 电子表格数据加载到 DB2

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

红薯
2008/12/05
992
0
Java集成pageoffice导出Excel

一、需求介绍   当前B/S模式已成为应用开发的主流,而在开发企业办公系统的过程中,常常有客户这样子要求:把系统数据库中的数据导出到Excel,用户查看报表时直接用Excel打开。或者是:用户...

qianxi
01/15
145
0

没有更多内容

加载失败,请刷新页面

加载更多

IntelliJ 安装 Python 插件

运行 IntelliJ,然后在 IntelliJ 的设置中找到 插件。 然后在插件中搜索 Python 如果你没有安装的话,你应该是没有办法找到的。 你可以选择搜索 MarketPlace 选择官方的插件进行安装就可以了...

honeymoose
9分钟前
4
0
记一次element ui table 数据改变UI没渲染的坑

我要根据外界的值来判断我显示的table是单选还是多选,但是props的值变了UI却一直没什么反应,后来采用了强制刷新,在组件上加了一个:key= XXX,这个key根据外界的值得变化而变化,问题解决...

osc_5p8bxoq2
9分钟前
6
0
ASP.NET Core MVC如何上传文件及处理大文件上传

用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MV...

osc_yq7pxbpa
10分钟前
8
0
ASP.NET Core MVC如何上传文件及处理大文件上传

用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MV...

osc_dihgscoq
12分钟前
9
0
马斯克的宇宙飞船爆炸了!但不会影响SpaceX的载人发射

  该炸的 Starship 原型机总是会炸的,该进行的载人任务也总是会发射的。   承载着 SpaceX 未来星际旅行梦想的 Starship 宇宙飞船原型机再一次在测试中以全部炸毁收场。      但需要...

osc_35ne77sz
13分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部