在做项目的过程中,经常需要处理excel数据,特别是和业务人员配合时,业务人员喜欢使用excel处理一些数据,然后交给我们技术人员进行程序处理。利用POI读取写入excel数据,是经常使用的一个情景。本文介绍的是另外一种情景,是把excel表中的数据作为配置文件,也就是数据是键值对的情景。这种数据可以在java程序中保存为properties文件或者保存到Map中,然后在程序中使用这些数据。

1 数据在excel中的处理

键值对类型的数据在excel中,键和值各占一列,比如键在A列,对应的值在B列。我们可以把C列第一行的数据设置为‘=CONCATENATE(B1,"=",C1)’,比如键为username,值为zhangsan,则C列第一行显示的数据就是username=zhangsan,C列其他数据可以直接拷贝第一行数据得到。都是左边是键,右边是值,中间是等号的数据。C列的数据就是我们得到键值对数据。

2 properties文件的读取

在java程序中,新建一个properties文件(以properties为后缀的文件),然后直接将excel中的C列数据copy到properties文件中即可。这样就得到了properties配置文件。

Properties文件的读取。主要利用Properties类的方法。

Properties dbcfgProp=new Properties();

//Properties2Map是程序所在类的名称

Properties2Map properties2Map=new Properties2Map();

InputStream is=properties2Map.getClass().getResourceAsStream("/dbconfig.properties");

dbcfgProp.load(is);

//得到username对应的值

System.out.println(dbcfgProp.getProperty("username"));

3 properties数据存入map中

将properties文件的key存到map中的key,对应的value存入map中的value。具体程序如下。

Enumeration propertyNames = dbcfgProp.propertyNames();

while(propertyNames.hasMoreElements()){

 String key=propertyNames.nextElement().toString();

 String value=dbcfgProp.getProperty(key);

 dbcfgMap.put(key,value);

}

4 完整的程序

public class Properties2Map {

  public static void main(String[] args) {

    Properties2Map properties2Map=new Properties2Map();

    Properties dbcfgPro = new Properties();

    InputStream dbcfg_in = properties2Map.getClass().getResourceAsStream("/dbcfg.properties");

    BufferedReader bf = new BufferedReader(new    InputStreamReader(dbcfg_in));

    Map<String, String> dbcfgMap=new HashMap<>();

    try {

      dbcfgPro.load(bf);

      Enumeration propertyNames = dbcfgPro.propertyNames();

      while(propertyNames.hasMoreElements()){

       String key=propertyNames.nextElement().toString();

           String value=dbcfgPro.getProperty(key);

        dbcfgMap.put(key,value);

      }

    } catch (IOException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

    }

    //打印出来与excel比对

    for (String key : dbcfgMap.keySet()) {

    System.out.println(key+"="+dbcfgMap.get(key));

    }

  }

}

5 注意的问题。

在整个处理过程中,主要的碰到的问题是properties文件的中文乱码问题。一般我们的字符编码都使用UTF-8,可以设置properties文件的编码为UTF-8。在eclipse中,依次选择windows--Preferences--General--Content Types,在右侧选择Text--Java Properties File,然后在编码方式中填写UTF-8,点击UPDATE,然后确定。这样就设置了properties的编码方式。

再一个就是

BufferedReader

bf = new BufferedReader(new    InputStreamReader(dbcfg_in));

利用BufferedReader对InputStream进行一次读取,BufferedReader是读取字符串的类,能够避免乱码问题。

在处理过程中还碰到一个文件,就是excel数据copy到properties文件中后,有文件的直接把中文转变为ASCII码,有的就没有转换,具体原因也不是太了解。对于转换为ASCII码的,可以不用BufferedReader处理,也不会出现乱码,但是没有转换的,必须加上BufferedReader处理,否则会出现乱码。

excel中的数据导出为properties和map的方法的更多相关文章

  1. 使用OpenXml把Excel中的数据导出到DataSet中

    public class OpenXmlHelper { /// <summary> /// 读取Excel数据到DataSet中,默认读取所有Sheet中的数据 /// </sum ...

  2. 使用JDBC+POI把Excel中的数据导出到MySQL

    POI是Apache的一套读MS文档的API,用它还是可以比较方便的读取Office文档的.目前支持Word,Excel,PowerPoint生成的文档,还有Visio和Publisher的. htt ...

  3. 2019-03-20 用SSIS把Excel中的数据导出来保存到SQLServer中

    Control Flow 1.配置 好 图形 2.去变量那 配置好 文件路径 和 存储过程 3.在SQL Server创建对应的存储过程,该存储过程的功能是每次导入是清空原有的数据 4.如果不懂的参考 ...

  4. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

  5. 【转】c# winform DataGridView导出数据到Excel中,可以导出当前页和全部数据

    准备工作就是可以分页的DataGridView,和两个按钮,一个用来导出当前页数据到Excel,一个用来导出全部数据到Excel 没有使用SaveFileDialog,但却可以弹出保存对话框来 先做导 ...

  6. 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel

    机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...

  7. Qt中将QTableView中的数据导出为Excel文件

    如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...

  8. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  9. WPF-将DataGrid控件中的数据导出到Excel

    原文:WPF-将DataGrid控件中的数据导出到Excel 导出至Excel是非常常见,我们可以用很多类库,例如Aspose.NOPI.Interop,在这里我们使用微软自家的工具.我的WPF绑定的 ...

随机推荐

  1. vue路由对象($route)参数简介

    路由对象在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新. so , 路由对象暴露了以下属性: 1.$rout ...

  2. CentOS上安装RabbitMQ

    所需环境 操作系统:Centos服务一台 网络环境:可以访问公网 安装Erlang RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby ...

  3. bootstrap轮播组件之“如何关闭自动轮播”

    在一个页面里使用多个bootstrap轮播组件的时候,如果还让所有轮播图都自动轮播的话,整个画面都在动,会给用户一种很不好的体验感受.所以,需要关闭轮播图的自动轮播. 关闭方法:去除如下属性即可: d ...

  4. 51Nod 1080 两个数的平方和(数论,经典题)

    1080 两个数的平方和 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果 ...

  5. HDU 1004 Let the Balloon Rise【STL<map>】

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  6. HDU1061-Rightmost Digit-规律题,快速幂

    Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. UEP-弹窗

    注意:弹出窗口Action中的dataWrap属性要加上set方法 默认情况下为GET方式传递参数,此方法对参数的长度有限制,若是长度超过范围的话请使用POST方式 function testPopW ...

  8. [国嵌攻略][152][I2C总线介绍]

    IIC电气特性 I2C(inter intergrated circuit)总线是由philps公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线: SDA:ser ...

  9. screen乱码问题

    在 .screenrc下设置: defencoding gbk encoding gbk gbk detatch+reattach后,设置失效,这时可以直接用命令来配置: ctrl+a :defenc ...

  10. spring cloud-zuul的Filter详解

    在前面我们使用zuul搭建了网关http://blog.csdn.net/liuchuanhong1/article/details/59056278 关于网关的作用,这里就不再次赘述了,我们今天的重 ...