您的位置:首页 > 编程语言 > Java开发

js和java按照json格式导出数据

2016-03-03 21:16 459 查看
js和java按照json格式导出数据

工作中遇到了需要从表中取出大量数据后,再和所得数据进行对比取值的事,这不能一个数据一个数据的录吧,于是就取了点巧,自己写了一个简单的程序,真是节省了我的不少时间,废话少说吧。

这个程序主要是用来将符合规范的数据进行处理之后,通过字符串拼接的方式进行json格式的转换。

js代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script>
/**
* @author Liuhang
*/
function readThis(){
var filePath= document.all.upfile.value;
var oXL = new ActiveXObject("Excel.application");
var oWB = oXL.Workbooks.open(filePath);
oWB.worksheets(1).select();
var oSheet = oWB.ActiveSheet;

try {
var i = 1;//行
var j = 2;//列
var k = 1;//固定读取第一列的位置     始终不变

//用来进行交叉的键值读取
var flag = true;

document.write("var obj={");

var cell = '';

//获取总行数
var rows = oSheet.usedrange.rows.count;

//获取总列数
var cols = oSheet.usedrange.columns.count;

//循环读表
while(true)
{

if(i>rows){    //如果读取的数据超过总行数
j++;
i=1;
flag = true;
//如果读到列末
if(j==cols+1){
document.write("}};");
break;
}else{
document.write("},");
}
}

//交叉读取键值
if(flag){
//第一个json键
if(i==1){
cell = oSheet.Cells(i,j).value;
document.write("'"+cell+"':{");
i++;
flag = false;
//以列为键,先读第一个json数组对应的键,跳过循环,开始遍历值
continue;
//
}else{
cell = oSheet.Cells(i,j).value; //(行,列)
flag = false;
i++;
}
}else{
cell = oSheet.Cells(i,k).value; //(行,列)
flag = true;
}

//主要用来输出数据,拼字符串
if(flag){
document.write("'"+cell+"':");
}else{
if(i==rows+1){
//读到空格子则转换空字符串''
if(cell==null){
document.write("''");
}else{
document.write("'"+cell+"'");
}
}else{
if(cell==null){
document.write("''");
}else{
document.write("'"+cell+"',");
}
}
}

}
}

catch(e)  {
alert(e.message);
}
oWB.Close();   //不close工作簿的话,后果还是挺严重的。
oWB = null;
oXL = null;
}
</script>
<input type="file" id="upfile" /><input type="button" onclick="readThis();" value="读取">
<br>
<textarea id="txtArea" cols=50 rows=10></textarea>
</html>


导出的数据就是这样,IE7,8,9都能支持,FireFox我也试过,搜了些资料,说是要下一个下IE Tag组件,但是下了就是不好使所以有知道的朋友可以留言告诉一下,非常感谢!!!

用带有IE浏览器功能的软件也行,本人用的是EditPlus,可以使用

-------------------------------------------------------------昏隔线------------------------------------------------------------------------------

下面是java的代码:

package readExcl;

import java.io.File;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;

/**
* @author Liuhang
*
*/
public class ReadExc {

public static void main(String[] args) {
int i;
int j;
//第一列的值    (json)
int k;
//是否是读的键值对中的值
boolean flag = false;
Sheet sheet;
Workbook book;
Cell cell1;

try {
//t.xls为要读取的excel文件名
book= Workbook.getWorkbook(new File("res/侧面回弹修正.xls"));

sheet=book.getSheet(0);

//          json
i = 0; //行
j = 1; //列
k = 0; //固定读取第一列的位置     始终不变

cell1 = null;

//用来进行交叉的键值读取
flag = true;

System.out.println("var obj={");
while(true)
{

/*
* json格式实现
*/

if(i>=sheet.getRows()){    //如果读取的数据超过总行数         进行行列初始化
j++;
i=0;
flag = true;
//如果读到了列的末尾,则结束循环
if(j==sheet.getColumns()){
System.out.print("}};");
break;
}else{
System.out.print("},");
}
}

//交叉读取键值
if(flag){
//第一个json键
if(i==0){
cell1 = sheet.getCell(j,i);
System.out.print("'"+cell1.getContents()+"':{");
i++;
flag = false;
//以列为键,先读第一个json数组对应的键,跳过循环,开始遍历值
continue;
}else{
cell1 = sheet.getCell(j,i); //(列,行)
flag = false;
i++;
}
}else{
cell1 = sheet.getCell(k,i); //(列,行)
flag = true;
}

//主要用来输出数据,拼字符串
if(flag){
System.out.print("'"+cell1.getContents()+"':");
}else{
if(i==sheet.getRows()){
System.out.print("'"+cell1.getContents()+"'");
}else{
System.out.print("'"+cell1.getContents()+"',");
}
}

}
//关闭工作薄
book.close();
}
catch(Exception e)  {
e.printStackTrace();
}
}
}


本想插两张图片的,但是好像放了图片不显示,好像还不能上传文件。。。就简单说下步骤吧。

java建一个工程,在src的统计目录下创建一个文件夹,将excel文件都放到res文件夹中

只用修改java文件中excel的文件名就能实现对不同的excel导出数据。

这两种方式都只能导出符合规范的数据,也可以根据自己的业务进行一些修改。

规范格式一:



规范格式二:



整个过程就是这样了,表达能力有限,注释有点少,不懂的可以留言。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: