Android开发实现读取excel数据并保存为xml的方法

本文实例讲述了Android开发实现读取excel数据并保存为xml的方法。分享给大家供大家参考,具体如下:

前阵子,公司请外面人翻译了一些android中values中的一些strings,然而保存的都是excel格式,如果单纯的将excel中的数据粘贴到指定的xml中的话,工作量非常的大,于是,自己写了个简单的demo,将excel中的数据读取并保存为xml对应的数据,下面的demo和图片展示:

1、数据保存在BeanValue中,包括key和value,方便后续数据读取

package cn.excel.parser;
public class BeanValue {
  private String key;
  private String Value;
  public BeanValue() {
  }
  public String getKey() {
    return key;
  }
  public void setKey(String key) {
    this.key = key;
  }
  public String getValue() {
    return Value;
  }
  public void setValue(String value) {
    Value = value;
  }
}

2、数据解析,包括测试,直接在main方法中进行

package cn.excel.parser;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class ReadExcelFile {
  private static final String SRC_FILE = "d://exceldoc/original/test.xls";
  public static void main(String[] args) {
    Map<Integer, Map<Integer, BeanValue>> mapList = ReadExcelFile();
    System.out.println("excel size= " + mapList.size() + " ");
    List<String> namelists = readCol5Name();
    System.out.println("namelists= " + namelists.size() + " ");
    writeXmlFile(mapList, namelists);
  }
  /**
   * 读取excel表名,并保存在List列表中
   * @return
   */
  private static List<String> readSheetName() {
    InputStream is = null;
    Workbook wb = null;
    java.util.List<String> list = null;
    try {
      is = new FileInputStream(SRC_FILE);
      if (null != is) {
        list = new ArrayList<>();
        wb = Workbook.getWorkbook(is);
        Sheet[] sheets = wb.getSheets();
        int sheetLen = sheets.length;
        for (int j = 0; j < sheetLen; j++) {
          list.add(sheets[j].getName());
        }// for
      }// if
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (BiffException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      if (null != wb) {
        wb.close();
      }
      if (null != is) {
        try {
          is.close();
        } catch (IOException e) {
        }
      }
    }
    return list;
  }
  /**
   * 读取第五列的标题名,并保持在List中
   * @return
   */
  private static List<String> readCol5Name() {
    InputStream is = null;
    Workbook wb = null;
    java.util.List<String> list = null;
    try {
      is = new FileInputStream(SRC_FILE);
      if (null != is) {
        list = new ArrayList<>();
        wb = Workbook.getWorkbook(is);
        Sheet[] sheets = wb.getSheets();
        int sheetLen = sheets.length;
        for (int j = 0; j < sheetLen; j++) {
          Sheet rs = wb.getSheet(j);
          Cell[] cell = rs.getRow(0);
          String packageName = cell[5].getContents();
          list.add(packageName);
          // System.out.println(packageName);
        }// for
      }// if
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (BiffException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      if (null != wb) {
        wb.close();
      }
      if (null != is) {
        try {
          is.close();
        } catch (IOException e) {
        }
      }
    }
    return list;
  }
  /**
   * Map<Integer, BeanValue>,保持单张表中第三行开始,第2列和第5列的值(TreeMap可以按顺序加载)
   * 返回Map<Integer, Map<Integer, BeanValue>>,保证Integer和表的索引一一对应
   * 也可保持为List<Map<Integer, BeanValue>>
   * @return
   */
  private static Map<Integer, Map<Integer, BeanValue>> ReadExcelFile() {
    InputStream is = null;
    Workbook wb = null;
    Map<Integer, Map<Integer, BeanValue>> mapList = null;
    Map<Integer, BeanValue> maps = null;
    java.util.List<Map<Integer, BeanValue>> list = null;
    WorkbookSettings woSettings = null;
    try {
      is = new FileInputStream(SRC_FILE);
      if (null != is) {
        mapList = new HashMap<Integer, Map<Integer, BeanValue>>();
        list = new ArrayList<>();
        woSettings = new WorkbookSettings();
        woSettings.setEncoding("ISO-8859-1");//设置编码格式
        wb = Workbook.getWorkbook(is, woSettings);
        Sheet[] sheets = wb.getSheets();
        int sheetLen = sheets.length;
        for (int j = 0; j < sheetLen; j++) {
          Sheet rs = wb.getSheet(j);
          int rowNum = rs.getRows();
          int colNum = rs.getColumns();
          maps = new TreeMap<>();
          for (int i = 2; i < rowNum; i++) {
            Cell[] cell = rs.getRow(i);
            if (cell[5].getContents() == null
                || cell[5].getContents().trim().equals("")) {
            } else {
              BeanValue beanValue = new BeanValue();
              beanValue.setKey(cell[2].getContents());
              beanValue.setValue(cell[5].getContents());
              maps.put(i, beanValue);
            }
          }
          if (maps.size() > 0) {
            mapList.put(j, maps);
            System.out.println(sheets[j].getName());
          }
          // list.add(maps);
        }// for
      }// if
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (BiffException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      if (null != wb) {
        wb.close();
      }
      if (null != is) {
        try {
          is.close();
        } catch (IOException e) {
        }
      }
    }
    return mapList;
  }
  /**
   * 返回DocumentBuilder
   * @return
   */
  public static DocumentBuilder getDocumentBuilder() {
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dbBuilder = null;
    try {
      dbBuilder = dbFactory.newDocumentBuilder();
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    }
    return dbBuilder;
  }
  /**
   * 将所读excel的数据写入xml中,并按<String></string>格式保存
   * @param mapList
   * @param nameList
   */
  private static void writeXmlFile(
      Map<Integer, Map<Integer, BeanValue>> mapList, List<String> nameList) {
    DocumentBuilder db = getDocumentBuilder();
    Document document = null;
    Iterator<Entry<Integer, Map<Integer, BeanValue>>> iteratorMap = mapList
        .entrySet().iterator();
    // int i = 0;
    while (iteratorMap.hasNext()) {
      Entry<Integer, Map<Integer, BeanValue>> entryMap = iteratorMap
          .next();
      int i = entryMap.getKey();
      Map<Integer, BeanValue> map = entryMap.getValue();
      document = db.newDocument();
      document.setXmlStandalone(true);
      Element resource = document.createElement("resource");//创建元素节点
      resource.setAttribute("xmlns:xliff",
          "urn:oasis:names:tc:xliff:document:1.2");
      document.appendChild(resource);//添加元素
      Iterator<Entry<Integer, BeanValue>> iterator = map.entrySet()
          .iterator();
      while (iterator.hasNext()) {
        Entry<Integer, BeanValue> entry = iterator.next();
        BeanValue beanValue = entry.getValue();
        String key = beanValue.getKey();
        String value = beanValue.getValue();
        if (value == null || value.trim().equals("")) {
        } else {
          Element string = document.createElement("string");
          string.setAttribute("name", key);
          string.appendChild(document.createTextNode(value));//添加值
          resource.appendChild(string);//添加子元素
        }
      }// while
      String nameStr = nameList.get(i);
      String packStr = nameStr.substring(0, nameStr.lastIndexOf("/"));
      String fileName = nameStr.substring(nameStr.lastIndexOf("/") + 1);
      File file = new File("d://exceldoc/" + packStr);
      if (!file.exists()) {
        file.mkdirs();
      }
      saveXmlData(document,packStr,fileName);
    }// while
  }
  private static void saveXmlData(Document document, String packStr,
      String fileName) {
    TransformerFactory tFactory = TransformerFactory.newInstance();
    try {
      Transformer tFTransformer = tFactory.newTransformer();
      tFTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
      tFTransformer.transform(new DOMSource(document),
          new StreamResult("d://exceldoc/" + packStr + "/"
              + fileName));
    } catch (TransformerConfigurationException e) {
      e.printStackTrace();
    } catch (TransformerException e) {
      e.printStackTrace();
    }
  }
}

提示:

1、需要引入的包:excel(jxl.jar)xml(dom4j-1.6.1.jar),excel解析poi-3.11-20141221.jar也可以;

2、读取excel会出现乱码问题,可通过WorkbookSettings进行编码格式转换;

3、以上demo针对本人读取的excel表格测试是可以的,具体需要根据你excel中的内容做相应变更即可,

但大体解析流程是一样的!

excel源数据表格:

保存为xml表格:

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson

在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat

XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress

XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作XML数据技巧总结》、《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android中使用sax解析xml文件的方法

    SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备. SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML 语法中的某部分,如果符合就会触发事件.所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口.下面是一些ContentHandler接口常用的方法: startDocument():当遇到文档的开头的时候,调用

  • 基于Android XML解析与保存的实现

    解析XML文件:在Android平台上可以使用SAX.DOM和Android附带的pull解析器解析XML文件:pull解析器提供了各种事件,使用parser.next()方法进入下一个元素并触发相应事件,pull解析器产生的事件是一个数字,可以通过switch对感兴趣的事件进行处理:通过paser.nextText()方法可以获取下一个Text类型的节点的值:http://xmlpull.org/xmlpull-website/impls.shtml; 读取XMLXmlPullParser p

  • android编程之xml文件读取和写入方法

    本文实例讲述了android编程之xml文件读取和写入方法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Eclipse 二.说明: 1.打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置 2.读取xml文件 三.xml文件格式: <?xml version="1.0" encoding="UTF-8" standalone="true"?> -<config> <titl

  • Android操作Excel文件的功能实现

    Android中操作Excel文件导出报表时主要采用开源库jxl,最早用在java上,但也可用于Android.与之类似的POI,因为依赖库众多,所以只能用于java,而不能用于Android. 使用jxl需要在Android工程中导入jxl.jar包,jxl可以完成Excel的基本读写操作,其支持与不支持的情况如下: 1.jxl只支持Excel2003格式,不支持Excel2007格式.即支持xls文件,不支持xlsx文件. 2.jxl不支持直接修改excel文件,但可通过复制新文件覆盖原文件

  • Android应用读取Excel文件的方法

    本文实例讲述了Android应用读取Excel文件的方法.分享给大家供大家参考,具体如下: ReadExcel.java文件: public class ReadExcel extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

  • android操作XML的几种方法总结

    XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现.其标准型,可靠性,安全性......毋庸置疑.在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件. 小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等. 在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等.

  • android通过jxl读excel存入sqlite3数据库

    复制代码 代码如下: package com.demo.day20140228; import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement; import jxl.Cell;import jxl.Sheet;import jx

  • Android 中读取Excel文件实例详解

    Android 中读取Excel文件实例详解 最近有个需求需要在app内置数据,新来的产品扔给了我两个Excel表格就不管了(两个表格格式还不统一...),于是通过度娘等方法找到了Android中读取Excel表格文件的一种方法,记录一下. 闲话一下Excel中工作簿和工作表的区别: 工作簿中包含有工作表.工作簿可以由一张或多张工作表组成,一个工作簿就是一个EXCEL表格文件. 好了,开始读取表格文件吧. 前提 首先,我们假设需要读取的表格文件名字为test.xls, 位于assets根目录下.

  • Android开发实现读取excel数据并保存为xml的方法

    本文实例讲述了Android开发实现读取excel数据并保存为xml的方法.分享给大家供大家参考,具体如下: 前阵子,公司请外面人翻译了一些android中values中的一些strings,然而保存的都是excel格式,如果单纯的将excel中的数据粘贴到指定的xml中的话,工作量非常的大,于是,自己写了个简单的demo,将excel中的数据读取并保存为xml对应的数据,下面的demo和图片展示: 1.数据保存在BeanValue中,包括key和value,方便后续数据读取 package c

  • node.js读取Excel数据(下载图片)的方法示例

    前言 因为组织观影活动需要统计报名和收集影评,选择微信小程序"报名工具",管理员下载数据发现影评只是一个图片的URL链接,需要自己手动下载,哪里能难倒程序员? 1. 下载的Excel数据表: 2. 代码: const xlsx = require('xlsx'); const mkdirp = require('mkdirp'); const request = require('request'); const fs = require('fs'); const workbook =

  • Android开发实现生成excel的方法详解

    本文实例讲述了Android开发实现生成excel的方法.分享给大家供大家参考,具体如下: 都说程序员不爽产品经理,其实有的时候遇到一些奇葩的后台开发人员也会很不顺心.最近项目有这样一个要求,要生成一个excel然后发邮件给客户.结果后台人员直接把这个功能扔给客户端,理由是后台不好实现.听到这也就只能自己实现了(分分钟就想来个螺旋王扣它头上).这篇博客讲下如下在android中生成excel表并存到本地.先看下生成后的效果图: 初始化数据 首先我们要先造下测试数据,这里我把数据写死在一个常量类C

  • c#读取excel数据的两种方法实现

    方法一:OleDb: 用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在 DataTable 中对数据进行一些删减修改. 优点:读取方式简单.读取速度快 缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时.会非常占用内存,当内存不够时会抛出内存溢出的异常. 不过一般情况下还是非常不错的. (代码比原文相较有所修改) DataTable GetDataFromExcelByConn(bool hasTitle = false)

  • Android开发实现读取assets目录下db文件的方法示例

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api,获取天气是通过城市的cityID,项目中准备通过读取weather_city.db数据库来查询cityID,这篇文章写怎么读取assets目录下的db文件,其实方法也挺简单的就是把assets目录下的db文件复制一份到"/data/data/" + packName + "/&

  • Android开发实现读取Assets下文件及文件写入存储卡的方法

    本文实例讲述了Android开发实现读取Assets下文件及文件写入存储卡的方法.分享给大家供大家参考,具体如下: 调用一个反编译的.so文件,查看起加密和解密情况,需要解析上万的数组,而so文件加密解密都是通过Byte来进行,又需要把String字符串转化为 Byte,当把数据直接写在代码中就会提示多Byte数组过大.最后把数组写到Assets文件加下,读取txt文本文件. 读取Assets方法如下: public String getFromAssets(String fileName) {

  • python 使用openpyxl读取excel数据

    openpyxl介绍 ​ openpyxl是一个开源项目,它是一个用于读取/写入Excel 2010文档(如xlsx .xlsm .xltx .xltm文件 )的Python库,如果要处理更早格式的Excel文档(xls),需要用到其它库(如:xlrd.xlwt等),这是openpyxl比较其他模块的不足之处.openpyxl是一款比较综合的工具,不仅能够同时读取和修改Excel文档,而且可以对Excel文件内单元格进行详细设置,包括单元格样式等内容,甚至还支持图表插入.打印设置等内容. ​ p

  • Python读取Excel数据实现批量生成合同

    目录 一.背景 二.准备 三.实战 1.安装相关库 2.读取合同数据 3.批量合同生成 大家好,我是J哥. 在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错.而Python在自动化办公方面具有极大的优势,可以解决我们工作中遇到的很多重复性问题,分分钟搞定办公需求. 一.背景 在我们经济交往中,有时会涉及到销售合同的批量制作.比如我们需要根据如下合同数据(Excel),进行批量生成销售合同(Word). 二.准备 我们首先要准备好一份合同模板(Word),将需要替换的合同

  • Python读取Excel数据实现批量生成PPT

    目录 背景 需求 准备 PPT数据 PPT模板 实战 导入相关模块 读取电影数据 读取PPT模板插入数据 背景 大家好,我是J哥. 我们常常面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错.而Python在办公自动化方面具有天然优势,分分钟解决你的办公需求,提前下班不是梦. 需求 前几天我发表了一篇办公自动化文章Python读取Excel数据并批量生成合同,获得许多小伙伴的认可和喜欢.其中有一位粉丝提议,能否出一篇PPT自动化的教程,通过读取Excel数据批量生成幻灯片.于是,我以豆瓣

  • C#利用Openxml读取Excel数据实例

    本文实例讲述了C#利用Openxml读取Excel数据的方法,分享给大家供大家参考.具体分析如下: 这里有些问题,如果当Cell 里面是 日期和浮点型的话,对应的Cell.DataType==Null,对应的时间会转换为一个浮点型,对于这块可以通过DateTime.FromOADate(double d)转换为时间. 可是缺点的地方就是,如果Cell.DataType ==NULL, 根本无法确认这个数据到底是 浮点型还是[被转换为了日期的浮点数].查阅了很多国外资料,的确国外博客有一部分都反映

随机推荐